계층형 아키텍처, 클린 아키텍처

minisoo·2023년 7월 18일
0
post-thumbnail

계층형 아키텍처(Layered Architecture)

💡 계층형 아키텍처 패턴은 계층 단위로 분리하여 계층마다 특정 역할을 수행하도록 구성된 아키텍처를 말한다.

주로 3계층 또는 4계층으로 이루어져 있다.

  • Presentation Layer
    • 클라이언트의 요청을 받고 응답하는 계층, 요청에 대한 처리는 Business Layer로 전달한다. 예) Spring의 Controller
  • Business Layer
    • 비즈니스 로직을 처리하는 계층, 클라이언트로 전달받은 데이터에 대한 비즈니스 로직을 처리하여 영속성 계층으로 전달하는 역할 수행 예) Spring의 Service
  • Persistence Layer
    • 데이터베이스에 접근하는 계층으로 Business의 요청 처리에 따라 데이터를 저장, 조회, 삭제 등의 로직 수행 예) Spring의 Repository
  • Database Layer
    • 데이터베이스 자체를 의미하는 계층

계층형 아키텍처의 핵심은 단방향 의존성이다. 각각의 레이어는 자기보다 하위에 있는 레이어에만 의존한다.

  • 각 레이어가 독립적이고 역할이 분명하므로 코드를 파악하기 쉽고 유지보수 및 코드 관리가 용이하다.
  • 비즈니스 관점에서는 비즈니스 로직을 최우선으로 구현해야 하지만 계층형 아키텍처에서는 의존성의 끝이 영속성을 가리키기 때문에 도메인을 최우선으로 두기 쉽지 않다.
  • 소프트웨어의 모든 구조가 DB중심의 설계가 되며, 애플리케이션 레이어가 변경에 쉽게 영향받게 된다.
  • 계층 간 의존성의 방향 때문에 영속성이 구현되어 있지 않으면 상위 계층도 구현할 수 없게된다. 구현의 순서가 강제되기 때문에 협업하기에도 불편한 구조가 될 수 있다.

클린 아키텍처(Clean Architecture)

모든 의존성은 반드시 외부에서 내부로, 고수준 정책을 향해야 한다.

프레임워크, UI, 데이터베이스 및 외부 세계와 독립적이며, Testable 해야한다.

  1. 고수준 모듈
    • 의미 있는 단일 기능
    • 상위 수준의 정책
    • 예) 사업자등록증을 저장한다, 업체 정보를 저장한다.
  2. 저수준 모듈
    • 고수준 모듈의 기능을 구현하기 위해 필요한 하위 기능의 실제 구현
    • 예) 사업자등록증 이미지 S3에 저장 맟 저장위치를 IMAGE_INFO 테이블에 저장, 업체 정보를 Company 테이블에 저장
  • Entity
    • 비즈니스 규칙을 담당하며 캡슐화를 필요로 한다.
      • 캡슐화 : 서로 연관 있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
      • 접근제어자 이용, 데이터 접근시 제한적으로 getter/setter 사용
    • 외부의 어떤 것이 변할 때 변할 가능성이 가장 적다.
  • Use Case
    • 비즈니스 로직을 결정, Entity 데이터를 처리하도록 설계
  • Controller
    • 실제 외부 인터페이스와 연결하는 업무 담당
  • Infrastructure
    • 모든 I/O components가 있는 영역으로 DB, Frameworks, Devices 등이 있다. 변화 가능성이 매우 높다.

[참고자료]
https://devmoony.tistory.com/178
https://6mini.github.io/software%20architecture%20pattern/2022/11/16/layered-architecture/
https://velog.io/@483759/%EA%B3%84%EC%B8%B5%ED%98%95-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%93%B0%EB%A9%B4-%EC%99%9C-%EC%95%88%EB%90%98%EB%8A%94%EB%8D%B0%EC%9A%94
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
https://velog.io/@kshired/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8-DIP
https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95
https://velog.io/@saint6839/%ED%81%B4%EB%A6%B0-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98Clean-Architecture%EB%9E%80

profile
코딩하는 돌멩이 👻

1개의 댓글

comment-user-thumbnail
2023년 7월 18일

덕분에 좋은 정보 얻어갑니다, 감사합니다.

답글 달기