본문으로 건너뛰기

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​

/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 를 사용하지 않을 때 프로젝트 웹 사이트 정보들을 넣어둔 폴더이다

참고​