📚 Spring Boot(Kotlin) 기본 셋팅 — 전체 시리즈
- 왜 멀티 모듈 구조인가? (아키텍처 철학 & 전체 설계 편)
- API Response 포맷 설계
- 글로벌 예외 처리(GlobalExceptionHandler)
- Swagger(OpenAPI) 설정
- Security(JWT) 기본 골격
- JWT TokenProvider
- Redis 설정
- Validation 설정
- Logging + MDC(traceId) 설정
- application.yml 프로필 분리 (local/dev/prod)
- 멀티모듈 + JPA 기본 구조 정리
- 완성된 프로젝트 템플릿 Git 공유← 지금 글
이 글은 “Spring Boot(Kotlin) 기본 셋팅 — 12편 시리즈”의 마지막 글입니다.
앞선 글들을 통해 멀티 모듈 구조 → API 설계 → 예외 처리 → 보안 → 로깅 → JPA까지 실제 운영 수준의 골격을 단계별로 완성했습니다.
이제 그 모든 내용을 하나의 프로젝트로 Git을 통해 공유합니다.
🎁 1. 템플릿 다운로드
GitHub에 올린 템플릿을 다운로드해서 자유롭게 수정하여 사용하시면 됩니다.
https://github.com/jaemoi/springboot-kotlin-initial-template
GitHub - jaemoi/springboot-kotlin-initial-template
Contribute to jaemoi/springboot-kotlin-initial-template development by creating an account on GitHub.
github.com
🔧 2. 템플릿에서 미리 적용된 내용
springboot_initial_setup/
├── api/
├── application/
├── batch/ (선택)
├── build.gradle.kts
├── settings.gradle.kts
└── ...
✔ 멀티모듈(api / application / batch)
- controller / service / repository 계층 분리
- module 간 의존성 명확하게 설정
- DTO → ServiceModel → Entity 구조 설계
✔ API Response 포맷 통일
- ApiResponse<T> 기본 구조 포함
- 성공/실패 포맷 일관화
- 성공/실패 포맷 일관화
✔ 글로벌 예외 처리
- @RestControllerAdvice 기반 통합 핸들러 구성
- 비즈니스/Validation/서버 내부 예외 처리
✔ JWT Security 기본 골격
- TokenProvider
- JwtAuthenticationFilter
- Custom AccessDeniedHandler / EntryPoint
✔ Swagger(OpenAPI) 기본 페이지 적용
✔ Redis 기본 설정
✔ Validation + 글로벌 처리
✔ MDC(traceId / eventId / userId / clientIp) 기반 로깅 필터
- 모든 요청에 unique trace-id 자동 삽입
- 운영환경 디버깅/로그 분석에 강력한 형태
✔ application.yml 프로필 분리
- local / dev / prod 분리
- 환경별 설정 독립
🏗 3. 템플릿에서 수정해야 하는 부분
✔ 1) 패키지 경로 변경
템플릿은 com.example 로 되어 있으므로, 회사/프로젝트 도메인에 맞게 변경하세요.
✔ 2) DB 설정 변경
공유 목적 때문에 기존 환경 변수(LOCAL_DB_URL 등)를 삭제하고 임시로 H2 DB를 사용하도록 세팅했습니다.
spring:
datasource:
url: jdbc:mysql://~
username: xxx
password: xxx
실제 개발 시에는 위와 같이 DB 설정을 다시 연결해주세요.
✔ 3) JWT secret key 교체
샘플 값이 포함되어 있으니 반드시 새로 생성해서 교체하세요.
✔ 4) Swagger 문구/프로젝트명
info.title, description 등은 브랜드에 맞게 수정할 수 있습니다.
✔ 5) Redis 사용 여부
프로젝트 성격에 따라 사용하지 않는다면 의존성 제거 가능.
🧪 4. 실행 방법
Local 환경 실행
프로젝트는 application-local.yml로 실행되게 설정되어있습니다.
IntelliJ의 Run 버튼으로도 실행되지만,
multi-module 구조에서는 IDE가 run 구성을 제대로 못 잡을 가능성이 있으므로
공식 실행 방법은 Gradle의 bootRun 명령을 기준으로 안내합니다.
$ ./gradlew :api:bootRun
환경 변수 필요 없이 바로 실행되도록, 내장 H2 + 내장 Tomcat + 간단한 JWT 구조로 설정되어 있습니다.
💡 5. 이 템플릿을 만든 이유
처음 스프링을 시작할 때 가장 어려운 부분 중 하나는
“도대체 무엇부터 설정해야 하지?” 하는 고민입니다.
예제 코드는 많지만, 실서비스 기반 구조를 갖춘 템플릿을 찾기가 어려웠습니다.
그래서:
- 처음부터 확장성이 있도록
- 팀 단위 협업에서도 빠르게 이해할 수 있도록
- 운영환경(log, security, 예외처리 등)까지 고려할 수 있도록
위 모든 내용을 바로 쓸 수 있는 형태로 정리했습니다.
아직은 많이 부족한 개발자여서 공유하는 템플릿의 퀄리티가 부족할 수 있습니다. 개선 사항을 댓글에
자유롭게 말씀해주시면 고민해보고 반영하도록 하겠습니다. 함께 더 나은 프로그래밍을 위해 같이 고민하고
소통하면 좋겠습니다.
🙌 6. 시리즈를 만들면서 ..
저는 컴퓨터 프로그래밍을 전공하지 않아서 개발자의 길을 걷기 시작하기까지 남들보다
더 많은 고생을 해야했습니다. 그래서 저와 같이 프로그래밍 개발을 이제 막 시작하는 분들에게
조금이나마 도움을 주고자 본 시리즈를 제작하게 되었습니다.
오늘도 즐거운 코딩하세요. 감사합니다.
'개발' 카테고리의 다른 글
| 공간정보 뷰에서 데이터가 없으면 지점이 사라지는 문제와 SQL 튜닝 과정 — KEEP (DENSE_RANK LAST …) 활용하기 (0) | 2026.01.07 |
|---|---|
| HTTP 통신의 실제 모습 – 라이브러리가 감추고 있던 바이트 스트림 처리 (0) | 2025.12.09 |
| Spring Boot(Kotlin) 기본 셋팅 — 11편. 멀티모듈 + JPA 기본 구조 정리 (0) | 2025.11.27 |
| Spring Boot(Kotlin) — 10편. application.yml 프로필 분리 (local/dev/prod) (0) | 2025.11.27 |
| Spring Boot(Kotlin) — 9편. Logging + MDC(traceId) 설정 (0) | 2025.11.27 |