나는 이렇게 본다/Architecture Patterns with Python

Repository Pattern

daco2020 2022. 5. 11. 18:42
반응형

* 이 글은 책을 읽고 주관적인 생각과 함께 요약 정리한 글입니다. 설명을 위한 글이 아니므로 내용이 정확하지 않을 수 있습니다.

 

 

제목 : 파이썬으로 살펴보는 아키텍처 패턴

저자 : 해리 퍼시벌, 밥 그레고리

범위 : 3. 저장소 패턴

 

느낀 점

  • 도메인 모델과 인프라간에 의존성을 줄여 변경에 용이하다.
  • 가짜 저장소를 만들어 단위 테스트를 구현하는데 용이하다.
  • 아직까지는 도메인 모델과 저장소 패턴의 장단점이 와닿지 않는다.
  • 이번 프로젝트는 저장소 패턴을 구현하는 것인데 직접 경험해봐야겠다.

 

더보기 키워드

아키텍처 전반

양파 아키텍처

클린 아키텍처

저장소 패턴 - 이종립

저장소 패턴 - deviq

dependency injection

덕 타이핑

abc (추상화 기반 클래스)

 

 

정리


저장소 패턴

  • 저장소 패턴은 데이터 저장소를 더 간단히 추상화한 것으로 모델 계층과 데이터 계층을 분리할 수 있다.
  • 데이터베이스의 복잡성을 감춰서 시스템을 테스트하기 더 좋게 만든다.
  • MVC, MVT는 계층을 분리해서 유지하고, 각 계층이 자신의 바로 아래 계층에만 의존하게 만드는 것이 목표다.
  • 하지만 도메인 모델에는 그 어떤 의존성도 없기 바란다.
    • 하부 구조와 관련된 문제가 도메인 모델에 영향을 끼쳐 단위 테스트를 느리게 하고, 도메인 모델의 변경 능력을 감소시키면 안된다.
  • 모델을 내부에 있는 것으로 간주하고 의존성이 내부로 들어오게 만들어야 한다. - 양파 아키텍처
  • 저장소 패턴은 영속적 저장소를 추상화한 것이다.
    • 모든 데이터가 메모리상에 존재하는 것처럼 가정해 데이터 접근과 관련된 지루한 세부 사항을 감춘다.
  • 단점 : 도메인 객체를 추가할 때마다 저장소 클래스에 코드를 추가해야한다.
  • 장점 : 저장 방법을 더 쉽게 바꿀 수 있고, 단위 테스트 시 가짜 저장소를 제공하기 쉽다.
    • 저장소 구현에 어떤 SQL을 쓰는지는 자유다. ORM을 안써도 된다.
  • 세션의 커밋은 저장소를 호출하는 쪽의 책임으로 한다. → 장단점이 있는데 6장에서 자세히 다룬다.
  • 테스트를 위한 가짜 저장소 - 만약 가짜 객체를 만들기 어렵다면 추상화를 복잡하게 설계한 것이다.

 

추상화 기반 클래스

@abc.abstractmethod는 자식 클래스가 부모 클래스에 정의된 모든 abstractmethod를 구현하지 않으면 인스터스가 생성되지 않는다.

실전에서는 abc(추상화 기반 클래스)는 거의 사용하지 않고 덕 타이핑을 사용하는 경우가 많다.

 

포트와 어댑터

  • 포트는 인터페이스
  • 어댑터는 인터페이스나 추상화가 뒤에 있는 구현 이다.
  • 파이썬은 인터페이스를 제공하지 않는다. 따라서 어댑터는 식별하기 쉽지만 포트를 정의하기는 어렵다.
  • 추상 기반 클래스를 사용한다면 그것이 포트다.
  • 아니라면, 포트는 덕 타입(사용 중인 함수와 메서드 이름과 인수 이름과 타입)이다.

 

덕 타이핑이란?

  • 실제 타입과 무관하게 같은 이름의 속성이나 메서드가 있다면, 구별하지 않고 사용하는 것을 의미함.

 

마치며

  • 장점
    • 영속적 저장소와 도메인 모델 사이의 인터페이스를 간단히 유지
    • 모델과 인프라를 분리하여, 단위 테스트를 위한 가짜 저장소를 쉽게 만들 수 있음
    • 영속성에 대해 생각하기 전에 도메인 모델을 작성하여 비즈니스 문제에 집중
    • 객체를 테이블에 매핑하는 과정에서 원하는 대로 제어할 수 있고 스키마를 단순화할 수 있음
  • 단점
    • ORM이 결합을 완화시켜줌
    • ORM 매핑을 수동으로 하려면 작업과 코드가 더 필요
    • 간접 계층을 추가하면 유지보수 비용이 증가

💡 앱이 래퍼를 감싸는 단순한 CRUD라면 도메인 모델이나 저장소가 필요하지 않다.

 

저장소 패턴 정리

  • ORM에 의존성 역전을 적용하자
    • 도메인 모델은 인프라에 대해 걱정할 필요가 없어야 한다.
    • ORM은 모델을 import해야 하며, 모델이 ORM을 import해서는 안된다.
  • 저장소 패턴은 영속적 저장소에 대한 단순한 추상화다.
    • 저장소는 컬렉션이 메모리상에 있는 객체라는 환상을 제공한다.
    • 비즈니스 로직에는 영향을 주지 않으면서 인프라를 이루는 세부 구조를 변경할 수 있다.

 

 

 

반응형