AWS 빌링 시스템(nXavis 3.0) 개발 아키텍처

이 글에서는 nXavis3.0 빌링 시스템(이하 nXavis)의 개발 아키텍처와 구현 과정을 설명합니다. 우수한 시스템을 구축하기 위해 MSA(Microservices Architecture)를 적용했으며, 프로젝트 기획부터 설계, 개발, 운영에 이르기까지의 전 과정을 다루었습니다. 또한, MSA를 도입하면서 얻은 경험과 교훈도 함께 공유합니다.

아래 그림은 nXavis 개발을 위한 프로젝트 전체적인 Flow입니다.

개발방법론 -> 설계 -> 환경 구축 -> 통합(CI) -> 배포(CD) / 데이터 처리 -> 서비스 운영
  • 개발방법론: DDD, 이벤트 스토밍
  • 설계: 프론트엔드, 백엔드(헥사고날 아키텍처)
  • 개발 환경: WSL2(Ubuntu), VSCode, Github
  • CI/CD: Github, AWS Code Series, Amazon ECR, Amazon EKS
  • 데이터 처리: Amazon RDS, AWS Step Functions, AWS Lambda, AWS Athena, Amazon QuickSight
  • 서비스 운영: MSA

0. nXavis 프로젝트 개요

  • 🫡 개발인원: 8명
    • PL / 벡엔드 / 인프라
    • PM / 프론트엔드 / 인프라 / 웹 퍼블리싱
    • 웹 디자이너 / 웹 퍼블리싱
    • DBA / 데이터 엔지니어
    • 개발자 4명
  • 🗓️ 개발 기간: 약 1년(2022년 9월 ~ 2023년 10월)
  • 🎉 오픈일: 2023년 11월 1일

1. MSA를 위한 DDD와 Event Storming

기존 빌링 서비스의 속도 저하와 관리의 어려움을 개선하기 위해, 프로젝트 계획 단계에서 MSA(Microservices Architecture)를 도입했습니다. 복잡한 MSA 구조를 효과적으로 이해하고 설계하기 위해 DDD(Domain Driven Design) 방법론을 적용하였으며, 이 과정에서 DDD의 복잡성을 풀어내기 위해 이벤트 스토밍(Event Storming) 기법을 활용했습니다.

2. 핵사고날 아키텍처

핵사고날 아키텍처는 시스템의 핵심 비즈니스 로직과 외부 환경 간의 결합을 최소화(Loosely Coupled)하기 위한 아키텍처입니다. 이러한 결합 최소화를 통해 MSA(Microservices Architecture)를 효과적으로 구현할 수 있습니다.

3. 개발 기술 스택

  • 프론트엔드 – Vue3
    • 저장소 – Pinina
    • UI, Icon, CSS – Element, Tailwind CSS
    • 통신 라이브러리 – Axios
    • 차트 & 표 – ApexCharts, AG grid
    • 서버 – NGINX
  • 벡엔드 – SpringBoot
    • Spring Security
    • Spring Data
  • DB – MariaDB(개발 단계) -> AWS Aurora MySQL

4. 개발 환경 구성

개발 환경은 아래 사진과 같이 WSL(Windows Subsystem for Linux)에 구성하였습니다.

WSL 환경에 VSCode와 다양한 개발 도구를 설치하여 Vue.js, 스프링 부트, Jib, Gradle 등을 다룰 수 있도록 설정했습니다. 이를 위해 VSCode 확장 프로그램을 추가하고, WSL에는 OpenJDK 17과 Node.js 16.18을 설치했습니다. 소스 코드는 Git을 통해 관리하며, Docker와 Minikube를 사용해 서버 배포 전 테스트를 수행했습니다.

WSL 외부에서는 VSCode로 WSL에 접속하여 개발 환경을 활용했습니다. 데이터베이스는 초기 테스트 단계에서 Windows의 MariaDB를 사용하다가, 안정화 이후 Amazon RDS로 직접 연결하여 사용했습니다.

소스 코드 통합과 프로젝트 관리는 GitHub를 통해 이루어졌습니다.

WSL 환경 구축에 대한 자세한 내용은 이 링크를 참고해 주세요.

5. CI & 프로젝트 관리

형상 관리(CI, Continuous Integration)와 프로젝트 관리에 대해 다룹니다.

형상 관리

아래와 같이 문장을 다듬어 보았습니다:


형상 관리는 GitHub를 활용하여 진행했습니다. 무료 Organization 계정을 생성한 후, 서비스별로 개별 레포지토리를 만들어 소스를 관리하고 있습니다. 현재 4개의 백엔드 서버, 1개의 프론트엔드 서버, 그리고 1개의 인그레스 관리 시스템으로 구성되어 있습니다.

