티스토리 뷰
반응형
Go 모듈과 패키지 관리 이해하기 – 실전 프로젝트 구조의 시작
Go는 모듈 기반 프로젝트 구조를 지원합니다. 이는 외부 라이브러리 관리뿐 아니라 대규모 프로젝트에서의 패키지 구조화에 필수입니다.
이 글에서는 Go 모듈 시스템의 이해부터, 실무에서 자주 쓰는 패키지 구조 분리 방법까지 안내합니다.
✅ 1. Go Modules란?
Go 1.11부터 도입된 Go Modules는 패키지 버전 관리 시스템입니다.
이전의 GOPATH 방식보다 훨씬 편리하며, 요즘 대부분의 Go 프로젝트는 Go Modules를 사용합니다.
🔧 모듈 초기화
go mod init github.com/yourname/go-admin-api
📁 go.mod 파일 예시
module github.com/yourname/go-admin-api
go 1.21
require (
github.com/gorilla/mux v1.8.0
gorm.io/gorm v1.25.4
)
🔍 외부 패키지 설치
go get github.com/gorilla/mux
✅ 2. Go 프로젝트 기본 디렉토리 구조
반응형
go-admin-api/
├── cmd/ # main.go 위치
├── internal/ # 내부 도메인 로직 (Handler, Service 등)
│ ├── user/
│ │ ├── handler.go
│ │ ├── service.go
│ │ └── repository.go
├── config/ # 환경 설정
├── pkg/ # 외부로 노출 가능한 공통 유틸
├── models/ # DB 모델 정의
├── router/ # 라우팅 설정
└── go.mod
💡 internal/과 pkg/ 디렉토리 구분은 관습적입니다. 외부 노출 여부에 따라 구분하며, internal은 외부에서 import 불가능합니다.
✅ 3. 패키지로 파일 분리하는 이유
- 책임 분리 (Separation of Concern)
- 예: handler → HTTP 처리 / service → 비즈니스 로직 / repository → DB 처리
- 유지보수 용이
- 기능이 많아질수록 파일 크기가 커지므로 역할 단위로 분리 필요
- 테스트 및 재사용성 향상
- 서비스 로직과 핸들러를 분리하면 단위 테스트 작성이 쉬움
✅ 4. 실전 예시: 유저 도메인 분리
📁 internal/user/handler.go
func GetUsers(w http.ResponseWriter, r *http.Request) {
users, err := service.GetAllUsers()
if err != nil {
http.Error(w, "error", http.StatusInternalServerError)
return
}
json.NewEncoder(w).Encode(users)
}
📁 internal/user/service.go
func GetAllUsers() ([]models.User, error) {
return repository.FetchUsers()
}
📁 internal/user/repository.go
func FetchUsers() ([]models.User, error) {
var users []models.User
result := db.Find(&users)
return users, result.Error
}
✅ 5. 실전 팁: go mod tidy를 습관화
go mod tidy
- 사용하지 않는 모듈 삭제
- 필요한 의존성 자동 추가
✅ 마무리
Go Modules는 Go 프로젝트 관리의 필수 요소입니다.
여기까지 구조화하면, 이후 라우팅, DB, 인증 등의 기능을 추가할 준비가 끝난 셈입니다.
다음 글에서는 net/http를 활용한 간단한 REST API 서버 구현을 다루겠습니다.
'project' 카테고리의 다른 글
📌 [1편] BOOTH 마켓 구조 분석 및 React 프로젝트 초기 설정 (0) | 2025.04.02 |
---|---|
📌 Three.js 3D 뷰어 시리즈 후기 및 프로젝트 확장 아이디어 (0) | 2025.04.02 |
Go 언어 기초 문법 배우기 – Admin Dashboard를 위한 준비 단계 (0) | 2025.04.02 |
Analytics Playground 프로젝트 마무리 및 향후 확장 계획 (1) | 2025.04.01 |
📌 Three.js 3D 뷰어 사이트 배포 및 실제 활용 방법 (1) | 2025.04.01 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- AI 자동화
- 프론트엔드
- 백엔드개발
- Webpack
- seo 최적화 10개
- gatsbyjs
- 스마트 컨트랙트
- Prisma
- NestJS
- PostgreSQL
- 관리자
- rag
- Next.js
- Docker
- 백엔드
- nextJS
- nodejs
- kotlin
- SEO최적화
- 개발블로그
- github
- Ktor
- REACT
- LangChain
- 웹개발
- llm
- App Router
- AI챗봇
- fastapi
- CI/CD
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함
반응형