
이 글은 알파코에서 진행되는 [신한투자증권] 프로디지털아카데미 과정 중, 김송아 강사님과 함께하는 '파이널 프로젝트'를 기반으로 작성되었습니다
팀 CTO 리드 하에 ‘MSA'기반으로 아키텍처를 설계하였다!
우리 팀의 핵심 목표는 단순히 작동하는 백엔드를 만드는 것이 아니라, 확장성과 내결함성을 동시에 확보하는 구조를 만드는 것이었다.
이를 위해 프로젝트 전반에 MSA(Microservice Architecture) 를 적용했다.
사실 파이널 프로젝트 주제가 MSA를 이용한 설계라서 MSA를 사용해야만 했다.
우리의 프로젝트인 ‘초보자 어시스트 대시보드’ 는 주식 초보자들이 투자 지표를 쉽게 이해하고, 자신의 성향에 맞는 분석과 신호를 제공받을 수 있도록 돕는 서비스다.
우리는 이 서비스를 MSA 기반으로 어떻게 안정적이고 유연하게 설계할 것인지 고민하였고, 하나의 거대한 서버보다, 여러 개의 작은 서비스가 독립적으로 동작하면서 서로 협력하는 구조가 필요했다.
WHY?????
두가지 큰 이유가 있었다.
1. 기능이 많아질수록 하나의 서버로는 관리가 어렵기 때문에!
2. 장애가 발생했을 때, 전체가 멈추지 않기 위해서!
그래서 EC2를
로 분리해 배포했다
이 구조는 앞으로의 기능 확장과 유지보수에 큰 기반이 될 것이다.

이번 아키텍처 설계의 핵심은 안정성과 분리였다.
위와 같이 구성된 인프라는 “무겁지 않지만 단단한 구조”였다.
직접 설계하며 느낀 건, “보안과 분리”는 결국 유연성을 위한 투자라는 점이었다.
MSA를 해야하는 것은 알겠다!
그런데!
서비스를 어디까지 쪼개야 할까..
처음에는 단순히 “Internal / External / Chart / Common” 네 개로 나눴지만, 단순히 물리적으로 나누는 것이 아니라 비즈니스 도메인 단위로 책임을 명확히 해야 했다.
그래서!

이렇게 나눴다.
확실히 하나의 거대한 시스템(모놀리식)을 완벽히 만드는 것보다,
작은 서비스 하나를 명확히 정의하는 것(MSA)이 훨씬 어렵다...
쨌든 이 모듈 분리가 팀 단위 병렬 개발을 가능하게 했고, 문제 발생 시에도 서비스 단위 장애 격리를 실현할 수 있었다.
CTO님께서 CI/CD 서비스별 무중단 배포 파이프라인을 구축하자고 제안하셨다. 느낌으로는 알지만 정확히는 잘 몰라서 찾아보았다.
다음과 같이 구상하였다.
자동화 파이프라인을 설계하니깐 이제는 뭔가 실전같았다..!
딸깍한번에 배포가 끝나버리니 더 조심해야겠다는 생각이 들었다.
데이터 관리는 RDS 기반의 관계형 DB와 Kafka 메시징 큐로 나누어 설계했다.
RDS는 멤버, 종목, 거래, 섹터, 뉴스 등의 관계형 데이터를 관리하며
Kafka는 서비스 간 이벤트를 연결했다.
예를 들어:
External 서비스 → “새 뉴스 등록” 이벤트 발행
Internal 서비스 → 해당 섹터를 보유한 유저에게 알림 전송
Chart 서비스 → 관련 종목 차트 데이터 업데이트
어려운거 알고는 있었는데 진짜 어렵다.
처음해봐서 그런거겠지만 진짜 어렵다.
CTO님이 주도해서 설계해주신 덕분에 겨우겨우 따라갔지만 없으셨다면 조금 힘들었을것같다.
또한 아키텍처에 정답은 없다고 생각이 들었다.
설계를 하다 보니깐 MSA가 좋은 것 같다가도 또 '이럴 거면 모놀리식으로 하는 게 낫지 않나?'라는 생각이 여러 번 반복되었다.
개발에 정답은 없다고 생각한다! 하지만 오답은 있다.
최대한 상황에 맞게 사용하되, 내가 왜 이렇게 했는지에 대한 당위성을 갖고 다른 사람에게 설명할 수 있으면 되는 것 같다.
MSA로 아키텍처를 설계할 때 몇가지 들은 생각이 있다.
MSA가 장점이 명확했다.
하지만 동시에 느낀 한계도 있다.
다음 주부터는 이 아키텍처를 실제 코드로 구현할 예정이다.
명절 잘 쉬었다.
이제 본격적으로 달려가봐야겠다.
다들 화이팅!!!