Infrastructure Layer

외부 시스템과의 통신을 담당하며, 애플리케이션의 비즈니스 로직과 외부 시스템 간의 추상화 계층 역할을 합니다.

주요 역할

  • 데이터베이스, 파일 시스템, 네트워크 서비스 등의 외부 리소스와의 상호작용
  • 구현 기술에 대한 세부사항 처리: 레포지토리 구현, 인프라 서비스 포함

인프라스트럭처 서비스 예시

  1. 외부 API 통합
    • RESTful API 및 GraphQL API 통합
    • 소셜 미디어 API (예: Facebook, Twitter)
    • 지불 게이트웨이 (예: Stripe, PayPal)
    • HTTP 클라이언트 사용: Axios, Fetch 등
  2. 메시징 서비스
    • 이메일 발송 : AWS SES, SendGrid
    • SMS 발송 : Twilio, Nexmo
    • 메시지 큐 : RabbitMQ, Kafka, AWS SQS
  3. 데이터베이스 접근
    • ORM 설정: TypeORM, Sequelize, Prisma
    • 데이터베이스 연결 관리 및 트랜잭션 처리

이점

코드 작성

책임 분리 (Separation of Concerns)

  • 비즈니스 로직과 기술적 구현을 분리하여, 각 레이어의 역할이 명확
  • 예) 도메인 레이어는 데이터 처리 규칙만 다루고, 인프라스트럭처 레이어는 데이터베이스 접근만 담당

유지보수 용이성

  • 외부 시스템(데이터베이스, API 등)이 변경되더라도, 인프라스트럭처 레이어에서만 수정하면 된다.
  • 구현 세부 사항이 도메인 로직에 노출되지 않아, 코드 수정 범위를 최소화 가능

재사용성

  • 공통적으로 사용하는 서비스(예: 이메일 발송, API 호출 등)를 모듈화하여 재사용 가능
  • 여러 도메인에서 동일한 인프라스트럭처 서비스를 활용

확장성

  • 새로운 데이터베이스나 외부 API를 추가하거나 변경할 때도 기존 구조를 크게 변경하지 않고 확장가능

협업

역할 집중

  • 외부 시스템과의 통신을 인프라스트럭처 레이어가 담당하여, 도메인 팀은 비즈니스 로직에만 집중 가능

변경 시 영향 최소화

  • 외부 API나 데이터베이스 변경 시, 인프라스트럭처 레이어에서만 작업하면 되므로 다른 팀원 작업에 영향이 적음.

표준화된 인터페이스

  • 인터페이스(예: 레포지토리 패턴)를 통해 도메인 로직과 인프라스트럭처 간의 통신 방식을 표준화하여 충돌 방지
  • 일관된 방식으로 외부 시스템과 상호작용하게 되어 협업 효율이 향상

테스트 코드

테스트 용이성

  • Mock 객체 또는 Stub을 사용하여 외부 시스템 의존성을 제거
  • 외부 시스템과 독립적으로 도메인 로직이나 비즈니스 규칙에 대한 단위 테스트 수행 가능

테스트 환경

  • 운영 환경과 유사한 조건에서 전체적인 통합 동작 검증 가능
  • 외부 시스템과의 통합 동작을 실제 환경이나 시뮬레이션된 환경에서 검증
  • 실제 데이터베이스 연결이나 API 호출이 제대로 동작하는지 확인가능

문제진단 용이

  • 외부 시스템 관련 문제는 외부 연동과 관련된 코드를 우선적으로 살펴보고 빠르게 진단하고 해결가능

 

 

  •  

+ Recent posts