[72일차]프록시 서버,Auto Scaling, Jetty, NGINX, VPC

유태형·2022년 8월 9일
0

코드스테이츠

목록 보기
72/77

오늘의 목표

  1. 프록시 서버
  2. Auto Scaling
  3. Jetty
  4. NGINX
  5. VPC



내용

프록시 서버

프록시 서버는 서버와 클라이언트가 통신할 때 클라이언트가 서버에 바로 접근하지 않고 프록시 서버를 통해 서버를 접근할 수 있도록 대리 역할을 수행합니다.

프록시 서버는 클라이언트에 가까이 있는지와 서버에 가까이 있는지에 따라 가지는 장점과 역할이 달라져 프록시 서버는 어디에 가까이 있는지에 따라 보통 2가지로 나눕니다.



Forward Proxy

클라이언트 가까이 위치해 있어 클라이언트를 대신해 서버에 요청을 보냅니다.

여러 클라이언트가 동일한 요청을 보내는 경우 첫 응답 결과 데이터를 캐시에 저장해 놓고, 이후 서버에 재 요청을 보내지 않아도 프록시 에서 클라이언트로 빠르게 전달 가능합니다.

또한, 클라이언트가 서버에 직접 요청을 보내는 것이 아니라 프록시가 대신해서 서버에 전송하므로 서버는 프록시 서버의 IP는 알지만, 클라이언트의 IP를 알지 못하므로 추적이 불가능 해지는 보안상 장점도 존재합니다.



Reverse Proxy(로드 밸런서)

서버 가까이 위치해 있어 클라이언트를 대신해 서버에 요청을 보냅니다. 보통 서버 가까이서 여러 분할 서버들에 요청을 분산시키는 역할을 수행합니다.

분산 처리시 여러 장점이 존재합니다. 어느 한 서버가 고장이 났을 경우 해당 서버를 제외한 나머지 서버들이 처리해서 에러에 대응할 수도 있고, 서버들의 부하량을 모니터링 하다가 서버를 조절할 수도 있는 장점이 존재합니다.

Forward Proxy와 반대로 클라이언트에게 서버를 숨길 수 있습니다. 클라이언트는 서버의 IP로 응답 받는 것이 아닌 Reverse Proxy의 IP로 응답 받으므로 서버의 IP를 숨길 수 있습니다.




Auto Scaling

오토 스케일링을 이해하기 전 서버의 처리량을 조절하는 방법은 서버 자체의 역량을 조절하는 방법과 처리할 서버의 수를 조절하는 질과 양 2가지 방법이 존재할 것입니다.



Scale-Up

서버의 물리적인 하드웨어 스팩을 올리는 방법입니다. 서버의 수와 프로그램의 변화에 필요없는 장점이 있지만, 비싼 비용이 발생하고 더 좋아지긴 하지만 이 또한 한계가 존재하는 단점이 있습니다.



Scale-Out

Scale-Out은 서버의 갯수를 늘려 하나의 서버에 줄 부하를 분산시키는 방법입니다. 만약 여러 서버가 모두 부하를 이미 상당 부분 받고 있다면 서버의 댓수를 늘려 기존의 서버에 부하를 줄입니다. 이렇듯 여러대의 서버에게 데이터를 주는 교통정리 해주는 기술을 로드 밸런싱이라고 합니다.

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


EC2 Auto Scaling

  • 동적 스케일링 : 사용자의 요구 수준에 따라 리소스를 동적으로 스케일링 할 수 있습니다.
  • 로드 밸런싱 : 다수의 EC2 인스턴스에 워크로드를 효과적으로 분배할 수 있습니다.
  • 타켓 트래킹 : 특정 타겟에 대해서만 Auto Scaling이 가능합니다.
  • 헬스체크,서버플릿 관리 : EC2인스턴스의 헬스 체크 상태를 모니터링 가능하고, 인스턴스의 문제가 감지되면, 다른 인스턴스로 교체합니다.

시작 템플릿으로 인스턴스 확장 또는 축소하려면 어떤 서버를 사용할지 AMI, 인스턴스 타입, 키 페어, 시큐리티 그룹 등 모든 정보를 결정할 수 있습니다.

  • 인스턴스 레벨 유지 : 기본 스케일링 계획으로도 부르며 일정한 수의 인스턴스가 필요한 경우 최소, 최대 몇 인스턴스를 원하는지 용량에 동일한 값을 설정합니다.
  • 수동 스케일링 : 추천하지 않는 방법이며 사용자가 직접 콘솔이나 API, CLI등에 수동으로 인스턴스를 추가 또는 삭제해야 합니다.
  • 일정별 스케일링 : 서비스는 항상 일정하지 않고 특정시간, 특정 기간에 트래픽이 몰릴 것입니다. 이러한 패턴이 잘 분석 되어있다면 트래픽이 많을 때는 인스턴스를 늘리고 적을 때는 인스턴스를 줄이기가 가능합니다.
  • 동적 스케일링 : 수요의 변화에 능동적으로 반응하여 용량을 조절합니다. 모니터링 중 일정 부하가 일정 수준이상 일정 시간이상 지속 된다면 서버를 추가하는 방식입니다. 동적 스케일링은 항상 스케일 업과 스케일 다운 두 가지 정책을 작성해야 합니다.



