백엔드 개발자의 토스 SLASH24 (No Limit) 컨퍼런스 행사 후기
토스의 현직 개발자들의 고민과 성과를 보고 느낀점을 공유할게요.
프롤로그
토스 Slash 24 상세 웹페이지
2024년 8월 23일 금요일, 회사 동료로부터 토스의 SLASH24 (No Limit) 컨퍼런스 행사
신청 링크를 받았습니다.
저는 주저 없이 Develop 카테고리로 신청했죠. 이번 행사에서는 [Data, Server, Frontend, Python, Node.js, QA, Android, Infra, Server DevOps, DevOps]
등 다양한 카테고리가 준비되어 있었는데, 그중에서 제가 주로 관심을 가진 분야는 [Server, Infra, Server DevOps, DevOps]
였습니다.
스페셜 세션도 흥미로웠지만, 토스의 현직 개발자들이 어떤 기술을 사용하고, 어떤 위기를 겪었으며, 그 위기를 어떻게 극복했는지에 대한 이야기가 더 궁금했습니다. 그래서 저는 일반 세션 위주로 참석하기로 했습니다. 행사는 2024년 9월 12일 삼성역 코엑스에서 열렸으며 비가 많이 내리는 날이었음에도 불구하고, 정말 많은 사람들이 행사에 참석했어요.
SLASH24 행사 체크인
행사 초대 QR을 입구에서 인증하고 행사장에 들어서면, 참석자들에게 다양한 선물이 제공되었습니다. No Limit 팜플렛
그리고 대웅제약의 우르샷
과 물
, No Limit 키링
, 개발자들에게 중요한 Toss 스티커
, 그리고 이 모든 것을 담을 수 있는 No Limit 가방
까지, 선물이 정말 푸짐했어요.
개인적으로는 No Limit 키링이 너무 마음에 들었어요. 가방에 착 하고 달면 멋쟁이 개발자가 된 느낌이 물씬 나더라고요.
행사장 내부도 넓어서 발표를 원활하게 볼 수 있었고, 불편한 점은 전혀 없었습니다. 행사장은 아주 만족스러웠습니다.
가장 기억에 남는 세션 3가지를 요약하고 느낀점을 작성해보았습니다.
Server 세션
당시 제가 듣고 기록한 내용을 간략하게 요약하고 저의 생각을 짧게 작성해보았습니다.
리플레이 검증으로 새로운 금융 시스템 안전하게 도입하기
첫번째 세션으로 리플레이 검증으로 새로운 금융 시스템 안전하게 도입하기
를 들었습니다.
토스뱅크의 대출 서비스 검증 시스템
을 소개하며, 10년 후 발생할 수 있는 다양한 이벤트를 미리 테스트하는 방법
을 설명했습니다.
- 대출 서비스의 특성:
- 최대 10년간 지속되는 대출 기간 동안 발생할 수 있는 이벤트(예: 기준금리 변경)를 검증하기 위해 개발된 시스템.
- 미래 시점 테스트:
- 2034년 등 미래 시점을 테스트하기 위해 시스템의 시간을 조정하여 거래가 정상적으로 처리되는지 확인.
- 모노리식 구조 활용:
- 모노리식 구조를 활용해 독립된 테스트 환경에서 실제 거래를 테스트함.
- 데이터베이스 복제 및 독립된 DB 사용:
- 각 시뮬레이션마다 독립된 DB를 사용해 이전 시뮬레이션의 영향을 방지.
- 시간 설정 변경:
- 운영 환경에서 시간을 바꿔 시뮬레이션을 실행하고, 실시간 거래와 배치 거래를 테스트.
- 시뮬레이션 검증:
- 기준금리 변경과 같은 거래가 정상적으로 이루어졌는지 SQL 쿼리를 통해 검증.
시간을 조정하여 미래 이벤트를 미리 테스트하고, 독립적인 환경에서 거래를 검증하여 미래에도 안정적으로 대출 서비스가 운영될 수 있도록 준비한 프로젝트에 대한 설명이었습니다.
그리고 외환 트랜잭션 시스템에서의 아키텍처 설계와 테스트 자동화, 성과 등에 대한 설명을 이어갔습니다.
이를 통해 높은 TPS를 유지하고, 24시간 중단 없는 서비스 제공, 그리고 빠른 트랜잭션 속도를 가능하게 한 점 등을 강조했습니다.
기술적 포인트 정리
기술적 포인트를 정리하자면
- Redis와 비관적 락을 활용한 동시성 제어로 거래 중에도 잔액 변동을 안전하게 처리
- 코루틴을 통한 레이턴시 감소로 계좌 검증 등의 복잡한 작업의 처리 속도를 향상
- 테스트 자동화를 통해 인적 리소스를 최소화하며 효율적인 개발과 운영
- 이상거래 탐지 서비스로 데이터의 무결성을 유지
- 성과 부분에서는 3천 TPS를 처리할 수 있는 시스템 안정성, 30밀리세컨드의 환전 속도, 그리고 24시간 무중단 환전 서비스 제공이 성과로 언급되었습니다.
느끼고 배운점
정말 인상 깊은 시간이었습니다. 특히, 개발할 때 10년, 20년, 나아가 100년 후의 미래를 가정하고 테스트한다는 이야기를 듣고, 토스 개발자들에 대한 존경심이 더욱 커졌습니다.
저는 그저 기획서를 보고 당장 프로젝트 완료 생각만 했던 제 자신을 반성하게 되는 시간이었어요.
CPU Observability 높이는 Hyperthread 톺아보기
하이퍼 스레드 환경에서의 성능 측정과 최적화에 대한 발표였습니다. 하이퍼 스레드 환경에서 성능을 측정하고 분석하는 방법에 대해 다룬 내용이었으며 네트워크 기반 서비스에서 하이퍼 스레드 사용이 성능에 미치는 영향을 측정하기 위해 여러 도구와 시나리오를 테스트 진행 했으며
성능 분석 도구로는 리눅스의 Perf 를 사용해 CPU 사용률, 인스트럭션 처리량, 백엔드 병목 현상 등을 모니터링했다고 합니다.
주요 결과
- 인스트럭션 처리량 증가:
- 하이퍼 스레드를 켰을 때 초당 인스트럭션 처리량이 약 30% 증가
- 백엔드 병목:
- 하이퍼 스레드를 사용할 때 백엔드 병목 현상이 더 크게 나타났으며, 메모리 쓰기 포트에서 경합이 발생
- 같은 노드에서 성능 비교:
- 하이퍼 스레드를 켰을 때 CPU 사용률이 줄어들고, 인스트럭션 처리량이 증가했지만 병목 현상은 여전히 존재
- 탑다운 분석:
- CPU 프론트엔드와 백엔드에서 발생하는 병목 지점을 확인할 수 있는 탑다운 분석을 통해 단계별로 성능 문제를 찾음
- 추가 도구 활용:
- PCM, ebpf 등을 활용해 클러스터 단위에서 퍼포먼스 카운터를 수집하고, 전체 CPU 성능 병목 지점을 파악하는 계획을 세움
느끼고 배운점
하이퍼 스레드가 대부분의 마이크로서비스 아키텍처(MSA)에서 성능 향상을 보였으나, 작업 부하의 특성에 따라 적절한 성능 모니터링과 분석이 필요하다는 결론에 도달했으며
CPU 병목 구간을 명확히 파악하고, 적절한 도구를 통해 성능을 최적화하는 과정이 매우 중요하다고 생각했습니다.
SSE 이벤트 푸쉬로 불필요한 Polling 제거하기
브로드캐스팅과 유니캐스팅을 활용한 실시간 메시지 전송 사례에 대해서 발표를 하였으며
브로드캐스팅과 유니캐스팅을 통해 실시간으로 메시지를 전송하고, 이를 효율적으로 관리하는 방법을 다루었습니다.
주요 내용
- 브로드캐스팅 채널 핸들러 구성
- 서버가 부팅된 후, 메시지 브로커로부터 데이터를 수신하고 이를 SSE 메시지로 변환하여 클라이언트에 전달하는 구조를 완성.
- 채팅방과 같은 이벤트성 서비스에서 브로드캐스팅을 통해 빠른 개발 가능.
- 유니캐스팅 핸들러 구성
- 유저별로 단독 채널을 만들어 클라이언트가 해당 채널만 구독.
- 개인화된 데이터 스트림을 주입받아 SSE 메시지로 전달.
- 클라이언트와의 SSE 연결이 끊기면 메시지 브로커로 구독 취소 요청.
- 실시간 이벤트 푸시 사용 사례
- FOMC 발표: 실시간 의견 공유를 위해 브로드캐스팅 사용.
- 보유 자산 관리: 3초마다 폴링 대신, SSE 서버를 통해 30%의 성능 개선을 확인.
- 최고가 알람: 메시지 플랫폼 용량 초과 문제 해결을 위해 FCM 푸시를 SSE로 분산 처리.
- 메시지 브로커 선택 전략
- 카프카: 그룹 아이디로 연결된 사용자에게만 메시지를 전송하지만, 모든 데이터를 수신하는 단점 존재.
- Redis Pub/Sub: 연결된 사용자에게만 메시지를 전송하며, 불필요한 네트워크 사용을 줄임.
- NATS: 구독한 서브젝트에만 데이터를 전송하여 성능 개선. Redis Pub/Sub 대비 5배 더 높은 성능.
- 트러블슈팅 사례
- 헬스 체크 이슈: TCP 프록시와 HTTP 프로시 간의 RST 응답 문제를 확인하고 해결.
- 모니터링 도구 사용: SSE 연결 상태를 확인하기 위한 모니터링 필요.
느끼고 배운점
실시간 이벤트 푸시를 구현할 때, 브로드캐스팅과 유니캐스팅을 상황에 맞게 활용하는 것이 중요하며, 메시지 브로커 선택과 모니터링 도구 사용이 성능 최적화에 필수적이라고 느꼈습니다.
에필로그
토스 개발자들이 자신들이 맡은 프로젝트에 얼마나 많은 애정과 진심
을 쏟았는지를 알 수 있는 시간이었으며, 왜 많은 사람들이 토스를 이용하는지 이해
하게 되었습니다.
또한, 토스의 국내 최초 무료 환전 시스템을 구축하는 데 얼마나 많은 시간과 노력
이 들어갔는지 가늠할 수 없었습니다.
그만큼 존경스러운 토스의 개발자들. 저도 그들과 함께 프로젝트에 제 모든 것을 걸고 개발해보고 싶다는 생각
이 들었습니다.
"No Limit"
라는 슬로건처럼, 한계는 없습니다.
저 또한 제가 가진 노하우와 개발 실력을 총동원하여 대한민국 사람들이 알아주는 프로젝트를 개발할 날이 오도록 항상 노력하겠습니다.
이 글을 읽고 있는 개발자인 당신도 작은 규모의 프로젝트라고 하더라도 자신의 모든 것을 걸고 개발하여 모두가 인정하는 프로젝트를 만들어가는 그날까지 같이 성장
해봅시다.
(다음은 카카오 AI 컨퍼런스 신청을 했는데 과연 당첨될지 모르겠네요..)