GO · 패턴
클린 아키텍처
계층 분리로 테스트 가능하고 유지보수하기 좋은 구조를 만듭니다. 도메인 → 유스케이스 → 인프라 순서로 의존합니다.
패턴고급clean-architecturelayersusecasedomain
핵심 설명
계층 분리로 테스트 가능하고 유지보수하기 좋은 구조를 만듭니다. 도메인 → 유스케이스 → 인프라 순서로 의존합니다.
Go code
package main
import "fmt"
// 도메인 계층 (의존성 없음)
type User struct {
ID int
Name string
}
type UserRepository interface {
FindByID(id int) (*User, error)
}
// 유스케이스 계층 (도메인에만 의존)
type GetUserUseCase struct {
repo UserRepository
}
func (uc *GetUserUseCase) Execute(id int) (*User, error) {
return uc.repo.FindByID(id)
}
// 인프라 계층 (모든 곳에 의존 가능)
type MemoryUserRepo struct{ data map[int]*User }
func (r *MemoryUserRepo) FindByID(id int) (*User, error) {
u, ok := r.data[id]
if !ok { return nil, fmt.Errorf("사용자 %d 없음", id) }
return u, nil
}
// 조립 (main 또는 DI 컨테이너)
func main() {
repo := &MemoryUserRepo{data: map[int]*User{
1: {ID: 1, Name: "Gopher"},
}}
uc := &GetUserUseCase{repo: repo}
user, _ := uc.Execute(1)
fmt.Printf("사용자: %+v\n", *user)
}학습 팁
의존성 방향은 항상 안쪽(도메인)을 향해야 합니다. 도메인 계층은 어떤 외부 패키지도 import하지 않습니다.
주의할 점
유스케이스 계층에서 HTTP, DB 등 인프라 세부사항에 직접 의존하면 테스트와 교체가 어렵습니다. 인터페이스로 추상화하세요.
자주 묻는 질문
클린 아키텍처란 무엇인가요?
계층 분리로 테스트 가능하고 유지보수하기 좋은 구조를 만듭니다. 도메인 → 유스케이스 → 인프라 순서로 의존합니다.
클린 아키텍처 학습 시 주의할 점은 무엇인가요?
유스케이스 계층에서 HTTP, DB 등 인프라 세부사항에 직접 의존하면 테스트와 교체가 어렵습니다. 인터페이스로 추상화하세요.
Continue Learning
Go 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.