백엔드 아키텍처 패턴 개요 (Part 2)
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
아키텍처 패턴
대상자
- 소프트웨어 개발자 및 시스템 아키텍트
- 초기 단계부터 대규모 시스템 설계에 관심 있는 개발자
- 스케일링, 유연성, 유지보수성을 고려하는 기술 결정을 내려야 하는 실무자
핵심 요약
- Monolithic Architecture
- 단일 코드베이스로 간단한 개발/배포 가능
- 확장성 제한 및 복잡성 증가 문제 발생
- MVP 및 소규모 애플리케이션에 적합
- Microservices Architecture
- 독립적인 서비스로 구성되어 확장성, 유연성 향상
- HTTP/REST, gRPC, 메시지 큐(RabbitMQ, Kafka) 통신
- 대규모 e-commerce, 스트리밍 플랫폼에 적합
- Serverless Architecture
- FaaS(Function-as-a-Service) 기반으로 인프라 관리 불필요
- 자동 확장, 사용량 기반 비용
- 실시간 처리(이미지 리사이징, 데이터 파이프라인)에 적합
섹션별 세부 요약
1. Monolithic Architecture
- 정의: UI, 비즈니스 로직, 데이터 액세스를 단일 단위로 패키징
- 장점:
- 개발/테스트/배포 간단
- 모든 모듈이 동일한 라이브러리와 런타임 공유
- 단점:
- 개별 컴포넌트 확장 불가능
- 작은 수정에도 전체 재배포 필요
- 적합한 사례: MVP, 고성능 시스템(예: 거래 엔진)
2. Distributed Architecture (Service-Oriented & Microservices)
- Service-Oriented Architecture:
- 독립 모듈로 구성, legacy 시스템 또는 단일체에서 마이크로서비스로 전환 시 사용
- 예: 여러 제품에서 사용하는 인증 서비스
- Microservices Architecture:
- 독립 배포, 자유로운 기술 스택 선택
- 자원 뺏기(Resource Contention) 및 데이터 일관성(Eventual Consistency) 관리 어려움
- 적합한 사례: 모듈화된 e-commerce, 스트리밍 플랫폼, 대규모 소셜 네트워크
3. Serverless Architecture
- 정의: FaaS(예: AWS Lambda)를 통해 인프라 관리 생략
- 장점:
- 자동 확장, 사용량 기반 비용(Pay-as-you-go)
- 정적 웹사이트(JAMstack) 배포 시 유리
- 단점:
- Cold Start Latency 문제
- 로컬 디버깅/테스트 어려움
- 적합한 사례: 실시간 파일 처리, 데이터 파이프라인, 실시간 분석
결론
- Monolithic: 초기 단계 및 간단한 애플리케이션에 적합
- Microservices: 확장성과 유연성이 필요한 대규모 시스템에 추천
- Serverless: 자동 확장과 비용 효율성을 요구하는 실시간 처리 시스템에 적합
- 선택 시 고려사항: 팀 규모, 예산, 확장성 요구, 애플리케이션 복잡성에 따라 아키텍처 결정 필요