Back
🛡️

금융 이상거래 탐지 시스템

데모 보기

Overview

기간
2023.10 – 2023.11
팀원
개인
역할
전체 설계 및 인프라 구축
주최처 / 발주처
개인 프로젝트
활용 기술
KubernetesEKSArgoCDECRRDSAWS Load Balancer ControllerNext.jsExpressPostgreSQL
프로젝트 설명
신한투자증권 인턴십 개인과제를 디벨롭하여, 실시간 거래 이벤트를 시뮬레이션하고 이상 거래를 탐지할 수 있는 서비스를 개발했습니다. 서비스의 확장성과 장애 격리를 고려해 MSA 기반으로 아키텍처를 설계했으며, 쿠버네티스를 활용해 각 서비스를 컨테이너화하여 환경을 구축했습니다.

Architecture

Architecture diagram

Architecture Decisions

  • 1

    MSA 구조 설계

    기존 모놀리식 구조는 코드 규모가 커질수록 빌드 및 배포 시간이 증가하고, 일부 기능에 장애가 발생할 경우 전체 서비스에 영향을 줄 수 있다는 단점이 있습니다. 이러한 문제를 해결하기 위해 서비스별로 독립적인 배포와 장애 격리가 가능한 MSA를 적용했습니다. 이를 통해 이상 거래 탐지 서비스에 장애가 발생하더라도 거래 데이터 조회 및 모니터링 기능은 정상적으로 동작하도록 설계했습니다.

  • 2

    GitOps(ArgoCD) 도입

    GitHub Actions로 Docker 이미지를 빌드 및 ECR로 푸시하고, manifest의 이미지 태그를 업데이트하면 ArgoCD가 변경된 YAML을 감지해 EKS에 자동 반영하여 감사 추적과 롤백에 용이하도록 구성했습니다.

  • 3

    Private EKS + Bastion 구조

    EKS API 엔드포인트를 private endpoint only로 설정해 VPC 내부에서만 kubectl 접근이 가능하도록 했습니다. 외부에서는 Bastion EC2를 통한 SSH 터널링으로만 접근하여 클러스터 노출을 최소화했습니다.

Troubleshooting

  • 1

    Bastion에서 kubectl 실행 시 EKS API 서버 연결 실패

    Bastion Outbound 443 포트 추가 → EKS SG Inbound 443 추가 후 cli-user에게 EKS 접근 권한이 없어 IAM 사용자로 등록하여 해결했습니다.

  • 2

    ArgoCD Application이 Healthy인데 Pod가 뜨지 않음

    ArgoCD가 k8s/ 디렉토리 바로 아래 파일(namespace.yaml)만 읽고 하위 서비스 YAML을 탐색하지 않는 것이 원인이었습니다. finguard-app.yml에 directory.recurse: true 옵션을 추가해 하위 디렉토리 YAML까지 모두 적용되도록 해결했습니다.

  • 3

    서비스 배포 후 DB 접속 정보를 읽지 못하는 오류 발생

    DB 접속 정보를 환경변수로 주입하지 않아 발생한 문제였습니다. kubectl create secret으로 finguard-db Secret을 생성하고 Deployment에 envFrom으로 Secret 전체를 환경변수로 주입하여 해결했습니다.