Go 표준 프로젝트 레이아웃 알아보기
Go Lang 표준 프로젝트 레이아웃
Go Lang 을 배우기 시작하면서 계속 프로젝트 구조에 대해 고민을 하고 있었으나, Go Lang 표준 프로젝트 레이아웃이 있어서 한번 둘러볼 겸 아주 간략하게 정리했다.
상세한 내용을 보고 싶으면 golang-standards/project-layout Repository 를 참고한다.
정보
/src 폴더는 사용하지 않는다.
Go Directories
/cmd
- 메인 애플리케이션들을 넣어둔 폴더이다
- 각 애플리케이션의 디렉토리 이름은 실행하기 원하는 애플리케이션과 이름이 동일해야 한다 ( e.g.
/cmd/myapp) /internal과/pkg디렉토리 에서 참조하여 호출하는 작은main함수를 두는게 일반적이다
/internal
- 애플리케이션과 라이브러리의 내부 코드를 넣어둔 폴더이다
- 외부 애플리케이션이나 라이브러리는 이 폴더에 있는 코드를 참조할 수 없다
/pkg
- 외부 애플리케이션에서 이 프로젝트에서 참조할 수 있는 코드들을 넣어둔 폴더이다
/vendor
- 애플리케이션에 연관 있는 외부 라이브러리들을 수동으로 관리할 때 넣어둔 폴더이다
Service Application Directories
/api
- OpenAPI, Swagger 스펙, JSON 스키마 파일, 프로토콜 정의 파일들을 넣어둔 폴더이다
Web Application Directories
/web
- 웹 애플리케이션 컴포넌트 들을 넣어둔 폴더이다
- assets 파일들
- Server Side Teampltes
- SPA
Common Application Directories
/configs
- 설정 파일의 템플릿 혹은 기본 설정 들을 넣어둔 폴더이다
/init
- 시스템( systemd, upsert, sysv ) 혹은 프로세스 ( runit, supervisord )설정 파일들을 넣어둔 폴더이다
/scripts
- 다양한 빌드, 설치, 분석, 그 외 다른 행동을 하기 위한 스크립트들을 넣어둔 폴더다
- 이 폴더에 있는 스크립트들은 최상위 폴더에 있는
Makefile을 작고 간단하게 만든다
/build
- 패키지 와 CI 설정 정보를 넣어둔 폴더이다.
- 클라우드 정보 ( AMI ), 컨테이너 ( Docker ), OS ( deb, rpm, pkg ) 패키지 설정 정보와 스크립트들은
/build/package폴더에 넣는다 - CI ( Travis, Circle, drone ) 설정 파일들은
/build/ci폴더에 넣는다
/deployments
- IaaS, PasS, 시스템 또는 컨테이너 오케스트레이션 배포 설정 파일 또는 템플릿을 넣어두는 폴더이다. ( docker-compose, kubernetes, helm, mesos, terraform, bosh )
/test
- 추가 테스트 애플리케이션 또는 테스트 데이터를 넣어둔 폴더이다.
- 이 폴더는 자유롭게 구성한다
Other Directories
/docs
- 디자인과 사용자들의 문서를 넣어둔 폴더이다 (
godoc으로 만든 문서들도 포함된다 )
/tools
- 이 프로젝트를 사용하기 위한 도구들을 넣어둔 폴더이다
- 이 폴더에 있는 도구들은
/pkg와/internal폴더에 있는 코드를 참조할 수 있다
/examples
- 애플리케이션 또는 공개 라이브러리의 예시들을 넣어둔 폴더이다
/third_party
- external helper tool, forked code, 3rd party utilities 들을 넣어둔 폴더이다
- e.g. Swagger UI
/githooks
- Git hooks 설정 파일을 넣어둔 폴더이다
/assets
- 저장소에서 Go Lang 을 위한 assets 들을 넣어둔 폴더이다
- e.g. 이미지, 로고
/website
- Github Pages 를 사용하지 않을 때 프로젝트 웹 사이트 정보들을 넣어둔 폴더이다