1. Forward Proxy
: 클라이언트 가까이에 위치한 프록시 서버
2. Reverse Proxy
: 서버 가까이에 위치한 프록시 서버
Scale-Up: 물리적으로 서버의 사양을 높이는 하드웨어적인 방법
Scale-Out: 서버의 갯수를 늘려 하나의 서버에 줄 부하를 분산시키는 방법 →로드 밸런서
: 요청을 여러 서버에 나눠 처리할 수 있도록 교통정리를 해주는 역할
로드 밸런서의 종류 | 로드밸런싱의 기준 |
---|---|
L2 | 데이터 전송 계층에서 Mac 주소를 바탕으로 로드 밸런싱 |
L3 | 네트워크 계층에서 IP 주소를 바탕으로 로드 밸런싱 |
L4 | 전송 계층에서 IP주소와 Port를 바탕으로 로드 밸런싱 |
L7 | 응용 계층에서 클라이언트의 요청을 바탕으로 로드 밸런싱 (예, 엔드포인트) |
동적 스케일링
: 사용자의 요구 수준에 따라 리소스를 동적으로 스케일링 할 수 있다.로드 밸런싱
: 로드밸런서와 함께 사용하면, 다수의 EC2 인스턴스에게 워크로드를 효과적으로 분배할 수 있어 사용자가 정의한 규칙에 따라 워크로드를 효과적으로 관리 할 수 있다.타겟 트래킹
: 사용자는 특정 타겟에 대해서만 Auto Scaling을 할 수 있으며, 사용자가 설정한 타겟에 맞춰 EC2 인스턴스의 수를 조정한다.헬스 체크와 서버 플릿 관리
: Auto Scaling을 이용하면 EC2 인스턴스의 헬스 체크 상태를 모니터링 할 수 있다. 헬스 체크를 하는 과정에서 특정 인스턴스의 문제가 감지되면, 자동으로 다른 인스턴스로 교체 한다.서버 플릿(Fleet)
이라 부른다. 적정 수준의 서버 플릿 용량을 유지하는 데 도움을 준다.Spring Boot와 Nginx 연동 실습
# Nginx 설치
$ brew install nginx
# *Nginx* 실행
$ brew services start nginx
# *Nginx* 설정 파일 수정
$ nginx -t
$ nano /opt/homebrew/etc/nginx/nginx.conf
=>
server {
listen 80; # (Mac OS) 8080 포트에서 80번 포트로 변경한다.
...
location / {
...
proxy_pass http://localhost:8080; # 요청을 8080 포트로 넘긴다.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
# Nginx 재시작
$ brew services restart nginx
# Nginx 종료
$ brew services stop nginx*
로컬 환경에서 로드밸런싱 구성 실습
1. 두 개의 스프링부트 서버 실행
./gradlew build
java -jar sample-0.0.1-SNAPSHOT.jar
java -Dserver.port=8081 -jar sample-0.0.1-SNAPSHOT.jar
2. NGINX 설정파일 수정
http {
upstream backend {
server localhost:8080;
server localhost:8081;
}
location / {
proxy_pass http://backend;
}
}
# backend라는 서버 그룹을 만든 뒤 그룹 자체로 전달
클래스 없는 도메인 간 라우팅 기법으로 1993년 도입되기 시작한 국제 표준의 IP주소 할당 방법이며, IP 클래스 방식을 대체한 방식
CIDR은 원하는 블록만큼 Network Address를 지정하여 운용할 수 있다.
CIDR 블록 | IP 주소의 수 |
---|---|
/28 | 16 |
/24 | 254 |
/20 | 4094 |
/18 | 16,382 |
/16 | 65,536 |
AZ(Availability Zone)당 최소 하나
를 사용할 수 있고, 여러 개의 AZ에 연결되는 서브넷은 만들 수 없다.1. IP 주소 범위 선택
2. 가용 영역(AZ)별 서브넷 설정
3. 인터넷으로 향하는 경로(route) 만들기
4. VPC로/부터의 트래픽 설정
Network ACLs
Security groups
: 애플리케이션 구조