▤ 목차
Infrastructure Layer
외부 시스템과의 통신을 담당하며, 애플리케이션의 비즈니스 로직과 외부 시스템 간의 추상화 계층 역할을 합니다.
주요 역할
- 데이터베이스, 파일 시스템, 네트워크 서비스 등의 외부 리소스와의 상호작용
- 구현 기술에 대한 세부사항 처리: 레포지토리 구현, 인프라 서비스 포함
인프라스트럭처 서비스 예시
- 외부 API 통합
- RESTful API 및 GraphQL API 통합
- 소셜 미디어 API (예: Facebook, Twitter)
- 지불 게이트웨이 (예: Stripe, PayPal)
- HTTP 클라이언트 사용: Axios, Fetch 등
- 메시징 서비스
- 이메일 발송 : AWS SES, SendGrid
- SMS 발송 : Twilio, Nexmo
- 메시지 큐 : RabbitMQ, Kafka, AWS SQS
- 데이터베이스 접근
- ORM 설정: TypeORM, Sequelize, Prisma
- 데이터베이스 연결 관리 및 트랜잭션 처리
이점
코드 작성
책임 분리 (Separation of Concerns)
- 비즈니스 로직과 기술적 구현을 분리하여, 각 레이어의 역할이 명확
- 예) 도메인 레이어는 데이터 처리 규칙만 다루고, 인프라스트럭처 레이어는 데이터베이스 접근만 담당
유지보수 용이성
- 외부 시스템(데이터베이스, API 등)이 변경되더라도, 인프라스트럭처 레이어에서만 수정하면 된다.
- 구현 세부 사항이 도메인 로직에 노출되지 않아, 코드 수정 범위를 최소화 가능
재사용성
- 공통적으로 사용하는 서비스(예: 이메일 발송, API 호출 등)를 모듈화하여 재사용 가능
- 여러 도메인에서 동일한 인프라스트럭처 서비스를 활용
확장성
- 새로운 데이터베이스나 외부 API를 추가하거나 변경할 때도 기존 구조를 크게 변경하지 않고 확장가능
협업
역할 집중
- 외부 시스템과의 통신을 인프라스트럭처 레이어가 담당하여, 도메인 팀은 비즈니스 로직에만 집중 가능
변경 시 영향 최소화
- 외부 API나 데이터베이스 변경 시, 인프라스트럭처 레이어에서만 작업하면 되므로 다른 팀원 작업에 영향이 적음.
표준화된 인터페이스
- 인터페이스(예: 레포지토리 패턴)를 통해 도메인 로직과 인프라스트럭처 간의 통신 방식을 표준화하여 충돌 방지
- 일관된 방식으로 외부 시스템과 상호작용하게 되어 협업 효율이 향상
테스트 코드
테스트 용이성
- Mock 객체 또는 Stub을 사용하여 외부 시스템 의존성을 제거
- 외부 시스템과 독립적으로 도메인 로직이나 비즈니스 규칙에 대한 단위 테스트 수행 가능
테스트 환경
- 운영 환경과 유사한 조건에서 전체적인 통합 동작 검증 가능
- 외부 시스템과의 통합 동작을 실제 환경이나 시뮬레이션된 환경에서 검증
- 실제 데이터베이스 연결이나 API 호출이 제대로 동작하는지 확인가능
문제진단 용이
- 외부 시스템 관련 문제는 외부 연동과 관련된 코드를 우선적으로 살펴보고 빠르게 진단하고 해결가능
'아키텍처 > 프로젝트 구조' 카테고리의 다른 글
[ Nest.js] 폴더 구조에 대한 세가지 관점 (0) | 2024.12.06 |
---|---|
[ NestJS ] DDD ( Domain-Driven Design ) 방식을 따른 프로젝트의 계층화 구조 (0) | 2024.05.08 |