Auto Scaling CPU, RAM, 네트워크 트래픽 등 시스템 자원들의 값을 모니터링해서 서버의 크기를 자동조절 해주는 서비스 서버의 부하가 심해져 제대로 된 서비스를 제공하지 못하는 순간이 왔을 때 서버를 증설하고 연결 반대로 네트워크 트래픽이 줄어들 경우 리소스를 감소시키기도 함(Scale-In) 장점 Dynamic Scaling(동적 스케일링) 사용자의 요구 수준에 따라 리소스를 동적으로 스케일링 할 수 있다. Scale-Up을 할 수 있는 서버의 수는 무제한이고, 필요에 따라 즉시 scale-up이 가능하다. Load Balancing(로드 밸런싱) Auto Scaling과 Load Balancing을 함께 사용하면, 다수의 EC2 인스턴스에게 사용자가 정의한 규칙에 따라 워크로드를 분배할 ..
Scale-out 방식을 통해 과부하 문제를 대처하기로 했다면, Load Balancing이 꼭 필요하다. Load Balancing - 서버가 처리해야 할 요청을 여러 대의 서버로 나누어 처리하는 것 - 한 대의 서버로 부하가 집중되지 않게 트래픽을 관리해서 서버들이 과부하 걸리지 않게 함 - Load Balancing을 처리하는 역할을 Load Balancer가 맡음 https://aws.amazon.com/ko/what-is/load-balancing/ 로드 밸런싱이란 무엇인가요? 로드 밸런싱 설명 - AWS 로드 밸런싱은 애플리케이션을 지원하는 리소스 풀 전체에 네트워크 트래픽을 균등하게 배포하는 방법입니다. 최신 애플리케이션은 수백만 명의 사용자를 동시에 처리하고 정확한 텍스트, 비 aws.am..
한 서비스에 너무 많은 사용자(클라이언트)가 접속하게 되면, 서버에는 과부하가 오기 마련이다. 과부하로 인해 서버가 원할한 서비스를 제공하지 못하는 경우, 이를 해결하는 방법은 크게 두가지가 있다. Scale-up Scale-out Scale-up(수직확장) 물리적으로 서버의 사양을 높이는 하드웨어적 방법 서버의 수가 늘어나는 것이 아니기에 프로그램 구현의 변화가 필요없음 성능 확장에 한계가 있음 성능 증가에 따른 비용 증가폭이 큼 사양을 늘린만큼 클라이언트의 요청이 다시 늘어날 경우 과부하 재발생 Scale-out(수평확장) 서버의 개수를 늘려 한 개의 서버에 주는 부하를 줄이는 방법 여러 서버로 부하를 나눠주는 대역이 필요(Load Balancer) 이론상 지속적으로 확장 가능 비교적 저렴한 비용으로..
Proxy Server 클라이언트가 서버가 소통할 때, 서버에 바로 접근하지 않고 자신을 통해 간접적으로 서버에 접근할 수 있도록 해주는 컴퓨터 시스템 또는 응용 프로그램이다. 사용 시 개인정보 보호, 캐시 사용으로 인한 속도 향상 등의 장점이 있다. Proxy server의 위치에 따라 Forward와 Reverse로 나뉜다. Forward Proxy Client가 Server에 요청을 보내면 Forward Proxy Server가 요청을 받고 Server에게 전달해주고, 응답 역시 Forward Proxy Server를 통해 Client에게 전달된다. 캐싱을 통한 빠른 서비스 이용 클라이언트는 서비스를 제공하는 서버가 아닌 프록시 서버와 소통하게 된다. 서버로 여러 클라이언트가 동일한 요청을 보낼 수..
배포 자동화 - 간단한 작업을 통해 전체 배포 과정을 진행할 수 있게 하는 것 - 매번 수동으로 하는 배포 과정을 자동화함으로써 시간 절약 가능 - Human Error 방지(수동 배포 중 특정 과정을 생략해서 오류가 발생하는 등의 문제) 배포 자동화 Pipeline Stages: 파이프라인의 전체 과정을 여러 단계로 분리한 것 Actions: 파이프라인 안에서 순차적으로 실행되는 stage에서 수행하는 주어진 작업들 Pipeline을 여러 단계(stage)로 분리할 때 대표적으로 위의 그림과 같이 세 단계로 나눌 수 있다. (꼭 세 단계로 나누어지는 것이 아닌, 상황과 필요에 따라 세분화되거나 간소화될 수 있음) Source stage 원격 저장소에 관리되고 있는 소스코드에 변경사항이 일어날 경우, 이..
Docker - 프로세스 격리 기술들을 사용해서 리눅스 응용 프로그램들을 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트 - 리눅스 컨테이너(LXC)를 기반으로 더욱 효율적인 컨테이너 관련 작업을 하기 위해 만들어진 도구 Linux Container(LXC) - 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하며 프로세스를 격리된 환경에서 실행하는 기술 - 커널을 공유하는 방식 덕분 속도가 빠르고 성능 상의 손실이 거의 없음 - Docker의 초창기 때 사용 Container - 개별 소프트웨어 실행에 필요한 환경을 독립적으로 구성해놓은 환경 - 다른 실행환경과의 독립성을 확보해주는 OS 수준의 격리 기능 https://www.44bits.io/ko/keyword/linux-container#%EB%A..
준비물 - 계정 ID, 사용자 이름, 비밀번호, 그 외 필요한 리소스들 서버 배포 - AWS EC2 EC2 인스턴스를 생성한다. AWS의 EC2 서비스의 인스턴스 탭에서 연결하고자 하는 인스턴스를 찾아 선택한 후, 연결 버튼을 누른다. Session Manager를 사용하여 연결을 시도한다. Session Manager 탭에서 연결 버튼을 누르면 터미널이 열리는데, 여기서 개발 환경을 먼저 구축해준다. sudo apt update sudo apt install openjdk-11-jre-headless java -version 명령어를 통해 설치 유무 확인 서버로 사용될 프로젝트를 git clone 등을 통해 가져와서 build로 실행파일을 만든다. (디렉토리 잘 확인하기) java -jar xxxxxx..
Cloud Computing 서버의 자원/공간/네트워크 환경을 빌려서 사용하는 것 기존의 On-premise(온프레미스) 방식과는 달리 물리적인 컴퓨터가 아닌 가상 컴퓨터를 대여하는 방식 IT 리소스를 인터넷을 통해 제공하고, 사용한 만큼 비용을 지불하는 방식으로 운영 필요에 따라 빌리는 환경의 성능을 조절 가능 컴퓨터의 스냅샷(이미지)을 이용해 다른 컴퓨터로 즉시 이주(migration) 가능 On-demand(주문형) 방식 단점 운영 환경 자체가 클라우드 제공자에게 종속되기 때문에, 클라우드에 문제가 생길 경우 사용자가 배포 중인 서비스에도 영향이 미친다. 백엔드 구성이 특정 회사의 기술로만 구성되어야만 하는 경우가 생길 수도 있다. On-demand 방식 - 사용자의 요구 사항에 따라 즉시 제공/공..