고 클린 아키텍처(Go Clean Architecture)에 대하여

고 클린 아키텍처 (Go Clean Architecture)

1. 고 클린 아키텍처란?

클린 아키텍처 개념

클린 아키텍처란 시스템의 각 요소들을 명확하게 분리하면서도 유연하게 연결될 수 있도록 디자인 하는 SW 설계 구조이다. 클린 아키텍처는 SW를 모듈화하는 것이다.

클린 아키텍처는 왜 생겼났을까?

  • 구성 요소 분리

클린 아키텍처는 소프트웨어 시스템의 다양한 부분을 독립적인 구성 요소로 분리하기 때문에 시스템 유지보수가 용이하다.

  • 모듈화

클린 아키텍처는 모듈식 설계를 권장하기 때문에 테스트와 유지보수를 용이하게 만들어 준다.

  • 확장성

시스템 구축에 사용되는 기본 기술과 요구사항의 변화를 수용할 수 있는 확장 가능한 설계를 제공한다.

2. 고 클린 아키텍처 레이어 구조

image

Delivery

데이터를 전달하는 역할을 한다. gRPC, REST API를 통해 외부와 연결할 수 있는 통로를 열어주는 역할이다.

Usecase

Delivery와 Repository 사이를 연결하는 레이어이다. 비즈니스 로직을 구현한다.(계산과 같은 해당 function의 로직을 구현)

Repository

외부와 연결하는 역할을 한다.(DB와 연결 / 외부 서버 - repository와 연결)

Domain

가지고 있는 delivery, usecase, repository의 인터페이스 혹은 struct를 저장한다.

다른 domain의 로직이 필요할 때, 해당 domain의 인터페이스를 활용한다.

3. 클린 아키텍처의 원칙

  • 프레임워크의 독립성 : 특정 소프트웨어 라이브러리에 의존하지 않고, 여러 다양한 도구를 사용할 수 있어야 한다.
  • 비즈니스 로직들은 UI, DB, 웹 서버 등의 외부 요소에 상관없이 테스트 될 수 있어야 한다.
  • UI와 무관하게 먄약 변경이 있더라도 비즈니스 로직들은 변경하지 않고 콘솔 UI로 변경할 수 있어야 한다.
  • DB에 독립적이고 쉽게 DBMS를 교체할 수 있어야 한다. <- 해당 사항을 이루기 위해서는 DI(Defendency Injection)이 필요하다. -> 런타임의 종속성(해당 repository가 어떤 dbms를 필요로하는지)을 주입함으로써 수정 없이 db 교체가 가능하다.
  • 비즈니스 로직은 외부에 대해서 전혀 모르고 영향 받아서도 안된다.