인터넷전문은행 토스뱅크, 증권사인 토스증권은 어떠한 IT 인프라를 활용하고 있을까.

토스는 지난 8일부터 10일까지 개최한 자체 개발자 컨퍼런스 ‘슬래시22’에서 금융 자회사인 토스증권, 토스뱅크의 IT 시스템을 공개했다. 기본적인 시스템 구성부터 기술적 문제해결 방식 등 다양한 사례를 공유했다.

토스뱅크, 신속성과 안정성 최우선 둔 시스템 구성

이날 발표에 따르면, 토스뱅크는 신속성과 안정성을 염두에 두고 아키텍처를 설계했다. 그 중 안정성을 초점에 맞춰 주요 시스템을 구축했다. 토스뱅크 시스템은 크게 채널계, 계정계로 나뉜다. 채널계는 고객의 트래픽을 받아 계정계로 넘겨주는 시스템이며, 계정계는 거래에 관련된 주요 서비스를 담당하는 시스템이다.

채널계는 모든 서비스가 컨테이너화 되어, 쿠버네티스라는 플랫폼 위에 운영되는 구조로 이뤄졌다. 반면, 계정계는 기존 금융권 시스템과 비슷하게 거대한 모놀리틱(덩어리)으로 이뤄져 금융 관련 비즈니스 로직이 계정계에 집중된 구조였다.

그러나 토스뱅크는 전통적인 구조의 계정계 시스템이 성능과 운영 관점에서 불안정하다는 것을 깨달았다. 토스뱅크의 하성준 데브옵스 엔지니어는 “솔루션 의존성이 있다보니 다양한 배포 전략을 가져가기 힘들었고 운영자동화 또한 힘들었다”며 “배포 도중 휴먼에러, 서비스 운영 중 계정계의 특정 서비스 장애 등 여러 장애 상황이 발생했다”고 말했다.

토스뱅크 주요 시스템 변화

결국 토스뱅크는 기존에 분리된 채널계와 계정계 경계를 허물었다. 거래 관련 신규 로직은 자체적으로 구축하고, 채널시스템과 거래 서비스를 컨테이너화했다. 개발자가 개발, 배포, 운영을 하는데 있어 문제가 없도록 클라우드 네이티브 환경을 구축하고 있다.

기존 금융권에서 데이터센터급 장애시 활성화되는 재해복구(DR) 개념이 아닌 ‘액티브-액티브’로 구성했다.

또 기존 금융권에서 데이터센터급 장애시 활성화되는 재해복구(DR) 개념이 아닌 ‘액티브-액티브’로 구성해, 한쪽 데이터센터에 장애가 나더라도 서비스에 영향을 주지 않도록 구성했다. 데이터센터 이중화를 통해 장애나 인프라 단위 작업이 있을 때 빠르게 트래픽을 틀어 서비스에 영향을 주지 않도록 설계했다.

아울러, 토스뱅크는 일부 서비스 장애가 전면 장애로 이어질 수 있는 모놀리틱 아키텍처를 마이크로서비스아키텍처(MSA)화해, 장애 도메인을 분리했다. 각각의 서비스는 지속적통합(CI)/지속적제공(CD) 파이프라인을 통해 독립적인 배포와 스케일 아웃을 할 수 있도록 구축했다.


토스증권, 웹소켓 기반 실시간 시세 구현  

토스증권은 실시간 시세 서비스 적용기를 소개했다. 토스증권은 국내외 종목을 실시간으로 제공하고 있다. 이를 위해 토스증권은 관련 기술로 웹소켓(WebSocket)을 택했다. 웹소켓은 웹 서버와 웹 브라우저 사이 통신을 위한 양방향 통신 규격을 말한다. 향후 양방향 통신을 위한 기능 확대 가능성을 고려해 웹소켓을 선택했다.

