반응형
Go 언어(Golang)에서 디렉토리 구조를 설계할 때는 프로젝트의 크기와 복잡도, 팀의 작업 방식 등을 고려해야 합니다. 일반적으로 다음과 같은 가이드라인을 따를 수 있습니다.
1. 기본 구조
초기에는 간단한 프로젝트 구조로 시작할 수 있습니다. 예를 들어:
myproject/
├── main.go
├── go.mod
└── go.sum
2. 기능별로 디렉토리 분리
프로젝트가 커지면, 기능별로 코드를 모듈화하여 디렉토리로 분리합니다:
myproject/
├── cmd/
│ └── myapp/
│ └── main.go
├── pkg/
│ ├── foo/
│ │ ├── foo.go
│ │ └── foo_test.go
│ └── bar/
│ ├── bar.go
│ └── bar_test.go
├── internal/
│ ├── api/
│ │ ├── api.go
│ │ └── api_test.go
│ └── db/
│ ├── db.go
│ └── db_test.go
├── go.mod
└── go.sum
3. 표준 디렉토리
Go 커뮤니티에서 자주 사용하는 표준 디렉토리 구조는 다음과 같습니다.
myproject/
├── cmd/ // 애플리케이션의 엔트리 포인트
│ └── myapp/
│ └── main.go
├── pkg/ // 외부 패키지들이 참조할 수 있는 라이브러리 코드
├── internal/ // 내부 패키지 (외부에 노출되지 않음)
│ ├── api/
│ └── db/
├── api/ // API 인터페이스 코드
├── web/ // 웹 애플리케이션 관련 코드
├── scripts/ // 빌드, 배포 스크립트
├── configs/ // 설정 파일들
├── docs/ // 프로젝트 문서
├── test/ // 테스트 코드
│ ├── integration/
│ └── unit/
├── go.mod
└── go.sum
4. 패키지 분리 기준
패키지를 분리할 때는 다음 기준을 참고합니다:
- 재사용성: 여러 곳에서 사용할 수 있는 기능은 별도의 패키지로 분리합니다.
- 응집성: 관련된 기능들은 하나의 패키지로 묶습니다.
- 의존성 관리: 내부 패키지(internal)를 사용하여 외부 노출을 제어합니다.
5. 실제 예시
예를 들어, 웹 애플리케이션 프로젝트라면 다음과 같은 구조를 가질 수 있습니다:
mywebapp/
├── cmd/
│ └── server/
│ └── main.go
├── internal/
│ ├── handlers/
│ │ ├── user.go
│ │ └── user_test.go
│ └── middleware/
│ ├── auth.go
│ └── auth_test.go
├── pkg/
│ ├── config/
│ │ ├── config.go
│ │ └── config_test.go
│ └── logger/
│ ├── logger.go
│ └── logger_test.go
├── web/
│ ├── static/
│ └── templates/
├── go.mod
└── go.sum
이와 같은 구조를 통해 코드의 유지보수성과 확장성을 높일 수 있습니다. 초기에는 간단하게 시작하고, 프로젝트가 성장함에 따라 필요에 따라 디렉토리를 분리하고 구조를 확장해 나가는 것이 좋습니다.
728x90
반응형
'Programing > Go' 카테고리의 다른 글
Go에서 슬라이스 동일성을 비교하는 방법 (0) | 2024.06.14 |
---|---|
Golang에서 gRPC의 강력한 기능 공개: HTTP를 통한 엣지를 갖춘 강력하고 건강한 마이크로서비스 구축 (0) | 2024.06.12 |
Golang의 명명 규칙: 종합 가이드 (0) | 2024.06.12 |
golang package 는 싱글톤 인가? (0) | 2024.06.12 |
[GoLang] 2장: GIN 프레임워크 환경 설정 (0) | 2024.06.11 |
댓글