Jetty

Spring boot는 기본적으로 Tomcat이 내장되어 별도의 웹 애플리케이션 서버를 설치 없이 실행하면 자동으로 실행되었습니다. 스프링은 Tomcat 뿐만 아니라 Jetty로도 웹 애플리케이션 서버를 실행할 수 있습니다.

JettyTomcat과 같은 자바 서블릿 컨테이너이자 서버로 사용 될 수 있습니다. Tomcat보다 적은 메모리를 사용하여 가볍고 빠릅니다.또 애플리케이션에 내장 가능하므로 경량 웹 애플리케이션으로 소형 장비, 소규모 프로젝트에 적합합니다.



Tomcat -> Jetty

스프링에서는 build.gradle의 단 몇줄로 Tomcat에서 Jetty로 사용할 수 있습니다.

dependencies{
	implementation 'org.springframework.boot:spring-boot-starter-web'
}

은 기본적으로 의존성 모듈 내에 Tomcat도 포함되어 있습니다.

dependencies{
	...
    implementation ('org.springframework.boot:spring-boot-starter-web') {
    	exclude module: 'spring-boot-starter-tomcat'
    }
    implementation ('org.springframework.boot:spring-boot-starter-jetty')
}

우선 spring-boot-starter-webTomcat모듈을 제외하고 의존을 주입받습니다. 후 Jetty웹 애플리케이션 서버를 의존 주입 받으면 간편히 Tomcat에서 Jetty로 변경가능합니다.




NGINX

NGINX는 가볍고 높은 성능의 오픈소스 웹 서버 소프트웨어입니다. TomcatJetty웹 애플리케이션 서버였다면 NGINX는 프록시 서버로 사용할 수 있습니다.

NGINX는 비동기 이벤트 기반으로 적은 자원으로 높은 성능과 높은 동시성을 위해 개발되어 다수의 클라이언트 연결을 효율적으로 처리할 수 있습니다.

이러한 NGINX의 장점을 활용하여 간단한 설정을 통해 로드 밸런서로 활용할 수 있습니다.

nginx.conf파일을 수정합니다.

http{
	upstream backend{
    	server localhost:8080;
        server localhost:8081;
    }
    
    location / {
    	proxy_pass http://backend;
    }
}

포트가 80808081localhost 웹 서버를 backend라는 그룹으로 묶고 locationproxy_pass 값으로 서버 그룹을 설정합니다. NGINX는 80번 포트를 사용하기 때문에 80번 포트로 접속하면 80808081포트 서버로 나뉘어 연결 됩니다.



실행 결과

8080포트 서버는 스프링에서 제공하는 기본 포트이고 8081포트 서버는 application.properties 파일에 server.port=8081로 포트를 지정하였습니다.

NGINX 프록시 서버, 8080포트 웹 서버, 8081포트 웹 서버 3개의 서버를 실행시킵니다. 80번 포트로 프록시 서버 접속 시 자동으로 8080, 8081 웹 서버로 나뉘어 연결 시켜줍니다.

F5나 새로고침 버튼을 눌러 프록시 서버에 다시 접속하면 PID17564인 서버와 19376인 서버가 번갈아 가며 접속 됨을 확인할 수 있습니다. 해당 PID 서버들은 8080 포트 웹 서버 와 8081 포트 웹 서버 입니다.




VPC

출처 : Amazon Web Services Korea
https://youtu.be/R1UWYQYTPKo

아마존 직원 분께서 직접 VPC와 관련된 내용을 강연해 주신 영상입니다.




후기

클라우드 컴퓨팅을 사용하는 강력한 이유를 제공하는 프록시서버에 대해 학습하였습니다. Scale-Up 보다 Scale-Out의 효율이 더 좋아서 많은 기업들이 다수의 서버 컴퓨터를 논리적으로 묶고 사용하고 있습니다. ops 과정을 이해하는 데 있어 프록시 서버는 매우 중요한것 같습니다.




GitHub

https://github.com/ds02168/CodeStates_Spring/tree/main/section4-week3-WED

profile
오늘도 내일도 화이팅!

0개의 댓글