Blog

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

참고