
개요
회사에서 새로운 서비스 인프라를 세팅할 기회가 생기면서 ELB를 사용하게 되었습니다.
웹 서버를 private subnet에 배치하여 보안적 이점을 취하고자 할 때, 웹 서버를 클라이언트와 통신할 수 있도록 ELB를 퍼블릭 서브넷에 배치하고, 프라이빗 서브넷의 웹 서버와 연결했습니다.
ELB를 연동하는 과정에서 저에게 2가지 선택지가 주어졌습니다.
- NLB
- ALB
제가 이미 알고 있던 정보는 다음과 같습니다.
- NLB는 L4랑 연관 있는 애고, ALB는 L7이랑 연관 있는 애잖아!
- NLB는 port 번호로, ALB는 http/https로 이러쿵저러쿵하는 애라던데?
드문드문 주워들은 정보들은 NLB와 ALB 중 무엇을 선택할 지 고민만 길어지게 만들었습니다.
이 경험을 통해 NLB와 ALB가 작동하는 방식의 차이점을 알아보고자 합니다.
캡슐화와 역캡슐화
네트워크 과목에서 한 번쯤 들어보았을 캡술화와 역캡슐화입니다.
프로그램이 데이터를 전송할 때는, 프로그램이 위치한 L7 계층에서 낮은 계층으로 이동하며 캡슐화가 진행됩니다.
캡슐화는 각 계층마다 자신의 프로토콜에 맞는 목적지 정보를 헤더에 추가하는 작업입니다.
우리는 이 캡슐화/역캡슐화 관점에서 ALB와 NLB의 차이점을 알아보려고 합니다.
ALB
ALB는 이름대로 Application 계층에서 작동하는 로드 밸런서입니다.
Application 계층에서는 보통 HTTP/HTTPS가 많이 사용됩니다.
즉, HTTP/HTTPS의 구성요소인 경로 혹은 호스트를 통한 라우팅이 가능하다는 것을 의미합니다.
클라이언트에서 작동하는 프로그램이 ALB로 요청을 보냈다고 가정해 보겠습니다.
프로그램이 실행되고 있는 기기에서 L7부터 차근차근 캡슐화가 진행됩니다.
클라이언트에서 보내진 요청은 여러 네트워크 계층을 거쳐 ALB의 물리 계층까지 전달됩니다
물리 신호가 역캡슐화되어 더 높은 계층으로 전달될 때마다 ALB는 해당 데이터의 목적지가 자신임을 확신합니다.
ALB에는 다음과 같은 조건에 따라 라우팅 할 수 있습니다.
ALB는 HTTP 헤더, 경로, HTTP Method 등을 분석한 후 설정된 조건에 따라 HTTP/HTTPS 요청을 재작성하여 대상 그룹(Target Group)으로 전송합니다.
이 때는 다시 캡슐화를 거치지 않고, 대상 그룹(Target Group)으로 HTTP/HTTPS 요청을 전송합니다.
실제로 ALB의 리스너 규칙에는 다음과 같은 조건을 설정할 수 있습니다.

NLB
ALB는 Network 계층(L4)에서 작동하는 로드 밸런서입니다.
Network 계층의 주요 프로토콜인 TCP, UDP의 헤더 정보인 IP와 포트를 기준으로 트래픽을 라우팅 합니다.
물리 신호를 수신하는 과정까지는 ALB와 동일합니다.
L3에 올라온 IP 패킷에는 프로토콜 필드가 존재하여 L4에서 TCP를 사용하는지 UDP를 사용하는지 알 수 있습니다.
IP 패킷이 역캡슐화되어 L4로 올라오면 사용하는 프로토콜과 수신 애플리케이션의 포트번호를 통해 대상 그룹으로 라우팅 합니다.
NLB에서 설정 가능한 라우팅 조건 프로토콜은 다음과 같이 4가지입니다.
설정한 프로토콜과 포트번호에 해당하는 요청이 수신되면 설정한 대상 그룹으로 라우팅 되는 모습입니다.


NLB가 더 빠른 이유
내용을 찾아보다 보니 NLB가 더 빠른 성능을 보여준다고 합니다.
이는 NLB가 단순한 라우팅에서 더 높은 throughput을 제공하도록 설계되었기 때문입니다.
ALB보다 낮은 계층에서 작동하기 때문에 패킷을 처리하는 과정이 적은 것 또한 이유가 됩니다.
결론
저는 private subnet에 위치한 웹 서버 EC2 인스턴스를 대상 그룹으로 설정했기 때문에, ALB와 NLB의 적용이 모두 가능하다는 접을 확인할 수 있었습니다.
다만, 요청이 HTTPS 형태로 요청하는 점과 Amazon Certification Manager(ACM)에서 제공하는 인증서를 등록할 수 있다는 점에서 ALB를 선택했습니다.
참고
'기타' 카테고리의 다른 글
[글또 x 코드트리] 코드트리 대만족 한 달 사용 후기 (1) | 2024.03.02 |
---|---|
Udemy - 옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트 수강 후기 (0) | 2024.01.07 |