본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 스물 여덟번째 날입니다.
스물 일곱번째 날에는 인증 서비스를 분리하는 이유에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 4. 서비스 부하 분산을 위한 분리 시작 >
Ch 4.책임 분리로 진행하는 모놀리틱 서비스 분해와 Nginx 연동 >
03. 왜 LB가 필요한가
입니다.
🌐 왜 로드밸런서(LB)가 필요한가?
- 리버스 프록시, 보안, 확장성, 그리고 클라이언트 편의성까지
- 이번 포스팅에서는 "왜 로드밸런서(LB)가 필요한가" 를 주제로, 서비스 구조와 네트워크 구성의 관점에서 그 필요성과 이점을 살펴보겠습니다. 특히 인증 서버를 분리한 뒤, 클라이언트에 어떤 변화가 생겼는지, 그리고 이를 어떻게 해결할 수 있는지를 중심으로 설명합니다.
🧭 현재 서비스 구조 요약
- 현재 채팅 서비스는 인증 서버를 모놀리틱 구조에서 분리하여 별도의 서버로 운영 중입니다. 하지만 인증 서버와 채팅 서버에 각각 접속해야 하므로, 클라이언트는 두 개의 엔드포인트를 알아야 합니다. 이는 사용자 경험과 유지 보수 측면에서 비효율적일 수 있습니다.
🧱 로드밸런서 도입: Nginx를 앞단에 세운다
- 이를 해결하기 위해 Nginx를 로드밸런서이자 리버스 프록시로 도입합니다. 클라이언트는 이제 하나의 엔드포인트(Nginx)만 알면 되고, 내부에서 인증 서버나 채팅 서버로 라우팅이 자동으로 이뤄집니다.
- ✔️ 리버스 프록시란?
외부에서 들어오는 요청을 내부 서버로 전달하는 방식입니다. 반대로, 클라이언트 쪽에 위치해 나가는 요청을 중계하면 포워드 프록시가 됩니다.
- ✔️ 리버스 프록시란?
🔐 보안상의 장점
- Nginx가 앞단에 위치하면 내부 서버들은 공인 IP 없이도 서비스가 가능합니다. 외부에 노출되는 것은 Nginx 하나뿐이므로 공격 표면이 줄어들고, 서버가 직접 공격받을 가능성도 낮아집니다.
- 🔒 예전 구조: 서버가 직접 공인 IP를 들고 있어야 했음
- 🔐 개선된 구조: Nginx만 노출, 내부는 사설 IP로 운영 가능
🚪 클라이언트와 서버의 연결 단순화
- 기존에는 인증 서버와 채팅 서버의 엔드포인트를 각각 클라이언트가 알고 있어야 했습니다. 하지만 Nginx를 도입하면 단 하나의 접속 포인트만 알면 됩니다.
- ✅ 서버 확장에 따라 엔드포인트가 늘어나더라도, 클라이언트는 수정할 필요가 없습니다.
📈 수평 확장을 위한 기반: 라운드 로빈 방식의 부하 분산
- 로드밸런서를 통해 인증 서버를 여러 개로 띄우더라도, Nginx가 요청을 자동으로 분산시켜줍니다. 기본 방식은 라운드 로빈이며, Nginx 유료 버전이나 부가 기능을 활용하면 부하 기반 분산(WAF, 커넥션 수 기반 등) 도 가능합니다.
- ⚠️ 다만, 기본 Nginx는 실시간 부하 상황에 따른 스마트한 분산은 어렵습니다.
- 서비스 구조가 복잡해질수록, 클라이언트와 서버 간의 연결 지점을 단순화하는 것은 생각보다 더 중요해집니다. 이번 로드밸런서 도입은 단순히 성능 최적화를 넘어서, 서비스 아키텍처의 안정성과 확장성에 있어 핵심적인 역할을 한다고 느꼈습니다.
- 또한, 클라이언트의 수정 없이 서버를 유연하게 확장할 수 있다는 점은 서비스 운영 측면에서도 큰 이점입니다. 앞으로 인증 서버 외에도 다양한 모듈이 분리될 예정이므로, LB 구조를 미리 정립해두는 것이 기술 부채를 줄이는 현명한 선택이라고 생각합니다.