2계층에서 3계층 아키텍처로 전환하기: 모듈러 모놀리쓰와 GraphQL 마이그레이션 여정
# 서론 – 왜 아키텍처를 바꿔야 할까?
많은 스타트업과 중소기업이 2계층 아키텍처(클라이언트‑서버)로 서비스를 시작합니다. 초기 개발 속도가 빠르고 구현이 간단해 보이지만, 프로젝트가 성장하면서 데이터 처리량, 보안 요구사항, 팀 규모가 확대됩니다. 이때 기존 구조는 성능 병목, 코드 복잡도 증가, 배포 위험 등 여러 문제를 일으키게 됩니다.
이러한 한계를 극복하기 위해 3계층 아키텍처(프레젠테이션‑비즈니스‑데이터)로 전환하는 것이 일반적인 해결책입니다. 하지만 갑작스러운 전환은 서비스 중단 위험을 동반하므로, 모듈러 모놀리쓰와 GraphQL을 활용한 단계적 마이그레이션 전략이 필요합니다.
# 1️⃣ 2계층 아키텍처의 구조와 한계
| 요소 | 설명 | 문제점 |
|------|------|--------|
| 클라이언트 | 웹·모바일 UI가 직접 비즈니스 로직과 DB에 접근 | 로직 중복, 보안 취약 |
| 서버 | 하나의 애플리케이션이 모든 기능을 담당 | 코드베이스 비대해짐, 테스트 어려움 |
| 데이터베이스 | 단일 DB에 모든 테이블이 존재 | 스키마 변경 시 전체 서비스 영향 |
성능 병목: 모든 요청이 하나의 서버를 통과해 DB를 직접 호출하므로 트래픽이 급증하면 응답 시간이 급격히 늘어납니다.
팀 협업 어려움: 프론트엔드와 백엔드가 같은 코드베이스를 공유하면, 작은 변경에도 전체 빌드·배포가 필요합니다.
# 2️⃣ 3계층 아키텍처로의 첫 발 – 모듈러 모놀리쓰 도입
# 2-1. 모듈러 모놀리쓰란?
단일 배포 단위이지만, 내부를 독립적인 모듈(도메인)로 나누어 관리합니다.
각 모듈은 자체 DB 스키마와 비즈니스 로직을 갖고, 인터페이스(예: 서비스 레이어)만 공개합니다.
# 2-2. 마이그레이션 단계
도메인 식별: 기존 코드에서 사용자 관리, 주문 처리, 결제 등 기능별로 경계를 정의합니다.
패키지 구조 재조정:
src/users,src/orders등 폴더 단위로 모듈을 분리합니다.내부 API 정의: 모듈 간 호출은 인터페이스(예:
UserService)를 통해 수행해 의존성을 최소화합니다.
# 2-3. 기대 효과
코드 가독성 향상: 모듈당 파일 수가 감소해 유지보수가 쉬워집니다.
점진적 배포: 하나의 모듈만 수정해도 전체 서비스 재배포 없이 독립적으로 롤아웃 가능.
# 3️⃣ GraphQL로 프레젠테이션‑비즈니스 층 분리
# 3-1. 왜 GraphQL인가?
클라이언트가 필요한 데이터만 요청 → 오버페치/언더페치 문제 해결.
단일 엔드포인트 → API 관리가 간편해지고, 버전 관리가 필요 없어집니다.
# 3-2. GraphQL 도입 절차
| 단계 | 내용 |
|------|------|
| 스키마 설계 | 도메인 별 타입(User, Order)과 쿼리/뮤테이션 정의 |
| 리졸버 구현 | 각 타입에 대한 데이터 로직을 모듈러 서비스(UserService)와 연결 |
| 게이트웨이 구축 | Apollo Server 등으로 GraphQL 엔드포인트 제공, 인증·권한 부여 미들웨어 적용 |
| 프론트엔드 연동 | Apollo Client 등으로 기존 REST 호출을 GraphQL로 교체 |
# 3-3. 마이그레이션 팁
점진적 전환: 기존 REST API와 병행 운영하면서, 새로운 기능부터 GraphQL로 개발합니다.
데이터 로더(DataLoader) 활용: N+1 문제를 방지해 성능을 최적화합니다.
# 4️⃣ 실제 마이그레이션 사례 – 단계별 체크리스트
현황 분석
- 현재 2계층 API 엔드포인트와 DB 스키마 문서화
모듈 정의
- 핵심 도메인 3~5개 선정, 각각 별도 패키지로 분리
GraphQL 스키마 초안 작성
- 주요 쿼리·뮤테이션을 정의하고, 리졸버와 연결
CI/CD 파이프라인 업데이트
- 모듈 단위 테스트와 GraphQL 스키마 검증을 자동화
점진적 배포 & 모니터링
- Canary 배포로 새로운 모듈과 GraphQL 엔드포인트를 검증
레거시 정리
- 사용되지 않는 REST 엔드포인트와 DB 테이블을 차례로 제거
# 결론 – 오늘부터 시작하는 3계층 전환
2계층에서 3계층 아키텍처로의 이동은 성능 향상, 보안 강화, 팀 협업 효율을 동시에 가져옵니다. 핵심은 모듈러 모놀리쓰로 코드를 정리하고, GraphQL을 통해 프레젠테이션 층을 깔끔히 분리하는 단계적 접근입니다.
지금 바로
프로젝트 루트에서 도메인 별 폴더 구조를 검토하고, 최소 1개의 모듈을 분리해 보세요.
간단한 GraphQL 쿼리를 작성해 기존 REST API와 비교해 성능을 체감해 보세요.
작은 시도라도 꾸준히 이어가면, 곧 안정적인 3계층 서비스를 운영할 수 있습니다. 여러분의 마이그레이션 성공을 응원합니다! 🚀
SEO 키워드: 2계층 아키텍처, 3계층 아키텍처, GraphQL 마이그레이션
Comments
Join the discussionNo comments yet. Be the first to comment.