토스증권에서 웹소켓 방식의 실시간 시세가 적용된 영역은 종목 상세에서 노출되는 차트, 호가창, 그밖에 대부분 종목의 현재가 등이다. 토스증권은 웹소켓 기술을 활용하기 위해 기존 폴링(Polling) 방식을 활용했는데, 폴링과 웹소켓 기술을 동시에 활용했다. 웹소켓 연결이 실패하거나 지연되는 경우, 혹은 연결이 성공하더라도 시세 제공에 지연이 발생하는 경우 등 웹소켓 시스템이 비정상적일 때 폴링애플리케이션프로그래밍인터페이스(API)가 폴백(Fallback) 시스템의 역할을 한다.

박성우 토스증권 백엔드 엔지니어는 “실시간 시세가 적용되면서 사용자들은 조금 더 빠르게 최신 시세 정보를 확인할 수 있게 됐고 시각적으로 역동성 있는 모습을 갖추게 됐다”고 말했다.

토스증권 시스템 아키텍처

실시간 시세 서비스와 연동되는 토스증권의 전체 시스템 아키텍처는 이렇다. 국내 시세 정보는 한국거래소로부터 제공받는다. 해외 시세는 금융전문업체인 연합인포맥스로부터 받고 있다. 토스증권은 현재 유닉스, C기반의 원장 시스템과 쿠버네티스, 자바(Java) 기반의 모바일트레이딩시스템(MTS) 애플리케이션 영역을 서로 다른 기술 스택으로 구성했다.

박성우 엔지니어는 “이런 구조 하에 원장에서 수신한 시세 데이터를 자바 기반 애플리케이션을 거쳐 클라이언트까지 제공하기 위해서는 C기반의 원장 시스템에서 자바 애플리케이션으로 시세를 전달하기 위한 매개체가 필요했다”며 “이를 위해 카프카(Kafka)를 활용했다”고 설명했다. 이어 “시세를 수신 받아 적재하는 과정에서 카프카를 통해 웹소켓 서버로 송신하고, 해당 웹소켓 서버에서 수신해 클라이언까지 시세를 전달하는 방식”이라고 덧붙였다.

이밖에 토스증권은 직접 겪었던 문제 해결사항을 공유했다. 먼저, 서비스 출시와 함께 많은 사용자가 몰리다보니 문제가 발생했다. 서버 간 커넥션 분산은 잘 이뤄졌으나 순간적으로 특정 서버에 다수의 커넥션이 몰리는 현상이 발생했다. 곧 해당 서버의 중앙처리장치(CPU) 사용량이 증가하고 커넥션 지연이 발생하게 됐다.

이를 해결하기 위해 토스증권은 라운드 로빈 방식과 리스트 커넥션 방식을 병행하는 로드밸런싱 방식을 구현해 적용했다. 박성우 엔지니어는 “대다수 요청에 대해서는 기본적으로 라운드 로빈 방식을 적용해 특정 서버에 연결이 순간적으로 몰리는 현상을 방지하고 서버간 균형 있는 분배를 위해 적은 비중으로만 리스트 커넥션 방식을 적용했다”고 문제해결 방식을 공유했다.

스케일 아웃의 어려움도 겪었다. 실시간 시세 서버군은 트래픽 증가로 인한 크고 작은 장애를 겪으며 여러 번의 스케일 아웃 과정을 거쳤다. 지금은 서비스 초기보다 약 5배 크기로 서비스 하고 있으며 예비 서버군을 확보해둔 상태다. 그러나 온프레미스 환경의 인프라 구성으로, 스케일 아웃에 드는 비용과 속도에 한계가 있다. 결국 토스증권은 실시간 시세 서버군을 아마존웹서비스(AWS) 클라우드 환경으로 이전하기로 했고, 현재는 개념증명(POC)을 마친 상태다.

박성우 엔지니어는 “인터넷데이터센터(IDC), 아마존웹서비스(AWS) 이중화를 거쳐 AWS 클라우드 환경으로 이전을 계획하고 있다”며 “토스증권의 실시간 시스템은 아직 완성된 시스템이 아니라, 더 낮은 지연성과 고가용성의 시스템을 완성하기 위해 각 구간의 개선작업을 진행하고 있으며, 다양한 신규 기능의 플랫폼으로서 역할을 모색하고 있다”고 밝혔다.


글. 바이라인네트워크
<홍하나 기자>0626hhn@byline.network