02-reusable-code-java โ Java/Spring Boot ์ฌ์ฌ์ฉ ํจํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Spring Boot 3+ / JPA / Spring Security 6+ ๊ธฐ๋ฐ ๋ฒ์ฉ ํจํด
๊ฐ์
๋ค์ํ ํ๋ก์ ํธ์์ ์ถ์ถํ ๋ฒ์ฉ Java/Spring Boot ํจํด์ ๊ด๋ฆฌํฉ๋๋ค.
ํจํค์ง๋ com.example.app.*์ผ๋ก ํต์ผ๋์ด ์์ผ๋ฉฐ, ์ค์ ํ๋ก์ ํธ์ ์ ์ฉ ์ ํจํค์ง๋ช
์ ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํฉ๋๋ค.
ํด๋ ๊ตฌ์กฐ
| ํด๋ | ์ค๋ช
| ํ์ผ ์ |
|---|
01-domain/ | JPA ์ํฐํฐ ๊ธฐ๋ณธ ํด๋์ค | 3 |
02-config/ | Spring Boot ์ค์ ํจํด (Security, Cache, MVC, JPA ๋ฑ) | 9 |
03-security/ | Spring Security ์ธ์ฆ/์ธ๊ฐ ํจํด | 4 |
04-exception/ | ์์ธ ์ฒ๋ฆฌ ํจํด (GlobalExceptionHandler ๋ฑ) | 4 |
05-util/ | ์ ํธ๋ฆฌํฐ (ํ์ผ ์
๋ก๋, ํจ์ค์๋, ํด๋ท SSO) | 5 |
06-service/ | ๋ฒ์ฉ ์๋น์ค ํจํด (๊ฐ์ฌ ๋ก๊ทธ, ํ์ผ ๊ด๋ฆฌ, ๋ฌธ์ ๋ด๋ณด๋ด๊ธฐ) | 5 |
07-testing/ | ํตํฉ ํ
์คํธ ๋ฒ ์ด์ค ํด๋์ค | 1 |
ํ์ผ ์ธ๋ฑ์ค
01-domain
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
BaseTimeEntity.java | JPA ๊ฐ์ฌ ๊ธฐ๋ณธ ํด๋์ค (@CreatedDate/@LastModifiedDate) | Spring Data JPA |
AuditLog.java | ๊ฐ์ฌ ๋ก๊ทธ ์ํฐํฐ (UUID PK, entityType+entityId ๋ณตํฉ ์ธ๋ฑ์ค) | JPA, Lombok |
AdminSetting.java | ๊ด๋ฆฌ์ ์ค์ KV ์ํฐํฐ (UNIQUE settingKey, ๊ณต์ง/๋น๋ฐ๋ฒํธ ์์) | JPA, Lombok |
02-config
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
SecurityConfig.java | Spring Security 6 ํตํฉ ์ค์ (CSRF, ์ญํ ๊ธฐ๋ฐ, ์ธ์
๊ด๋ฆฌ) | Spring Security 6+ |
CachingConfig.java | Caffeine ์บ์ ์ค์ | Caffeine, Spring Cache |
RestTemplateConfig.java | HTTP ํด๋ผ์ด์ธํธ ํ์์์ ์ค์ | Spring Web |
FileUploadConfig.java | ์
๋ก๋ ๋๋ ํ ๋ฆฌ ์ด๊ธฐํ | Spring Core |
GlobalModelAdvice.java | ์ ์ญ ์ฌ์ฉ์ ์ ๋ณด ๋ชจ๋ธ ์ฃผ์
| Spring MVC, Spring Security |
WebMvcConfig.java | ์ ์ ๋ฆฌ์์ค ํธ๋ค๋ง + ์บ์ ์ค์ | Spring MVC |
JpaConfig.java | JPA Auditing ํ์ฑํ | Spring Data JPA |
BreadcrumbAdvice.java | URLโ๋ผ๋ฒจ ๋งคํ ์ ์ญ ๋ธ๋ ๋ํฌ๋ผ (์ ์ ๋งต + ํ๋ฆฌํฝ์ค ๋์ ๋งค์นญ) | Spring MVC |
AnnouncementAdvice.java | AdminSetting ๊ธฐ๋ฐ ์ ์ญ ๊ณต์ง ์ฃผ์
(active/text/type 3๊ฐ KV) | Spring MVC, JPA |
03-security
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
AjaxAwareAuthenticationEntryPoint.java | AJAX ์์ฒญ ๊ฐ์ง โ JSON 401 ๋ฐํ | Spring Security |
CustomUserDetails.java | UserDetails ํ์ฅ (์ง๊ธ, ๋ถ์, ์ธ์ฆ์ ํ) | Spring Security |
CustomUserDetailsService.java | UserDetailsService ๊ตฌํ์ฒด | Spring Security, JPA |
CustomAuthenticationSuccessHandler.java | ์ญํ ๊ธฐ๋ฐ ๋ก๊ทธ์ธ ํ ๋ฆฌ๋ค์ด๋ ํธ | Spring Security |
04-exception
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
GlobalExceptionHandler.java | @ControllerAdvice ์ค์ ์๋ฌ ํธ๋ค๋ง | Spring MVC |
BusinessException.java | ๋น์ฆ๋์ค ๋ก์ง ์ปค์คํ
์์ธ | - |
ResourceNotFoundException.java | ๋ฆฌ์์ค ๋ฏธ๋ฐ๊ฒฌ ์์ธ | - |
UnauthorizedException.java | ์ธ์ฆ/๊ถํ ์ค๋ฅ ์์ธ | - |
05-util
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
FileUtil.java | ๋ณด์ ํ์ผ ์
๋ก๋ (๊ฒฝ๋ก ํ์ ๋ฐฉ์ง, UUID ํ์ผ๋ช
) | Spring Core, Java NIO |
PasswordUtil.java | BCrypt ๋ํผ | Spring Security |
polnet/SeedCBC.java | KISA SEED-CBC ๋ธ๋ก ์ํธ ์ ์ฒด ๊ตฌํ (SS0-SS3 S-Box, KC ์์) | ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง |
polnet/MakeSeed.java | SeedCBC Base64 ๋ํผ (classpath ํค ํ์ผ ๋ก๋, ์/๋ณตํธํ) | SeedCBC |
polnet/MakePolnetNo.java | ํด๋ท SSO ํ ํฐ ์์ฑ/๊ฒ์ฆ (userno+ํ์์คํฌํ+IP, TIMEOUT/NOIP/NODATA) | MakeSeed, Lombok |
06-service
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
AuditLogService.java | ๋น๋๊ธฐ ๊ฐ์ฌ ๋ก๊น
+ ์ค์ผ์ค ์ ๋ฆฌ | Spring @Async, @Scheduled, JPA |
FileUploadService.java | ํ์ผ ์
๋ก๋/์ญ์ + JSON ์ฒจ๋ถ ์ง๋ ฌํ | Jackson, FileUtil |
HwpxExportService.java | HWPX(ZIP+XML) ๋ฌธ์ ์์ฑ (OWPML ํ์ค, ์์ Java) | ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง |
SurveyExportService.java | ์ค๋ฌธ ๋ค์ค ํฌ๋งท ๋ด๋ณด๋ด๊ธฐ (Excel/CSV/TXT/PDF) | Apache POI, iText7 |
SinmungoExportService.java | ๋ฏผ์ JPA Specification ํํฐ๋ง + Excel 4์ํธ ํต๊ณ ๋ด๋ณด๋ด๊ธฐ | Apache POI, Spring Data JPA |
07-testing
| ํ์ผ | ์ค๋ช
| ์์กด์ฑ |
|---|
BaseE2ETest.java | MockMvc E2E ํตํฉ ํ
์คํธ ๋ฒ ์ด์ค (@SpringBootTest, H2, @Transactional, ํฌํผ) | Spring Boot Test, Spring Security Test, H2 |
์ฌ์ฉ๋ฒ
- ํ์ํ ํจํด ํ์ผ์ ํ๋ก์ ํธ์ ๋ณต์ฌ
- ํจํค์ง๋ช
com.example.app โ ์ค์ ํ๋ก์ ํธ ํจํค์ง๋ก ๋ณ๊ฒฝ
- import ๊ฒฝ๋ก ์์
- ํ๋ก์ ํธ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ปค์คํฐ๋ง์ด์ฆ
ํ์ ์์กด์ฑ (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.github.ben-manes.caffeine:caffeine'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}
ํธํ์ฑ
| ํญ๋ชฉ | ์ต์ ๋ฒ์ |
|---|
| Java | 21+ |
| Spring Boot | 3.0+ |
| Spring Security | 6.0+ |
์ถ์ถ ์ด๋ ฅ
| ๋ ์ง | ์ถ์ฒ | ์ถ์ถ ํญ๋ชฉ |
|---|
| 2026-03-08 | kcsi-smpa-internal | ๋๋ฉ์ธ 1, ์ค์ 7, ๋ณด์ 4, ์์ธ 4, ์ ํธ 2, ์๋น์ค 2 (์ด 20๊ฐ) |
| 2026-03-22 | kcsi-smpa-internal | ๋๋ฉ์ธ 2 (AuditLog, AdminSetting), ์ค์ 2 (BreadcrumbAdvice, AnnouncementAdvice), ์ ํธ 3 (polnet/ SeedCBC, MakeSeed, MakePolnetNo), ์๋น์ค 3 (HwpxExportService, SurveyExportService, SinmungoExportService), ํ
์คํ
1 (BaseE2ETest) โ ์ ๊ท polnet/, 07-testing/ ๋๋ ํ ๋ฆฌ ํฌํจ (์ด 11๊ฐ) |