이제 웹 서버 준비를 마쳤으나 아직 인터넷에 공개되지 않은 상태입니다. 로드밸런서를 이용해 브라우저에서 애플리케이션을 열람할 수 있도록 합니다.
사용자가 증가하면 1대의 웹 서버로는 요청들을을 감당하기 힘이 듭니다. 이럴 때는 웹 서버를 여러 대를 준비하여 성능을 높일 수 있습니다. 이런 방식을 스케일 아웃 이라고 부릅니다. 하지만 단순히 웹 서버만 늘리면 송신 대상지의 PC 브라우저나 모바일에서는 새로운 웹 서버를 자동으로 이용할 수 없습니다. 따라서 서비스를 제공하는 측에서 무언가의 시스템을 추가로 제공해야 합니다.
AWS에서는 ELB(Elastic Load Balancing)라는 서비스로 로드 밸런스를 제공합니다. ELB는 다음 세가지 로드 밸런서를 제공합니다.
실제로는 HTTP(포트 번호는 1024보다 큰 값)라는 조건을 이용해 로드 밸런서로부터 요청을 받습니다.
포트는 보통 관습적으로 정해져 있으며, 자바 언어 기반은 8080, 루비 언어 기반은 3000을 주로 이용합니다.
HTTPS를 HTTP로 변환하는 이유
HTTPS를 이용한 통신의 암호 및 복호 처리를 웹 서버가 아니라 로드 밸런서에서 수행하기 때문입니다. 이렇게 하면 웹 서버의 부하와 인증서 등의 관리 비용을 줄일 수 있습니다.
포트번호를 변환하는 이유
웹 서버의 보안을 높이기 위해서 보통 1024 이상의 포트 번호를 이용해 일반 권한을 가진 사용자로 애플리케이션을 작동합니다. (0~1023까지의 포트번호는 root권한으로 작동하며, 부정적인 접근으로 빼앗긴다면 root 권한 역시 전달됩니다.)
인터넷 게이트웨이로의 경로가 있는 서브넷을 지정해야 합니다.
어떤 프로토콜(HTTP/HTTPS 등)을 이용할 것인지와 같은 인터넷->로드 밸런서
접근과 관련한 설정을 합니다. 클라이언트로부터 처리를 받는 기능은 리스너라고 합니다.
어떤 웹 서버에 요청을 분산 할 것인가와 같이 로드 밸런서 -> 웹 서버
접근과 관련한 설정을 합니다. 인터넷으로 부터의 접근을 조건에 따라 서로 다른 웹 서버에 분산시킬 수 있습니다.
웹 서버의 HTTP/HTTPS 통신에 특화된 ALB를 선택합니다.
로드 밸런서의 이름을 설정합니다. Scheme과 IPv4는 기본값으로 둡니다.
로드 밸런서와 VPC를 연결하는 설정입니다. VPC를 설정하고 퍼블릭 서브넷을 지정합니다.
기본 default 보안 그룹과 앞서 private 서브넷용으로 생성한 보안 그룹을 각각 선택합니다.
지금은 HTTP 리스너만 설정합니다.
HTTPS 리스너는 후에 커스텀 도메인과 DNS 준비에서 SSL 서버 인증서 발행 시에 추가하도록 합니다.
기본적으로 HTTP 80포트에 대한 리스너가 제공되므로 이를 수정합니다.
먼저, 라우팅 대상 그룹을 생성합니다. '대상 그룹 설정' 을 클릭합니다.
대상 그룹 설정
기본 구성
카레고리에서는 생성할 대상 그룹의 기본 정보를 설정합니다. 이 설정은 한번 설정한 뒤 변경할 수 없습니다.
ex) 인터넷으로부터 접근할 때는 HTTPS로 포트 번호 443번으로 수행하지만, 로드 밸런서에서 복호화해 웹 서버에 접근할 때는 HTTP로 포트 번호 8080을 이용하는 것과 같은 설정을 할 수 있습니다.
대상 그룹에 포함시킬 VPC를 선택합니다.
Protocol Version은 통신할 프로토콜에 맞는 버전을 선택합니다. 필자는 HTTP1을 선택했습니다.
상태 검사 항목에서는 로드 밸런서가 각 웹 서버의 작동 상황을 확인할 때 이용하는 경로를 지정합니다. 이 경로로 보내진 요청이 지정된 횟수만큼 실패하면 로드 밸런서는 해당 웹 서버로 보내지 않도록 자동으로 판단합니다. 기본값으로 두도록 합니다.
설정을 마치고 대상 등록(타깃 등록)으로 넘어갑니다.
타깃 등록
대상 그룹에 등록할 EC2 인스턴스를 선택한 후 아래에 보류 중인 것으로 포함
항목을 클릭한 후 대상 그룹을 생성합니다.
타깃 그룹이 올바르게 등록되었음을 확인합니다.
다시 탭을 닫고 돌아와 '리스너 및 라우팅' 항목에서 HTTP, 80포트, 방금 생성한 타깃을 선택합니다.
모두 선택 후 아래의 로드 밸런서 생성
버튼을 클릭합니다.
이것으로 로드 밸런서를 생성했습니다. 팝업과 같이 로드 밸런서가 정상적으로 활성화 되기까지 몇 분이 소요될 수 있습니다.
로드 밸런서 생성으로 인터넷과 웹 서버가 연결되었습니다. 브라우저에서 작동을 확인해봅시다.
보통 아파치나 엔진엑스 등의 HTTP 서버 프로그램을 이용하지만, 여기서는 웹 서버를 생성할 때 이용한 Amazon Linux2에 미리 설치된 파이썬을 이용해 준비합니다.
파워쉘을 2개 실행해 각각의 웹서버 web01과 web02에 ssh로 연결합니다.
이제 다음 작업을 수행합니다.
$ python -m SimpleHTTPServer 8080
여기까지 진행했더라도 로드 밸런서는 곧바로 요청 라우팅을 하지 않습니다. 수 차례 서버에 헬스 체크를 수행하고, 해당 요청들이 모두 성공하면 요청을 라우팅합니다. 이제 EC2 대시보드의 '대상 그룹'에서 확인해봅시다.
상태 확인의 상태가 healthy
로 바뀌면 대상 웹 서버로 요청이 라우팅됩니다. 웹 서버 가동 후 healty로 바뀌기 까지 약간의 시간이 소요될 수 있습니다.
이제 로드 밸런서에 접근할 준비를 마쳤습니다.
브라우저를 통해 확인해봅시다.
로드밸런서에 외부에서 접근하기 위한 도메인 이름은 로드밸런서의 설정 화면에서 확인할 수 있습니다.
브라우저에서 해당 도메인으로 들어가봅시다.
Ctrl + C
를 눌러 파이썬 프로그램을 종료합니다.