이 글은 Go 블로그의 “Package Names"과 여러 Go 패키지 컨벤션 자료들을 참고하여 작성했습니다.
패키지 컨벤션의 핵심
Go의 패키지 컨벤션은 디렉토리 구조나 아키텍처에 대한 엄격한 규칙을 제시하지는 않는다. 대신 다음과 같은 핵심 원칙들을 제시한다.
1. 책임 중심 패키지 구성
모든 타입을 interface나 model과 같은 하나의 패키지에 넣는 것을 지양한다. 대신 “Organize by responsibility” 원칙에 따라 각 도메인의 책임을 기준으로 패키지를 구성한다. 예를 들어:
- user 패키지: 사용자 관리 책임
- order 패키지: 주문 관리 책임
2. 패키지 경로의 활용
Go는 패키지 경로 자체를 표현 수단으로 활용한다. 이는 여러 Go 공식 패키지에서도 확인할 수 있다:
- crypto/: 암호화 관련 패키지들의 네임스페이스
- encoding/: 인코딩 관련 패키지들의 네임스페이스
이러한 접근은 runtime/pprof와 net/http/pprof와 같이 동일한 이름을 가진 패키지들의 목적을 명확히 구분해준다.
3. 중복 표현 제거
패키지 경로가 이미 제공하는 정보를 패키지 이름에서 반복하지 않는다. 이는 코드의 간결성과 가독성을 높이는데 도움이 된다.
결론
이러한 컨벤션들은 단순한 규칙이 아닌, 코드의 명확성과 유지보수성을 높이기 위한 가이드라인이다. 각 프로젝트의 맥락에 맞게 적절히 적용하는 것이 중요하다.