숨고 백엔드 아키텍처의 진화와 테라포밍 프로젝트

숨고 백엔드 아키텍처의 진화와 테라포밍 프로젝트

Tech

들어가며 : 숨고의 아키텍처, 왜 변화가 필요했나

숨고의 백엔드는 초기 PHP 기반의 모놀리식 구조로 출발했습니다. 하나의 코드베이스, 하나의 데이터베이스에 모든 기능이 얽혀 있었고, 이는 시간이 갈수록 다음과 같은 문제로 이어졌습니다.

  • 서비스 확장 시 전체 배포가 필요
  • 단일 장애로 전체 서비스 영향
  • 유지보수 및 신규 개발 복잡도 증가

이러한 구조적 한계를 극복하기 위해, 숨고는 Python 기반의 Django 프레임워크를 도입하며 새로운 모놀리식 시스템인 Soomgo-web을 개발하게 되었습니다.

대체 이미지

본론 : MSA로의 시작 그리고 테라포밍 프로젝트

Soomgo-web의 한계, 그리고 MSA의 시작

Soomgo-web은 Django의 강력한 ORM과 Admin 기능을 기반으로 생산성과 안정성을 확보했지만, 여전히 모놀리식 구조의 문제를 안고 있었습니다.

이에 따라 숨고는 Flask 기반의 경량 서비스들을 점진적으로 도입하면서 아래 포인트들을 고려하여 마이크로서비스 아키텍처(MSA) 로의 전환을 시작했습니다.

  • 각 도메인을 독립 서비스로 분리
  • 빠르게 반복 개발이 가능한 구조로 전환
  • 프론트와 백엔드 간 분리 구조 강화

그러나 시간이 지나면서 수십 개의 Flask 서비스가 생겨났고, 서비스 간의 의존도, 관리 난이도, 운영 복잡도가 새로운 문제로 떠오르기 시작했습니다.

Step 1 : 테라포밍 프로젝트: 구조를 다시 설계하다

이러한 문제를 해결하고, 기술 부채를 정리하며 미래 확장성을 확보하기 위해 숨고는 ‘테라포밍 프로젝트’를 시작했습니다. 이번 프로젝트의 핵심 목표였던 진정한 의미의 도메인 기반 MSA 구현과 시스템 성능/운영 효율화를 위해 아래와 같은 작업을 수행하였습니다.

Soomgo-web 완전 제거

Django 기반의 Soomgo-web은 MSA가 도입된 이후에도 전체 API의 약 절반을 담당하며 핵심 서비스로 계속 남아 있었습니다. 테라포밍 프로젝트를 통해 다음과 같은 결과를 얻을 수 있었습니다.

  • 남아 있던 API 전체를 도메인 서비스로 완전 이관
  • Soomgo-web 완전 폐기 → 단일 모놀리식 구조 완전 제거

이는 숨고 백엔드 구조의 결정적인 전환점이 되었으며, 도메인 중심으로 구조를 재편할 수 있었습니다.

도메인 중심 구조 재편

  • 서비스 단위에서 → 도메인 단위 구조로 재설계
  • 각 도메인이 독립적으로 API, 인프라를 소유
  • 높은 응집도, 낮은 결합도의 설계 원칙 준수

인프라 구조 개선

항목기존 구조 (Soomgo-web 기반)MSA 초기 구조 (Flask 서비스 확산기)테라포밍 이후 구조
Ingress 경로Ingress → Nginx → Service → WSGI → WASIngress → Nginx → Service → WSGI → WASIngress → Kong → WSGI → WAS
EKS 구성공용 워커 노드 그룹공용 워커 노드 그룹 (서비스 증가로 인한 리소스 충돌 빈발)도메인별 워커 노드 그룹 분리 (리소스 격리)
통신 구조Python Gateway → Internal Service (REST)Python Gateway → 다수의 Flask 서비스도메인 서비스 간 직접 호출 (GRPC + REST 혼용)
Gateway존재하지 않음 (Soomgo-web이 직접 응답)Python 기반 API Gateway 운영Kong API Gateway 도입 (고성능 라우팅)
인증 처리Django 내부 인증 처리Python Gateway 내부 인증 처리Kong 플러그인 기반 인증 처리
내부 서비스 호출Soomgo-web 내부 호출Gateway가 호출 조립 (복잡한 라우팅)도메인 서비스 간 직접 호출 (비즈니스 로직 분산)

Step 2 : Gateway 구조 개편: Python Gateway 제거와 성능 혁신

기존에는 Python으로 개발된 api-gateway 서버가 클라이언트 요청을 받아 내부 서버들을 호출하고 응답을 조립하는 구조였습니다. 하지만 이 구조는 다음과 같은 병목을 초래했습니다:

  • IO 및 응답 병합 비용으로 인한 응답 지연
  • 싱글스레드 처리로 인해 동시성 부족
  • 구조 복잡도 증가와 운영 부담

이를 해결하기 위해 Kong API Gateway로 전환하고 구조를 간결화하였습니다.

개편 구조

항목개편 전개편 후
GatewayPython 기반 서버Kong (고성능 Gateway)
인증 처리Python 코드 내부 처리Kong 서버에서 처리
내부 호출Gateway가 직접 호출 및 조합도메인 서비스가 직접 필요 서비스 호출

