기술블로그

네이버 메인 페이지의 트래픽 처리 - 마무리

ignuy 2023. 7. 13.

지금까지 네이버가 메인 페이지에서 발생하는 트래픽을 어떻게 처리하는지 총 서론, 본편 1, 본편 2로 나누어 살펴보았다. 서비스 아키텍처 모식도를 다시 한번 살펴보며 정리하자.

네이버 메인 페이지의 분산 처리 모델(IDC 이중화와 서버, 네트워크 장비 등은 표현하지 않음)

🔔 서비스 요구사항 🔔
❗어떤 서버로 접속해도 동일한 내용을 보여 주어야 하며, 특정 상탯값(사용자의 로그인 여부 등)에 의존하지 말아야 한다.
❗ 무슨 일이 있어도 사용자에게 서비스가 제공되어져야 한다.
      => 브라우저에 빈 페이지가 나타나선 안된다.
      => 메인 페이지에서 연동하는 외부 시스템은 늘 접속 불안정을 가정하고 빠른 실패 전략을 실행한다.
❗ 트래픽 증가에 탄력적으로 대처할 수 있어야 한다.
      => 트래픽이 폭주할 때 서버 증설만으로도 대응할 수 있어야 한다.
      => 각 컴포넌트(Web server, WAS)의 효율성을 극대화할 수 있어야 한다. 

네이버의 메인페이지는 위 모식도와 같은 구조로 서비스 요구사항을 준수하고 있다. 이를 위한 기술스택을 다시 짧게 정리해보자.

우선 CSS나 Java Script, 이미지와 같이 공통으로 호출되는 리소스는 GCDN(Global CDN)을 이용하여 사용자에게 빠르고 안전하게 콘텐츠를 전달한다. 이를 통해 웹 서버에 발생하는 트래픽 부하를 획기적으로 줄일 수 있다.

여기서 그치지 않고 SSI(Server Side Includes)라는 서버사이드 스크립트 언어를 사용하여 서버에 있는 특정 파일을 읽어오거나 특정 쿠키 유무의 판별 등 간단한 기능을 웹 서버에서 처리하여 WAS에 부하를 줄일 수 있을 뿐만 아니라 웹 서버의 활용도도 높여 서버 리소스를 효율적으로 관리할 수 있다.

또한, 운영체제와 독립적으로 HTTP 기반 통신을 처리할 수 있도록하는 라이브러리인 APR(Apache Portable Runtime)을 통해 커스텀 모듈로 기능을 확장하여 사용하고 있다. 커스텀 모듈을 사용하면 SSI를 사용할 때와 마찬가지로 WAS에서 처리할 기능을 웹 서버에서 처리할 수 있어 WAS의 부담을 줄일 수 있다. APR의 역할은 크게 두가지이다. 간단한 외부 시스템 연동과 커스텀 모듈을 통해 모든 WAS가 다운되더라도 웹 서버만 살아있다면 Data publisher를 통해 서비스를 제공할 수 있게 한다.

웹서버 밖에서는 마이크로 서비스의 부분 도입을 활용한다.

외부 시스템과 API 연동을 담당하는 부분은 Node.js로 구축하여 Java을 활용했을 때의 "병렬 처리 시 스레드 문제, 비동기 non-blocking처리 불리"라는 약점을 극복하였다.

뿐만 아니라 API 서버에는 서킷 브레이커를 적용하여  외부 서비스의 장애로 인한 연쇄적 장애 전파를 막기 위해 자동으로 외부 서비스와 연결을 차단 및 복구하는 역할을 주었고 WAS에는 서버의 모니터링과 관리를 위해 서비스 디스커버리를 적용했다.

 

다음은 네이버 D2 기술 블로그 원문의 인용이다.

네이버 메인 개발팀은 국내에서는 손꼽힐 정도로 많은 트래픽을 처리하고 있다. 그리고 외부 상황에 따라 급격하게 변화하는 트래픽을 처리해야 한다. 네이버 메인 개발팀은 무슨 일이 있더라도 사용자에게 서비스가 제공될 수 있게 분산 처리 모델을 개발하고 다양한 분산 처리 기술을 적용했다. 또한 트래픽 폭증이나 외부 재해가 일어났을 때도 서비스가 안정적으로 이루어질 수 있게 모니터링 체계와 비상 대응 체계를 갖추고 있다.

네이버 메인 페이지의 트래픽 처리 시스템과 이에 필요한 대용량 분산 처리 특화 지식, 고가용성과 동시성, 성능을 고려한 시스템 설계 지식 등은 흔히 접할 수 없는 것이다. 그 외에 네이버 메인 개발팀은 Chrome, Safari, Firefox, Internet Explorer, 삼성 브라우저, IoT 기기 등 네이버 메인 페이지가 다양한 프런트엔드 환경을 지원하면서 쌓은 경험을 가지고 있다.

네이버 메인 개발팀에 있으면 백엔드 영역에서도 Java, Node.js 등 다양한 언어를 사용한 개발을 경험할 수 있다. 또한 평범한 환경에서는 잘 발생하지 않는 특수한 문제(스레드 경합, 데이터 정합성, 고부하 상황에서 트러블슈팅)를 처리하면서 쌓은 각종 분석 경험(스레드, 힙, GC 로그 분석, strace 사용 등)을 엿볼 수 있다.

백엔드 영역에서 트래픽으로 인해 발생할 수 있는 문제를 엿볼 수 있는 좋은 기회였다. 아직은 기술을 읽고 흡수하는 단계지만 거인의 어깨에 서서 세상을 볼 날이 오고 있다는 것을 느끼고 있다. 이 다음에도 트래픽 처리에 관한 내용을 정리할 것이다. 다음은 실시간성 이슈가 중요한 LINE 오픈챗 서버 개발자의 100배 이상 급증하는 오픈챗 트래픽을 다루는 방법에 대해서 알아볼 것이다.

댓글