본문 바로가기
Develop/DevOps

Cloud 운영 전략

by jaeyoungb 2022. 12. 9.

프록시 서버

클라이언트가 서버와 소통할 때, 서버에 바로 접근하지 않고 자신을 통해 서버에 접근할 수 있도록 해주는 일종의 대리 서버이다.

 

프록시 서버 종류

Forward Proxy

  • 클라이언트 가까이에 위치한 프록시 서버로 클라이언트를 대신해 서버에 요청을 전달한다.
  • 캐싱을 통한 빠른 서비스 이용 가능하다.
  • 서버가 응답받은 IP는 프록시 서버의 IP이기 때문에 보안 측면에서 좋다.

 

Reverse Proxy

  • 서버 가까이에 위치한 프록시 서버로 서버를 대신해서 클라이언트에게 응답을 제공한다.
  • 사용자가 많아져 서버에 과부하가 올 경우를 위해 분산 처리를 할 수 있다.
  • 서버가 보내는 IP는 프록시 서버의 IP이기 때문에 보안 측면에서 좋다.

 

 

사용자의 증가로 인한 과부하를 대비하기 위한 두 가지 방법

Scale-Up

  • 물리적으로 서버의 사양을 높이는 하드웨어적인 방법이다.
  • 높은 비용이 들고, 하드웨어의 업그레이드에는 한계가 존재한다는 단점이 있다.

Scale-Out

  • 서버의 개수를 늘려 하나의 서버에 줄 부하를 분산시키는 비교적 저렴한 방법이다.
  • 여러 대의 서버로 부하를 처리하는 경우, 교통 정리 역할을 하는 것을 로드 밸런싱이라 하고, 이 역할을 담당하는 기술 혹은 프로그램을 로드 밸런서라고 한다.

 

로드 밸런서

로드 밸런서의 종류 로드밸런싱의 기준
L2 데이터 전송 계층에서 Mac 주소를 바탕으로 로드 밸런싱을 한다.
L3 네트워크 계층에서 IP 주소를 바탕으로 로드 밸런싱을 한다.
L4 전송 계층에서 IP 주소와 Port를 바탕으로 로드 밸런싱을 한다.
L7 응용 계층에서 클라이언트의 요청을 바탕으로 로드 밸런싱을 한다. (ex. 엔드포인드)

 

 

 

Auto Scailing

Scale-Out 방식으로 서버를 증설할 때, 자동으로 서버(리소스)를 관리해주는 기능이다.

클라이언트의 요청량에 따라 새 서버를 자동으로 추가하고, 감소시켜 적절한 분산 환경을 만들어준다.

 

Auto Scailing의 장점

  • 동적 스케일링 : 사용자의 요구 수준에 따라 동적으로 스케일링이 가능하고, 스케일 업할 수 있는 서버의 수에는 제한이 없다.
  • 로드 밸런싱 : 로드 밸런서와 함께 사용하면, 다수의 EC2 인스턴스에게 Workload를 효과적으로 분배할 수 있어서 사용자가 정의한 규칙에 따라 Workload를 효과적으로 관리할 수 있다.
  • 타겟 트래킹 : 사용자는 특정 타겟에 대해서만 Auto Scailing 할 수 있고, 타겟에 맞춰 EC2 인스턴스의 수를 조정한다.
  • 헬스 체크와 서버 플릿 관리 : 특정 인스턴스의 문제가 감지되면, 자동으로 다른 인스턴스로 교체한다.
    (EC2 서버의 집합을 AWS는 서버 플릿(Fleet)이라고 부른다)

 

Scaling 유형

  • 인스턴스 레벨 유지
  • 수동 스케일링 (추천 x)
  • 일정별 스케일링
  • 동적 스케일링

 

 

 

Tomcat

Apache사에서 개발한 서블릿 컨테이너만 있는 오픈 소스 웹 애플리케이션 서버이다.

  • Java 애플리케이션을 위한 대표적인 오픈 소스 WAS(Web Application Server)이다.
  • 라이센스 비용 부담이 없다. (오픈 소스)
  • 독립적으로 사용 가능하고, Apache 같은 다른 웹 서버와 연동해서 사용 가능하다.
  • Spring Boot에 내장되어 있기 때문에, 별도로 설치하지 않아도 된다.

Jetty

Eclipse 재단의 HTTP 서버이자 Java 서블릿 컨테이너이다.

  • 오픈 소스이며, 적은 메모리를 사용하여 가볍고 빠르다.
  • 애플리케이션에 내장 가능하다.
  • 소형 장비나 소규모 프로그램에 적합하다.

Netty, Undertow .. 다양한 서버 존재

 

 

 

Nginx - Proxy Server

Tomcat, Jetty와 달리 웹 서버로 클라이언트에게 정적 리소스를 빠르게 응답하기 위한 웹 서버로 사용한다.

  • 트래픽이 많은 웹 사이트의 확장성을 위해 개발된 고성능 웹 서버이다.
  • 비동기 이벤트 기반으로 적은 자원으로 높은 성능, 동시성을 위해 개발되었다.
  • 클라이언트와 서버 사이에 존재하는 리버스 프록시 서버로 사용할 수 있고, 무중단 배포를 할 수 있다.

- Nginx 설치 https://nginx.org/en/download.html

- Nginx를 통한 로드밸런싱 https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

- Nginx 공식문서 https://docs.nginx.com/nginx/admin-guide/

 

// Nginx 설치
$ brew install nginx


// Nginx 실행
$ brew services start nginx

localhost:8080으로 접속


// Nginx 설정 파일 수정
$ nginx -t
$ nano /usr/local/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

localhost만 입력해도 들어가짐


// Nginx 종료
$ brew services stop nginx

 

VPC(Virtual Private Cloud)

클라우드 내 프라이빗 공간을 제공함으로써, 클라우드를 퍼블릭과 프라이빗 영역으로 논리적으로 분리할 수 있게하는 서비스이다. VPC를 분리함으로써, 확장성을 가질 수 있고 네트워크에 대한 완전한 통제권을 가질 수 있다.

- https://www.youtube.com/watch?v=R1UWYQYTPKo&t=1s

 

CIDR(Classless Inter-Domain Rounting)

클래스 없는 도메인 간의 라우팅 기법으로 국제 표준의 IP 주소 할당 방법이다.

 

서브넷(Subnet)

IP 네트워크의 논리적인 하위 부분을 가리킨다.

VPC를 사용해서 다양한 서브넷을 생성할 수 있다.

  • 퍼블릿 서브넷 : 인터넷을 통해 연결할 수 있는 서브넷
  • 프라이빗 서브넷 : 인터넷을 연결하지 않고, 보안을 유지하는 배타적인 서브넷
  • VPN only 서브넷 : 기업 데이터 센터와 VPC를 연결하는 서브넷

 

라우팅 테이블(Routing Table)

트래픽의 전송 방향을 결정하는 라우트와 관련된 규칙을 담은 테이블로, 목적지를 향한 최적의 경로로 데이터 패킷을 전송하기 위한 모든 정보를 담고 있다. 모든 서브넷은 라우팅 테이블을 지니고 있다.