성능 향상 요인

  • 중간 계층 제거 : 불필요한 병목 제거
  • 네트워크 홉 감소 : 응답 속도 개선
  • Kong의 고성능 처리 : 인증/라우팅 처리 시간 최소화
  • 서비스 간 직접 호출 구조 : 데이터 흐름 단순화 및 확장 용이

결과적으로, 구조 개편 후 실제 응답 속도가 체감될 정도로 개선되었습니다.

내부 통신 효율화: GRPC 기반 구조 도입

기존 RESTful 통신 구조는 오버헤드가 크고, 서비스 간 계약이 명확하지 않은 문제가 있었습니다. 이에 따라 숨고는 서비스 간 통신을 GRPC 기반으로 전환하였습니다.

  • Binary 프로토콜을 통한 빠른 전송
  • proto 기반 인터페이스 명세로 계약 명확화
  • 높은 처리량, 낮은 latency 확보

특히 다단 호출 구조에서도 안정적인 성능이 유지되어, 서비스 확장성과 응답 품질이 모두 개선되었습니다.

대체 이미지

성능 개선 효과: Under 1 Second for Over 1000 Cases

구조적 개편과 gRPC 도입은 단순히 설계 상의 변화가 아니라, 실제 서비스 응답 속도를 눈에 띄게 줄이는 성과로 이어졌습니다. 아래는 대표 API들의 AS-IS → TO-BE 비교 데이터입니다.

API 명AS-IS (최대 응답 속도)TO-BE (최대 응답 속도)개선율
get_campaign_list37,107ms567ms98.5% ↓
get_products54,480ms550ms99.0% ↓
get_request_intro_data9,015ms465ms94.8% ↓
get_received_request5,241ms125ms97.6% ↓
get_auto_charge_product_info5,204ms101ms98.1% ↓
has_quotes_sent8,042ms592ms92.6% ↓
chatMessage1,154ms345ms70.0% ↓
get_banner_list5,047ms223ms95.6% ↓

요약하였을 때 다음과 같은 효과를 볼 수 있었습니다.

  • 90% 이상 응답 속도 단축: 대부분의 핵심 API에서 달성
  • 99% 개선 사례: get_products, get_campaign_list

이제 과거 최대 50초 이상 지연되던 요청도 1초 이내 응답이 가능해졌고, 이는 사용자 경험과 운영 효율성 모두에 큰 도약이 되었습니다.

기술 스택 요약

영역기술
주요 언어Python
프레임워크Falcon(Soomgo-py), FastAPI
내부 통신RestAPI, GRPC
API GatewayKong Gateway
클라우드AWS EKS, RDS, S3, CloudWatch
배포 도구ArgoCD
모니터링Prometheus, Grafana, Newrelic

테라포밍의 성과와 이후 방향성

우리는 다음을 이루었습니다

이 프로젝트는 숨고의 백엔드 아키텍처는 단순한 기술 전환이 아니라, 운영 효율성과 개발 생산성을 동시에 확보한 구조적 혁신이었습니다. 그리고 이 변화는 서비스 안정성, 개발 유연성, 확장 가능성을 갖춘 새로운 기반이 되었습니다.

  • 모놀리식 시스템 완전 제거
  • 도메인 중심 아키텍처 정착
  • 성능 병목 제거 및 응답 속도 개선
  • 독립 배포와 장애 격리 가능 구조 확립
  • 리소스 및 클라우드 비용 최적화

앞으로 우리는 다음과 같은 방향으로 기술적 도약을 이어갑니다

  • 이벤트 기반 구조 도입 검토 (예: Kafka)
  • 독립적인 DB 분리를 위한 아키텍처 설계
  • 도메인 간 의존 최소화를 위한 메시지 브로커 실험
  • Observability 체계 강화 (분산 트레이싱, SLA 추적)
  • 성능 지표 기반 아키텍처 개선 지속

마무리하며

숨고는 이제 더 이상 기술적 부채를 짊어진 구조가 아닙니다. 진정한 도메인 기반 MSA 위에서, 새로운 서비스와 기술을 빠르게 실험하고 확장할 수 있는 기반을 갖추었습니다.

이번 테라포밍 프로젝트는 단지 시스템을 분리하고 개선하는 데 그치지 않고, 숨고의 미래 기술 전략을 재정의하는 출발점이었습니다. 그리고 이 모든 변화는 Backend, DevOps 팀원들의 깊은 고민과 헌신, 협업의 결과로 이루어진 것이며, 이에 깊은 감사를 전합니다.

앞으로도 우리는 사용자에게 더 안정적인 서비스를, 개발자에게는 더 유연하고 효율적인 개발 환경을 제공할 수 있도록, 더 나은 구조를 함께 만들어갈 것입니다. 테라포밍은 끝이 아니라, 숨고 아키텍처의 다음 진화를 위한 시작입니다.

  • #archtecture
  • #backend
  • #django
  • #grpc
  • #msa
  • #python
  • #terraforming
Colin Mun
Colin MunBackend Engineer

모두의 더 나은 삶을 위해
함께 변화를 만들어갈 동료를 기다립니다

채용중인 공고 보기