[빌링] nXavis 3.0 빌링 시스템 개발 아키텍처

nXavis3.0 빌링 시스템(이하 nXavis)에 대한 개발 아키텍처와 설명입니다. 좋은 시스템으로 개발하기 위해 MSA를 적용하였고 프로젝트 기획부터 설계 개발과 운영까지 설명하고 적용하면서 느낀점을 작성했습니다. 이를 통해 nXavis의 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월 01일

1. MSA를 위한 DDD와 Event Storming

기존 빌링 서비스의 느리고 관리가 불편한 시스템을 개선하고자 프로젝트 계획 단계에서 MSA(Micro Service Architecture)로 구성했습니다. 복잡한 MSA를 이해를 돕기 위해 설계 방법론인 DDD(Domain Driven Design)로 디자인을 하였고 복잡한 DDD의 이해를 돕기 위해 이벤트 스토밍(Event Storming)을 하였습니다.

2. 핵사고날 아키텍처

핵사고날 아키텍처란 시스템의 핵심 비즈니스 로직과 외부 세계 간의 결합을 최소화(Loosely Coupled) 하기 위한 아키텍처입니다. 결합을 최소화 함으로써 MSA를 달성할 수 있습니다.

3. 개발 기술 스택

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을 접속해서 사용하는 방식입니다. DB는 Windows에 Maria로 테스트를 하다가 안정화 후 Amazon RDS로 직접 연결하였습니다.

소스코드 통합 및 프로젝트 관리는 Github로 하였습니다.

WSL의 환경 구축은 아래 링크를 참고해 주세요.

5. CI & 프로젝트 관리

형상 관리(CI, Continuous Integration)와 프로젝트 관리 입니다.

형상 관리

형상 관리는 Github를 사용하였습니다. 무료 Oranization를 만들어서 서비스별로 레파지토리를 만들어 소스 관리를 하고 있습니다. 4개의 백엔드 서버, 1개의 프론트엔드 서버, 1개의 인그레스 관리 시스템으로 구성되어 있습니다.

프로젝트 관리

프로젝트는 관리는 초창기에 Github로 진행하려 했으나 진행이 늦어져 빠른 개발을 위해 기존에 사용했던 MS Office에서 관리하였습니다. 추후 작업을 통해 Jira와 Github 연동하여 프로젝트 관리를 하려고 합니다. 현재에는 Jira를 통해서 고객 문의와 이슈를 받고 있습니다.

6. CD

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

배포 프로세스

  1. release 브랜치가 업데이트 된 경우 배포가 실행됩니다.
  2. 깃허브의 release 브랜치에 AWS CodePipeline에서 훅을 걸어두어 배포 프로세스가 자동으로 실행됩니다.
  3. CodePipeline을 사용하여 S3에 소스코드를 자동으로 저장합니다.
  4. CodePipeline에서 CodeBuild를 실행합니다.
  5. CodeBuild에서 이전에 저장한 S3의 소스코드를 빌드합니다.
  6. 빌드된 컨테이너는 Amazon ECR에 저장됩니다.
  7. CodeBuild에서 apply가 적용되면 EKS에 컨테이너가 올라갈 준비가 됩니다.
  8. EKS에 ECR에 있는 컨테이너가 여러개의 Fargate로 올라갑니다. EKS를 사용해 무중단 배포가 가능합니다.

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 Route53를 통해 AWS 시스템에 연결됩니다.
  2. ALB Ingress가 라우팅 및 트래픽 제어를 하며 프론트엔드에 접속됩니다.
  3. MSA로 분리된 EKS Cluster들 중 하나인 프론트엔드 서비스가 호출되며 백엔드와 통신합니다.
  4. 백엔드의 서비스가 RDS와 통신하여 데이터를 불러옵니다.
  5. 프론트엔드에서 특정 데이터를 보고 싶은 경우 QuickSight를 통해 미리 지정된 시각화 데이터를 볼 수 있습니다.

9. 마무리

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

또 다른 빌링 개발 관련 내용으로 다시 찾아뵙겠습니다.

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

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

By |2024-01-23T18:09:00+09:002024-01-22|Categories: TechBlog|

About the Author: