Post

AWS 로드밸런서

AWS로 시작하는 인프라 구축의 정석을 읽고 정리한 글입니다.

사용자가 늘어날 경우 1대의 웹 서버로는 요청을 깔끔하게 처리할 수 없는 경우가 있다. 이럴 때는 웹 서버를 여러 대 준비해서 성능을 높이는 방법을 이용할 수 있다. 이렇게 성능을 향상하는 방식을 스케일 아웃scale-out이라 부른다.


주요 역할

로드밸런서load balancer는 이러한 스케일 아웃을 수행하는 방법 중 하나이다. 로드밸런서의 주요 역할은 다음과 같이 3가지로 꼽을 수가 있다.

  • 요청 분산
  • SSL 처리
  • 부정 요청 대응

로드밸런서의 역할


요청 분산

인터넷으로부터 전송된 요청을 여러 웹 서버에 균등하게 분산한다.

한줄서기


SSL 처리

로드밸런서의 두 번째 역할은 송수신하는 데이터를 암호화하는 SSLSecure Sockets Layer처리이다. 인터넷으로부터의 접근(외부로부터의 연결) 중, 안전하게 정보를 보내기 위해 HTTPS라는 프로토콜로 통신할 때가 있는데 이 통신에서 SSL을 사용한다. 이때 브라우저와 서비스 사이를 흐르는 데이터(패킷)은 암호화된다.

데이터 암호화・복호화 처리는 복잡한 계산을 필요로 하므로 웹 서버에서 실행하면 부하가 걸릴 수 있다. 로드벨런서에는 암호 관련 처리를 빠르게 수행하는 전용 시스템이 제공되므로 암호를 처리하는 것보다 빠른 속도로 처리할 수 있다.


부정 요청 대응

부정한 접근을 감지해서 방지하는 처리를 웹 서버에서 수행하면 높은 부하가 걸려 웹 서버 자체가 다운될 가능성도 있다. 그리고 최악의 경우에는 부정한 접근을 허용해 웹 서버가 탈취될 가능성도 있다. 로드 밸런서에는 이러한 부정한 접근에 대응하는 전용 시스템이 제공된다. 따라서 웹 서버별로 대책을 수립하는 것보다 더 효율적으로 부정한 접근에 대응할 수 있다.


AWS에서 제공하는 로드밸런서 유형

유형특징용도
Application Load Balancer(ALB)HTTP나 HTTPS 접근에 특화됨웹사이트나 REST API를 제공하는 사이트
Network Load Balancer다양한 통신에 대응할 수 있음게임, 채팅 등
Classic Load Balancer앞의 두 로드 밸런서가
등장하기 전에 사용됨
특별히 Classic Load Balancer를
선택해야 하는 경우는 거의 없음


로드 밸런서를 이용한 요청 라우팅

웹 애플리케이션을 인터넷에 공개할 때는 보통 HTTP(포트 번호 80) 또는 HTTPS(포트 번호 443)을 이용한다. 로드밸런서 내의 웹서버는 HTTP(포트 번호는 1024보다 큰 값)라는 조건을 이용해 로드 밸런서로부터 요청을 받는다.

로드 밸런서는 공개한 프로토콜과 포트 번호의 조합을, 내부의 웹 서버가 받는 프로토콜과 포트 번호로 변환하는 기능을 제공한다. 이를 요청 라우팅request routing이라 부른다. HTTPS를 HTTP로 변환하는 이유는 HTTPS를 이용한 통신의 암호 및 복호 처리를 웹 서버가 아니라 로드 밸런서에서 수행하기 때문이다. 그러면 웹 서버의 부하를 줄이거나 인증서 등의 관리 비용을 줄일 수 있다.

포트 번호를 변환하는 이유는 웹 서버의 보안을 높이기 위해서다. 리눅스 등의 OS에서는 0~1023까지의 포트 번호로 데이터를 받으려면 특별히 강력한 권한(root 권한)을 가진 사용자로 프로그램(아파치Apache, 엔진엑스nginx 등)을 작동해야 한다. 하지만 그 프로그램을 악의를 가진 사용자에게 빼앗길 경우가 존재한다. 이 이유로 로드 밸런서의 내부에 있는 웹 서버에서는 보통 1024 이상의 포트 번호를 이용해 일반 권한을 가진 사용자로 작동한다.

This post is licensed under CC BY 4.0 by the author.