링크드인은 어떻게 1조 건의 메시지를 처리할까

메시지 큐는 맛집 스마트 번호표다

by 잇문학도


1.

메시지 큐(Message Queue)는 보통 대규모 선착순 이벤트나 타임 세일을 기획할 때, 혹은 대량의 푸시 메시지나 이메일을 발송해야 하는 상황에서 자주 언급됩니다. 시스템이 한꺼번에 몰려드는 요청을 감당하지 못해 느려지거나 멈추려고 할 때, 개발팀으로부터 "여기에 메시지 큐를 도입해서 부하를 조절해야 할 것 같습니다"라는 제안을 듣게 되는 것이죠.


2.

메시지 큐는 시스템 사이의 '스마트 번호표'이자 '손님 대기석'이라고 생각해도 좋아요. 손님(데이터 요청)이 한꺼번에 수천 명씩 몰려올 때, 주방(서버)이 당황해서 문을 닫고 도망가지 않도록 일단 번호표를 나눠주고 순서대로 대기석에 앉혀두는 완충 지대 역할을 합니다. 맛집가면 항상 대기석이 있잖아요. 쉐프들이 요리할 수 있는 속도에 맞춰 손님을 한 명씩 모시는 구조라고 볼 수 있습니다.


3.

만약 이 번호표 시스템이 없다면 앞사람의 요리가 나올 때까지 뒷사람은 계산대 앞에서 멍하니 기다려야 하는 비효율이 발생합니다. 이를 동기(Synchronous, 작업이 끝날 때까지 기다리는 방식) 방식이라고 하는데요. 주문서가 10만 장이 한꺼번에 들어오면 아무리 냉부해 쉐프라도 압박을 이기지 못하고 쓰러지겠죠? 메시지 큐는 주문서를 바구니에 안전하게 보관해두고 서버가 감당할 수 있는 만큼만 야금야금 꺼내 처리하게 하여 시스템의 안정성을 지켜줍니다.


4.

비즈니스 SNS인 링크드인(LinkedIn)은 전 세계에서 발생하는 막대한 양의 활동 데이터를 처리하기 위해 메시지 큐의 글로벌 표준이 된 'Kafka(카프카)'를 직접 만들었습니다. 초기에는 사용자의 클릭 하나하나를 실시간으로 분석 서버에 바로 보냈으나, 데이터가 폭증하자 서버가 그 속도를 따라가지 못해 시스템 전체가 멈추는 위기를 겪었는데요. 이를 해결하기 위해 데이터를 일단 거대한 대기소에 쏟아붓고, 뒷단의 서버들이 필요한 만큼만 가져가게 만드는 구조를 설계하여 현재는 하루 1조 건이 넘는 메시지를 누락 없이 처리하고 있습니다. 이름도 멋진 카프카고요.


5.

글로벌 SNS에서 동영상을 업로드하는 상황을 예로 들어볼게요. 고화질 영상 하나를 변환(인코딩)하는 데 1분이 걸리는데, 업로드 버튼은 1초에 수만 번씩 눌리고 있다고 상상해보죠. 메시지 큐가 없다면 첫 번째 사용자조차 영상 변환이 끝날 때까지 앱 화면을 켠 채로 1분 동안 기다려야 하죠. 하지만 메시지 큐가 도입된 아키텍처(구조)에서는 업로드 버튼을 누르는 순간 "접수 완료! 완료되면 알림을 드릴게요"라는 메시지와 함께 주문서가 번호표 시스템에 등록됩니다. 사용자는 즉시 다른 피드를 구경하러 떠날 수 있고, 뒷단의 서버들이 자기 페이스에 맞춰 영상을 하나씩 변환해 나갑니다.


6.

사용자에게는 즉시 접수되었다는 피드백만 주고, 실제 처리는 뒷단에서 비동기(Asynchronous, 요청과 결과를 별도로 처리하는 방식)로 돌리는 설계가 중요하답니다. 어쩌다 듣게 되는 동기, 비동기가 이런 의미에요. 서버가 터져서 '접속 불가' 화면을 보여주는 것보다, 번호표를 발행하고 차례대로 처리하는 방식이 고객에게 훨씬 더 탄탄하고 신뢰감 있는 서비스라는 인상을 심어주겠죠?


7.

오늘 유튜브에 영상을 올린 뒤 '처리 중'이라는 안내가 뜨는 것을 본다면, 내 영상이 번호표를 받고 주방에서 요리되기를 기다리고 있겠구나라고 관점에서 상상해 보시기 바랍니다. 이러한 비동기적 방식은 시스템의 생존력을 높이는 핵심 개념이라고 하네요.


[세 줄 이해]

- 메시지 큐는 폭주하는 데이터를 줄 세워 서버의 과부하를 막는 스마트 번호표 시스템입니다.

- 링크드인은 Kafka를 통해 하루 1조 건의 데이터를 처리하며 글로벌 테크의 표준을 세웠습니다.

- IT 서비스는 비동기 설계를 통해 시스템 안정성과 사용자 경험의 연속성을 확보합니다.


이전 10화쇼핑몰이 [점검 중]을 방지하는 방법