Clean Architecture Go 프로젝트 구현 가이드
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

클린 아키텍처를 활용한 Go 프로젝트 구현 가이드

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Go 프로그래밍 경험을 가진 개발자 및 아키텍처 설계에 관심 있는 중급 이상 개발자

핵심 요약

  • 독립성 강조: 프레임워크, UI, 데이터베이스, 외부 도구에 대한 완전한 독립성을 유지함 (Clean Architecture 핵심 원칙)
  • 4단계 계층 구조:
  • Entities(도메인 모델) → Use Cases(서비스 로직) → Interface Adapters(HTTP/DB 연동) → Frameworks & Drivers(프레임워크 구현)
  • go-clean-arch 예시:
  • domain.Article (엔티티) → mysql.ArticleRepository (리포지토리) → article.Service (서비스) → rest.ArticleHandler (HTTP 핸들러)

섹션별 세부 요약

1. Clean Architecture의 핵심 원칙

  • 프레임워크 독립성: Gin, GRPC 등 프레임워크는 도구로 취급하며, 핵심 비즈니스 로직과 분리
  • UI/DB 독립성: UI 변경 시 비즈니스 로직 영향 없음, DB 전환 시 서비스 로직 영향 없음
  • 외부 도구 분리: 외부 라이브러리의 영향을 최소화하기 위해 인터페이스를 통해 분리

2. Clean Architecture 계층 구조

  • Entities:
  • 도메인 모델 정의 (예: domain.Article)
  • 비즈니스 규칙을 기반으로 독립적인 생명주기 유지
  • Use Cases / Services:
  • 비즈니스 로직 구현 (예: article.Service.GetByID())
  • 엔티티를 호출하며 데이터 흐름 조정
  • Interface Adapters:
  • 외부 시스템(예: HTTP, DB)과의 데이터 변환 담당 (예: rest.ArticleHandler)
  • HTTP 요청 데이터를 domain.Article로 변환
  • Frameworks & Drivers:
  • DB, UI, 메시지 큐 등 외부 인터페이스 구현 (예: mysql.ArticleRepository)
  • 내부 계층에 의존하지 않고 외부와 상호작용

3. go-clean-arch 프로젝트 구조

  • 프로젝트 디렉토리:
  • domain/: 엔티티 정의 (domain.Article)
  • internal/repository/mysql/: DB 리포지토리 구현 (mysql.ArticleRepository)
  • article/: 서비스 로직 (article.Service)
  • internal/rest/: HTTP 핸들러 (rest.ArticleHandler)
  • 예시 코드:
  • domain.Article 구조체 정의 (JSON 태그, 유효성 검증)
  • mysql.ArticleRepository.GetByID() 메서드: DB 쿼리 수행 및 domain.Article 반환
  • article.Service.GetByID() 메서드: 리포지토리 호출 및 엔티티 조합
  • rest.ArticleHandler.GetByID() 메서드: HTTP 요청을 서비스 로직에 전달

결론

  • 구현 권장사항: go-clean-arch 예제를 기반으로 계층 구조를 엄격히 따르고, 각 레이어 간 의존성을 명확히 분리
  • 실무 팁:
  • domain/ 패키지에서 비즈니스 규칙만 정의
  • repository/ 패키지에서 DB 연동 로직을 추상화
  • service/ 패키지에서 비즈니스 로직을 집중 구현
  • rest/ 패키지에서 HTTP 요청/응답 처리만 담당
  • 코드 품질 향상: 유지보수성 향상 및 테스트 용이성 확보