💡 개요
요즘 백준 서버가 많이 힘든 것 같다..
코드를 제출하면 채점까지 거의 2시간이나 걸릴 때도 있는데, 신기하게도 결국 2시간 뒤에는 정상적으로 결과가 나온다.
그렇다는 건, 내가 보낸 요청이 2시간 동안 서버 어딘가에 보관되어 있다는 뜻 아닐까?
비슷한 경험이 어제 밤에도 있었다.
쿠팡에서 환불을 신청했는데, 시스템상으로는 바로 완료되었지만 실제로 내 계좌에 돈이 들어온 건 오늘 점심쯤이었다.
이렇게 요청과 실제 결과 사이에 시간 차이가 생기는 이유는 뭘까?
🛠️ 메시지 큐
위와 같은 상황이 발생하는 이유는, 아마도 RabbitMQ나 Kafka와 같은 메시지 큐를 사용하고 있기 때문일 가능성이 높다.
그렇다면 메시지 큐에는 어떤 데이터가 들어갈까?
바로 클라이언트의 요청이다.
예를 들어, 쿠팡에서 환불 요청을 한다고 가정해보자.
쿠팡 서버 내부에서는 상품의 환불 처리 같은 기본적인 작업은 바로 수행할 수 있다.
하지만 환불에서 가장 중요한 단계는, 결제되었던 금액이 실제로 다시 고객의 계좌로 입금되는 것이다.
이러한 금전적 처리는 대부분 PG사(결제 대행사)를 통해 이루어지며, PG사의 시스템에 일시적인 장애나 점검이 발생할 경우, 해당 요청은 지연될 수밖에 없다.
하지만 냉정히 말하면, 환불이 꼭 즉시 완료될 필요는 없다.
예를 들어 오늘 저녁에 환불을 요청했다면, 입금이 내일 처리되어도 대부분의 사용자에게는 큰 문제가 되지 않는다.
이럴 때 메시지 큐는 유용하다.
메시지 큐는 요청을 안전하게 보관한 뒤, 순서대로 하나씩 꺼내어 처리하는 시스템이기 때문에, 서버가 바쁘거나 외부 시스템(PG사 등)이 일시적으로 응답하지 않더라도 요청을 유실하지 않고 안정적으로 처리할 수 있다.
이전을 생각해 보면 Kafka을 사용해 채팅 기능을 구현한 경험이 있다.
다음번에는 Kafka나 다른 메시지 큐를 활용해 실시간 알림이나 비동기 메시징 기반의 이벤트 처리와 같은 더 복잡한 분산 시스템을 구현해보자..
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.06.30 - 딥링크는 전역 위치에서 사용하세요 (1) | 2025.06.30 |
---|---|
[개발 일기] 2025.06.29 - GitHub Action? (0) | 2025.06.29 |
[개발 일기] 2025.06.27 - Stateful과 Stateless의 차이 (0) | 2025.06.27 |
[개발 일기] 2025.06.26 - AOT (0) | 2025.06.26 |
[개발 일기] 2025.06.25 - 쿼리 플랜이 뭐죠? (0) | 2025.06.25 |