Golang을 사용한 클린 아키텍처

4365 단어 architecturegoclean

업데이트



이 게시물의 업데이트된 버전을 게시했습니다. 다음에서 확인하세요.

클린 아키텍처란?



그의 저서 "Clean Architecture: A Craftsman's Guide to Software Structure and Design"에서 유명한 작가 Robert "Uncle Bob"Martin은 프레임워크, 데이터베이스 및 인터페이스의 테스트 가능성 및 독립성과 같은 몇 가지 중요한 사항을 포함하는 아키텍처를 제시합니다.

클린 아키텍처의 제약 조건은 다음과 같습니다.
  • 프레임워크와 독립적입니다. 아키텍처는 일부 기능이 포함된 소프트웨어 라이브러리의 존재에 의존하지 않습니다. 이를 통해 시스템을 제한된 제약 조건에 집어넣지 않고 이러한 프레임워크를 도구로 사용할 수 있습니다.
  • 테스트 가능. 비즈니스 규칙은 UI, 데이터베이스, 웹 서버 또는 기타 외부 요소 없이 테스트할 수 있습니다.
  • UI와 무관합니다. 시스템의 나머지 부분을 변경하지 않고도 UI를 쉽게 변경할 수 있습니다. 예를 들어 비즈니스 규칙을 변경하지 않고 웹 UI를 콘솔 UI로 바꿀 수 있습니다.
  • 데이터베이스와 독립적입니다. Oracle 또는 SQL Server를 Mongo, BigTable, CouchDB 등으로 교체할 수 있습니다. 비즈니스 규칙은 데이터베이스에 바인딩되지 않습니다.
  • 외부 에이전시와 독립적입니다. 사실 비즈니스 규칙은 외부 세계에 대해 전혀 알지 못합니다.

  • 자세한 내용은 https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html에서 확인하세요.

    따라서 이러한 제약 조건을 기반으로 모든 레이어는 독립적이고 테스트 가능해야 합니다.

    Uncle Bob의 아키텍처에서 코드를 4개 레이어로 나눌 수 있습니다.
  • 엔티티: 전사적 비즈니스 규칙을 캡슐화합니다. Go의 엔터티는 데이터 구조 및 함수 집합입니다.
  • 사용 사례: 이 계층의 소프트웨어에는 응용 프로그램별 비즈니스 규칙이 포함되어 있습니다. 시스템의 모든 사용 사례를 캡슐화하고 구현합니다.
  • 컨트롤러: 이 계층의 소프트웨어는 사용 사례 및 엔티티에 가장 편리한 형식에서 데이터베이스 또는 웹과 같은 일부 외부 에이전시에 가장 편리한 형식으로 데이터를 변환하는 어댑터 세트입니다
  • .
  • 프레임워크 및 드라이버: 이 레이어는 일반적으로 데이터베이스, 웹 프레임워크 등과 같은 프레임워크 및 도구로 구성됩니다.

  • Golang의 클린 아키텍처



    패키지 사용자를 예로 들어 보겠습니다.

    ls -ln pkg/user
    -rw-r — r — 1 501 20 5078 Feb 16 09:58 entity.go
    -rw-r — r — 1 501 20 3747 Feb 16 10:03 mongodb.go
    -rw-r — r — 1 501 20 509 Feb 16 09:59 repository.go
    -rw-r — r — 1 501 20 2403 Feb 16 10:30 service.go
    


    entity.go 파일에는 엔티티가 있습니다.



    repository.go 파일에는 엔티티가 저장될 저장소를 정의하는 인터페이스가 있습니다. 이 경우 리포지토리는 Uncle Bob 아키텍처의 Framework & Driver 계층을 의미합니다. 그의 내용은 다음과 같습니다.



    이 인터페이스는 MongoDB, MySQL 등과 같은 모든 종류의 스토리지 계층에서 구현할 수 있습니다. 우리의 경우 mongodb.go에서 볼 수 있듯이 MongoDB를 사용하여 구현했습니다.



    service.go 파일은 Uncle Bob이 정의한 사용 사례 계층을 나타냅니다. 파일에는 Service 인터페이스와 그의 구현이 있습니다. 서비스 인터페이스는 다음과 같습니다.



    아키텍처의 마지막 계층인 컨트롤러는 api의 콘텐츠로 구현됩니다.

    cd api ; tree
    .
    |____handler
    | |____company.go
    | |____user.go
    | |____address.go
    | |____skill.go
    | |____invite.go
    | |____position.go
    |____rice-box.go
    |____main.go
    
    


    다음 코드에서는 api/main.go에서 서비스 사용 방법을 확인할 수 있습니다.



    이제 다음과 같이 패키지에 대한 테스트를 쉽게 만들 수 있습니다.



    클린 아키텍처를 사용하면 예를 들어 애플리케이션의 나머지 부분을 손상시키지 않고 데이터베이스를 MongoDB에서 Neo4j로 변경할 수 있습니다. 그리고 우리는 품질과 속도를 잃지 않고 소프트웨어를 성장시킬 수 있습니다.

    참조



    https://hackernoon.com/golang-clean-archithecture-efd6d7c43047
    https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
    https://github.com/eminetto/clean-architecture-go

    좋은 웹페이지 즐겨찾기