프로젝트 관리

아래와 같이 문장을 다듬어 보았습니다:


프로젝트 관리는 초기에는 GitHub로 진행하려 했으나, 일정이 지연됨에 따라 빠른 개발을 위해 기존에 사용하던 MS Office로 전환하여 관리했습니다. 추후 작업을 통해 Jira와 GitHub를 연동하여 프로젝트 관리를 개선할 계획입니다. 현재는 Jira를 통해 고객 문의와 이슈를 처리하고 있습니다.

6. CD

배포(CD, Continuous Delivery) 입니다.

배포 프로세스

  1. Release 브랜치가 업데이트되면 자동으로 배포가 실행됩니다.
  2. GitHub의 release 브랜치에 AWS CodePipeline에서 웹훅을 설정하여 배포 프로세스가 자동으로 시작되도록 구성했습니다.
  3. CodePipeline은 소스 코드를 S3에 자동으로 저장합니다.
  4. 이후 CodePipeline에서 CodeBuild를 실행합니다.
  5. CodeBuild는 S3에 저장된 소스 코드를 빌드합니다.
  6. 빌드된 컨테이너 이미지는 Amazon ECR에 저장됩니다.
  7. CodeBuild에서 빌드가 완료되면, EKS에 컨테이너를 배포할 준비가 완료됩니다.
  8. EKS는 ECR에 저장된 컨테이너를 여러 개의 Fargate 인스턴스에 배포합니다.

이를 통해 무중단 배포가 가능합니다.

7. 데이터 처리 / 분석

nXavis에서 빌링 데이터를 처리하고 분석하는 방법입니다.

nXavis의 데이터 처리 / 분석

  1. AWS는 Cost & Usage Report에서 빌링 원본 데이터를 생성합니다.
  2. 빌링 원본 데이터는 Parquet 형식으로 S3에 자동으로 저장됩니다. Parquet 형식은 읽기 전용 데이터 처리에 유용합니다.
  3. S3에 데이터가 저장되면, EventBridge가 작동하여 배치 시스템이 실행됩니다. 이 배치 시스템은 AWS Step Functions로 구성되어 있으며, EventBridge는 Role 기반으로 동작합니다.
  4. 배치 시스템 내에서 AWS Athena와 AWS Lambda를 활용하여 NDS만의 노하우로 데이터를 처리합니다. 이 과정은 병렬 처리로 구성되어 있어 5분 내에 데이터 처리가 완료되며, 기존 시스템보다 빠르게 동작합니다.
  5. 처리된 빌링 데이터는 그 성격에 따라 Amazon RDS Aurora MySQL과 Amazon Redshift에 저장됩니다. 저장된 데이터는 nXavis 사이트에서 시각화하여 제공합니다.
  6. 특정 데이터는 고객 요구에 맞게 시각화하여 제공됩니다. Athena를 통해 데이터를 읽어와 QuickSight로 최적화된 빠르고 정확한 시각화를 제공합니다.

8. 운영 환경

nXavis 운영 환경입니다.

  1. www.nxavis.com 으로 접속하면 AWS Route 53을 통해 AWS 시스템에 연결됩니다.
  2. ALB Ingress가 라우팅 및 트래픽 제어를 담당하며 프론트엔드에 접속합니다.
  3. MSA로 분리된 EKS 클러스터 중 하나인 프론트엔드 서비스가 호출되어 백엔드와 통신합니다.
  4. 백엔드 서비스는 RDS와 통신하여 필요한 데이터를 불러옵니다.
  5. 프론트엔드에서 특정 데이터를 보고 싶을 경우, QuickSight를 통해 미리 지정된 시각화 데이터를 볼 수 있습니다.

9. 마무리

nXavis3.0 빌링 시스템의 개발 과정과 아키텍처에 대해 소개했습니다. MSA와 이벤트 스토밍을 적용한 DDD, 현대적인 개발 기술 스택, CI/CD, 데이터 처리, 그리고 운영 환경까지 다양한 측면을 다루었습니다. 이 과정에서 얻은 소중한 경험과 극복한 어려움은 저희 팀의 성장에 큰 도움이 되었으며, 이번 글을 정리하면서 많은 배움을 얻었습니다.

앞으로도 빌링 시스템 개발과 관련된 유익한 내용을 계속해서 공유하겠습니다.

긴 글을 읽어주셔서 감사합니다.


클라우드기술팀 빌링파트 김완상