본문 바로가기
Programing/Go

golang 디렉토리 기본 구조

by 멍멍돌이야 2024. 6. 13.
반응형

Go 언어(Golang)에서 디렉토리 구조를 설계할 때는 프로젝트의 크기와 복잡도, 팀의 작업 방식 등을 고려해야 합니다. 일반적으로 다음과 같은 가이드라인을 따를 수 있습니다.

 

1. 기본 구조

초기에는 간단한 프로젝트 구조로 시작할 수 있습니다. 예를 들어:
text
myproject/ ├── main.go ├── go.mod └── go.sum

 

2. 기능별로 디렉토리 분리

프로젝트가 커지면, 기능별로 코드를 모듈화하여 디렉토리로 분리합니다:

go
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 커뮤니티에서 자주 사용하는 표준 디렉토리 구조는 다음과 같습니다.

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. 실제 예시

예를 들어, 웹 애플리케이션 프로젝트라면 다음과 같은 구조를 가질 수 있습니다:

go
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
반응형

댓글