[Go] 프로젝트 레이아웃

보통 대부분의 언어들은 소스코드들을 src 같은 디렉터리에 모아두고 필요에 따라 적절히 디렉터리를 파서 구분을 해서 쓰곤 한다.
근데 Go는 모듈시스템 수준의 한계도 있고 해서 그런건 없이 바로 루트 디렉토리에 이런저런 서브디렉터리들을 추가해서 분리해서 사용한다.

근데 이게 또 가이드라인이 정해진게 있다. 꼭 지켜야하는건 아니지만 그래도 통일을 하는게 좋긴 할 것이다.

일반적으로는 cmd와 internal만 생각해도 좋다.
그 외에는 꼭 필요하다고 생각하면 적용하면 된다.

전체 목록은 아래 문서를 참조하면 되겠다.
https://github.com/golang-standards/project-layout/blob/master/README_ko.md




cmd 디렉터리

각 프로그램의 진입점들이 위치하는 장소다.
이런데다가 서버 launch 기능들을 넣어두거나 하면 된다.

그리고 여기에는 복잡한 코드가 들어가면 안된다.
보통은 internal 등의 디렉터리에 코드를 추상화해놓고 cmd에서는 호출만 하는 것이 바람직하다.




internal 디렉터리

internal 디렉터리는 프로그램의 내부 로직을 작성하는 부분이다.
사실 대부분의 작업은 여기에서만 이루어질 것이다.

internal에다 적당히 구현해놓고

갖다쓰면 된다.

internal은 유일하게 컴파일러 수준의 제약이 달린 디렉토리다.
난 이런 암시적인 제한을 별로 좋아하지는 않는데.. Go에는 매우 많다.

대표적으로, internal 경로는 import가 불가능하게 막혀있다.
그래서 이런식으로 코드를 짜

컴파일러가 internal 쓰지 말라고 던진다.




pkg 디렉터리

여기부터는 좀 옵션이다.
다른 프로젝트에서도 import갈 수 있는 외부 API 구현물들을 모아놓는 경로다.

일반적인 애플리케이션에는 그다지 필요하지는 않고, 유틸성 공유 모듈이나 오픈소스들에 주로 사용하게 될 것이다.
예를 들면 이런것들



https://github.com/golang-standards/project-layout/blob/master/README_ko.md
https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2