카테고리 없음

11주차 (2)

jaeoun0238 2025. 1. 7. 21:44

 

레포지토리를 언제사용하는가?!에 대한 질문에 대한 앞으로 우리가 배울 NEST에 대한 살짝쿵맛보기

 

컨트롤러-서비스-레포지토리 패턴: 효율적인 애플리케이션 설계의 기초

 

1. 컨트롤러 (Controller): 애플리케이션의 첫 관문컨트롤러의 주요 책임

  • 사용자가 보낸 요청 데이터를 검증합니다.
    (예: 입력값이 올바른지, 필수 데이터가 빠지지 않았는지 확인)
  • 요청을 적절히 서비스 계층에 전달하고, 받은 결과를 사용자에게 반환합니다.
  • 애플리케이션의 진입점 역할을 하며, 주로 클라이언트와 통신합니다.

컨트롤러는 비즈니스 로직을 구현하지 않습니다. 비즈니스 로직은 서비스 계층의 역할이기 때문입니다. 이처럼 컨트롤러의 책임은 단순히 요청을 받아 서비스로 넘기고, 결과를 반환하는 것입니다.


2. 서비스 (Service): 비즈니스 로직의 심장서비스 계층의 주요 역할

  • 사용자 요청에 따라 필요한 작업을 실행합니다.
    (예: 데이터 검증, 조건에 따른 로직 수행 등)
  • 여러 레포지토리를 조합하거나 외부 API와 상호작용하여 복잡한 로직을 수행합니다.
  • 데이터가 정확하고 일관성 있게 처리되도록 보장합니다.

서비스는 단일 책임 원칙(SRP, Single Responsibility Principle)을 따르는 것이 중요합니다. 각 서비스는 하나의 비즈니스 작업을 담당하도록 설계하여 유지보수성과 테스트 용이성을 높입니다.


3. 레포지토리 (Repository): 데이터의 관문레포지토리의 주요 역할

  • 데이터 CRUD(Create, Read, Update, Delete) 작업 수행.
  • 데이터베이스 쿼리를 실행하고, 그 결과를 서비스 계층에 반환.
  • 애플리케이션이 데이터베이스의 세부 사항(구조, 기술 등)을 알 필요 없도록 추상화 제공.

이 계층을 사용하면 데이터 접근 방식을 변경해야 할 경우, 레포지토리만 수정하면 되므로 코드의 유지보수성이 크게 향상됩니다.


계층 간의 협력 관계

  1. 사용자의 요청이 들어오면 컨트롤러가 이를 처리하여 서비스 계층에 전달합니다.
  2. 서비스 계층은 비즈니스 로직을 수행하며, 필요하면 레포지토리를 호출하여 데이터를 가져오거나 저장합니다.
  3. 레포지토리는 데이터베이스와 상호작용하여 요청된 작업을 수행한 뒤, 결과를 서비스 계층으로 반환합니다.
  4. 서비스는 처리된 결과를 컨트롤러로 넘기고, 컨트롤러는 이를 클라이언트에게 응답으로 전달합니다.

컨트롤러-서비스-레포지토리 패턴의 장점

  1. 책임 분리
    각 계층이 명확한 역할을 가지므로 코드가 이해하기 쉽고 구조적으로 정리됩니다.
  2. 유지보수성
    특정 계층에 변경이 필요할 때 다른 계층에 영향을 최소화할 수 있어, 수정 작업이 용이합니다.
  3. 확장성
    새로운 기능 추가 시 각 계층에 독립적으로 작업할 수 있어 확장이 간단합니다.
  4. 재사용성
    동일한 서비스나 데이터 접근 로직을 여러 컨트롤러에서 재사용할 수 있습니다.
  5. 테스트 용이성
    각 계층을 독립적으로 테스트할 수 있어 단위 테스트와 통합 테스트가 효율적입니다.

컨트롤러-서비스-레포지토리 패턴의 단점

  1. 복잡성 증가
    간단한 애플리케이션에서는 불필요하게 계층이 많아져 구조가 복잡해질 수 있습니다.
  2. 의존성 관리
    잘못 설계하면 계층 간 의존성이 복잡해지고, 수정 시 여러 계층을 변경해야 할 수 있습니다.
  3. 성능 문제
    요청이 여러 계층을 통과하기 때문에 처리 속도가 느려질 가능성이 있습니다.
    • 컨트롤러-서비스-레포지토리 계층은 각각 독립적으로 동작하면서도 협력하여 하나의 작업을 수행합니다.
    • 레포지토리는 데이터베이스와의 모든 상호작용을 담당합니다. 데이터를 검색하거나 저장하고 수정 및 삭제하는 작업은 모두 이 계층에서 처리됩니다. 컨트롤러와 서비스 계층이 데이터베이스와 직접 소통하지 않고, 레포지토리를 통해서만 데이터를 접근하도록 설계합니다.
    • 서비스 계층은 애플리케이션의 "핵심 두뇌"라고 할 수 있습니다. 여기서 모든 비즈니스 로직이 처리되며, 컨트롤러와 데이터 계층(레포지토리) 간의 중재자 역할을 합니다. 단순히 데이터를 전달하는 것이 아니라, 애플리케이션의 규칙과 조건을 기반으로 요청을 처리합니다.
    • 컨트롤러는 사용자와 애플리케이션이 만나는 접점으로, 사용자의 요청을 받아 처리하고 그 결과를 다시 사용자에게 반환하는 역할을 합니다. 쉽게 말해, 클라이언트가 보낸 요청을 분석하고, 적절히 다음 단계(서비스)로 넘겨주는 "안내자" 같은 역할을 합니다.
    • 컨트롤러-서비스-레포지토리 패턴은 소프트웨어 애플리케이션을 구조적으로 설계하는 데 널리 사용되는 설계 방식입니다. 이 패턴은 시스템을 컨트롤러(Controller), 서비스(Service), 레포지토리(Repository)라는 세 가지 주요 계층으로 나눠, 각 계층이 특정한 책임을 담당하도록 설계됩니다. 이로 인해 코드가 명확하고 유지보수가 쉬워질 뿐 아니라, 확장성과 테스트 용이성이 크게 향상됩니다.