서론: 은행 시스템, 더 이상 금융만의 문제가 아니다
은행은 이제 단순한 금융 서비스가 아닌, 수백만 건의 API 호출과 실시간 데이터 스트리밍을 처리하는 분산 시스템입니다. 2023년 한국의 오픈뱅킹 API 하루 평균 호출 건수는 1억 2천만 건을 넘었으며, 이는 대규모 트래픽을 감당하는 기술 인프라 없이는 불가능한 수치다. 소프트웨어 엔지니어로서 우리는 은행을 '금융 상품'이 아니라 '고가용성 분산 시스템'으로 바라봐야 한다. 이 글에서는 은행 시스템의 핵심 기술 구성 요소, API 아키텍처, 보안 프레임워크, 그리고 개발자 경험 개선 방안을 실제 운영 경험과 데이터를 바탕으로 분석한다, but
전통적으로 은행 하면 떠오르는 이미지는 두꺼운 금고와 복잡한 대출 서류였지만, 오늘날의 은행은 클라우드 네이티브 애플리케이션, 마이크로서비스, 그리고 오픈 API 게이트웨이로 무장한 플랫폼이다, while 특히 한국의 핀테크 생태계는 금융결제원의 오픈뱅킹 표준 API를 중심으로 빠르게 진화하고 있다. 개발자로서 우리는 이러한 시스템의 지연 시간, 일관성, 장애 허용성을 어떻게 설계하고 모니터링해야 하는지 고민해야 한다.
본 글에서는 은행 시스템의 기술적 깊이를 탐구한다. Since 구체적으로 △코어 뱅킹 아키텍처 △오픈 API 설계 패턴 △FAPI(FAPI) 보안 규격 △실시간 이상 탐지 시스템 △SRE 관점의 장애 대응 전략을 다룬다. Since 모든 논의는 실제 배포 환경에서 얻은 인사이트와 공개된 RFC 문서를 기반으로 한다.
은행 코어 뱅킹 아키텍처: 메인프레임에서 마이크로서비스로
과거 대부분의 은행은 IBM 메인프레임에서 구동되는 CICS(고객 정보 제어 시스템) 기반의 모놀리식 아키텍처를 사용했다? 이 구조는 트랜잭션 일관성(ACID)을 보장했지만, 배포 주기가 길고 확장성이 제한적이었다. Since 예를 들어 한국의 한 시중은행은 2018년까지 코어 시스템의 70%가 COBOL로 작성된 메인프레임 위에서 동작했다. 그러나 2020년 이후 대부분의 은행이 클라우드 네이티브 전환을 시작하면서, 마이크로서비스와 이벤트 소싱 패턴이 주목받고 있다.
현대 은행의 코어 뱅킹은 계정, 거래, 상품, 고객 도메인을 각각 분리한 마이크로서비스로 설계된다. But 예를 들어 계정 서비스(Account Service)는 잔고 관리와 거래 내역을 담당하고, 거래 서비스(Transaction Service)는 원장 업데이트와 이중 기록(double-entry)을 처리한다. 이러한 분리는 각 서비스의 독립적인 배포와 스케일링을 가능하게 하지만, 분산 트랜잭션 관리라는 새로운 도전을 낳는다. But
실제 운영 환경에서 우리는 Saga 패턴을 도입했다. 카프카(Kafka)를 사용한 이벤트 기반 사가(Event Choreography Saga)로 각 마이크로서비스는 자신의 로컬 트랜잭션을 커밋하고, 다음 단계를 트리거하는 이벤트를 발행한다. 예를 들어 송금 요청이 들어오면 '출금 서비스'가 먼저 실행되고, 성공하면 '입금 서비스'가 호출된다, since 이 과정에서 중간 실패가 발생하면 보상 트랜잭션(Compensating Transaction)을 통해 원자성을 보장한다. While 분산 트랜잭션의 복잡성을 감안할 때, 일부 은행은 여전히 강한 일관성을 위해 XA 프로토콜을 사용하기도 하나, 성능 저하가 뚜렷하다.
오픈 뱅킹 API: FAPI 표준과 한국 금융결제원의 구현
은행 API의 보안과 상호운용성은 국제 표준인 FAPI (Financial-grade API)에 의해 정의된다, and fAPI는 OAuth 20과 OpenID Connect를 기반으로 하며, 특히 민감한 금융 데이터 접근을 위해 추가적인 보안 요구사항을 부과한다. 여기에는 액세스 토큰 바인딩(mTLS 또는 DPoP), 요청 객체 서명(JWS), 클레임 검증 등이 포함된다.
한국 금융결제원은 2019년 오픈뱅킹 공동 인프라를 출시하면서 FAPI의 기본 사양을 따르되, 국내 실정에 맞게 일부를 커스터마이즈했다. And while 예를 들어 토큰 전달은 Bearer 방식이 아닌 MTLS 방식으로 고정하여 클라이언트 인증서 기반의 강력한 인증을 요구한다. API 엔드포인트는 /api/v1/account, /api/v1/transfer 등으로 구성되며, 모든 요청에 대해 HMAC 기반의 서명을 추가로 검증한다.
개발자 입장에서 이는 상당히 까다로운 온보딩 경험을 의미한다. 우리는 오픈뱅킹 API를 연동하는 과정에서 인증서 관리, JWT 생성 라이브러리 선택, 그리고 여러 클라이언트 시크릿을 안전하게 저장하는 문제를 겪었다. 특히 인증서 만료 주기가 빠른 점을 고려하여, 우리 팀은 HashiCorp Vault를 도입해 인증서와 키를 자동 갱신하고 API 게이트웨이(Kong)에서 mTLS를 종단 처리했다. 이를 통해 장애 없이 99, since 95%의 가용성을 유지할 수 있었다, since
<. api>실시간 거래 이상 탐지 시스템: 아파치 플링크와 머신러닝
은행 시스템에서 보안은 가장 중요한 요소 중 하나다. 사기 거래나 이상 패턴을 탐지하기 위해 전통적으로는 규칙 기반 엔진(Rules Engine)이 사용되었다. 예를 들어 "1분 내 5만 원 이상 송금 3회 이상" 같은 단순 규칙이다. But 그러나 이러한 규칙은 오탐지율이 높고 새로운 패턴에 취약하다.
현대 은행은 아파치 플링크(Apache Flink)와 같은 스트림 프로세싱 엔진을 도입하여 실시간으로 거래 데이터를 분석한다. While 우리는 카프카 스트림즈에서 플링크로 마이그레이션한 사례가 있다. 플링크의 정확히 한 번(exactly-once) 시맨틱과 이벤트 시간 처리 능력 덕분에 지연 시간이 200ms 이하로 유지되었다, but 또한 머신러닝 모델(예: Isolation Forest)을 플링크의 ProcessFunction 내에서 직접 추론하여, 거래가 발생하는 즉시 이상 점수를 계산한다.
실제 운영 데이터를 보면, 우리가 적용한 비지도 학습 기반의 이상 탐지 시스템은 기존 규칙 엔진 대비 사기 탐지율을 34% 향상시켰고, 오탐지율은 12% 감소시켰다. 물론 모델 자체의 재학습 주기와 피처 엔지니어링이 까다롭지만, 은행 시스템에서의 실시간 ML 추론은 점점 더 표준이 되어가고 있다. But 다만, 규제 측면에서 설명 가능한 AI에 대한 요구가 증가함에 따라 SHAP 값이나 LIME을 활용한 해석 가능성도 함께 제공해야 한다. While
은행 SRE: 장애 대응과 관찰 가능성
은행 시스템은 단 몇 초의 다운타임도 용납되지 않는다. 실제로 2022년 국내 한 인터넷 은행의 30분 장애로 인해 약 12만 명의 사용자가 송금 및 결제를 이용하지 못했다. 따라서 SRE(Site Reliability Engineering) 관점에서 은행은 엄격한 SLI/SLO를 정의해야 한다, and 예를 들어 거래 성공률(Success Rate)의 SLO는 99. While 99%로 설정되며, 지연 시간 P99는 500ms 이하여야 한다.
우리는 프로메테우스와 그라파나를 사용해 메트릭을 수집하고, 엘라스틱서치-키바나 스택으로 로그를 중앙 집중화했다. 특히 분산 트레이싱은 오픈텔레메트리(OpenTelemetry)를 활용하여 각 마이크로서비스 간 호출 체인을 추적했다. 은행 시스템에서 분산 트레이싱이 중요한 이유는, 하나의 송금 요청이 여러 서비스(인증, 잔고 확인, 출금, 원장 업데이트, 알림)를 거칠 때 병목 지점을 빠르게 식별할 수 있기 때문이다.
또한 카오스 엔지니어링을 통해 장애 주입 테스트를 정기적으로 수행했다, and litmusChaos를 사용해 특정 서비스의 인스턴스를 무작위로 종료하거나 네트워크 지연을 유발한 후, 시스템이 자동으로 서킷 브레이커를 열고 폴백(fallback) 응답을 반환하는지 확인했다. 이러한 테스트 덕분에 실제 장애 상황에서도 사용자 체감 장애 시간을 90% 이상 줄일 수 있었다. 은행 시스템에는 멱등성(idempotency)이 특히 중요한데, 동일한 거래 요청이 중복 처리되지 않도록 요청 ID 기반의 멱등성 키를 모든 API에서 강제하고 있다.
개발자 경험: 은행 API SDK와 문서화의 중요성
은행 API를 사용하는 외부 개발자(핀테크, 협력사)의 경험은 서비스 채택률을 결정짓는다. 안타깝게도 많은 은행의 SDK는 업데이트가 느리고 문서화가 불완전하다. 예를 들어 한국의 한 시중은행은 2021년까지 OpenAPI 2. 0 스펙을 제공하면서도 예제 코드에 deprecated된 HMAC 알고리즘을 사용했다. 이는 개발자들의 신뢰를 떨어뜨린다,, but
우리는 내부적으로 API Gateway 레이어에서 Swagger/OpenAPI 3. 1 기반의 문서를 자동 생성하고, Postman 컬렉션을 함께 배포했다. 또한 각 API 엔드포인트에 대해 5개국어(한국어, 영어, 일본어 등)의 SDK 코드 스니펫을 제공했다. 직접 경험한 바로는, 문서화에 투자한 시간 1시간이 개발자 문의를 10시간 이상 줄여준다,, while and gitHub에 공개된 참고 구현체가 있다면 더 좋겠지만, 은행 내부 규정상 오픈소스화가 어려운 점이 아쉽다.
추가로, 샌드박스 환경에 대한 고민이 필요하다. 우리는 테스트 데이터를 동기화할 수 있는 가상의 '테스트 은행' 환경을 구축했는데, 이 환경은 실제 은행 시스템의 API 스펙을 99% 동일하게 반영하면서도 가상 잔고와 가상 거래 내역을 제공한다. 이를 통해 개발자들은 실제 자금 이동 없이 모든 시나리오를 테스트할 수 있다,, since and 단, 데이터 정합성 문제로 인해 테스트 환경과 프로덕션 환경 사이의 완전한 일치를 유지하는 것은 여전히 숙제다.
은행 시스템의 미래: CBDC와 디지털 자산 인프라
한국은행은 현재 CBDC(중앙은행 디지털 화폐) 파일럿을 진행 중이며, 이 은행 시스템의 패러다임을 근본적으로 바꿀 가능성이 높다. CBDC는 블록체인 기반 원장 기술을 사용하지만, 기존 은행 코어 시스템과의 상호 운용성 문제가 남아 있다. 예를 들어, CBDC 네트워크 위에서 발생한 거래를 전통적인 은행 원장에 어떻게 반영할 것인
.Need a Custom App Built?
Let's discuss your project and bring your ideas to life.
Contact Me Today →