클린 아키텍처를 활용한 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 요청/응답 처리만 담당- 코드 품질 향상: 유지보수성 향상 및 테스트 용이성 확보