Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ฐ๋ณต์ ์ธ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์ค์ด๊ณ , ์ผ๊ด๋ ์ํคํ ์ฒ ํจํด์ ์ ๊ณตํฉ๋๋ค.
- BaseEntity ํด๋์ค: JPA ์ํฐํฐ์ฉ ๊ณตํต ๋ฒ ์ด์ค ํด๋์ค (ID, ์์ฑ์ผ์, ์์ ์ผ์)
- ๋๋ฉ์ธ ์ด๋ฒคํธ ์์คํ : AggregateRoot์ DomainEvent๋ฅผ ํตํ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
- Domain ์ถ์ํ: ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ ๊ณต
- ์บ์ ์ ํธ๋ฆฌํฐ: Redis ๊ธฐ๋ฐ ์บ์ฑ ์ง์
- ๋ถ์ฐ ๋ฝ: Redis๋ฅผ ํ์ฉํ ๋ถ์ฐ ํ๊ฒฝ ๋๊ธฐํ
- ์ธ์ ๊ด๋ฆฌ: Redis ๊ธฐ๋ฐ ์ธ์ ์คํ ๋ฆฌ์ง
- ๋ก๊น AOP: ๋ฉ์๋ ์คํ ์๊ฐ, ํ๋ผ๋ฏธํฐ, ๊ฒฐ๊ณผ ์๋ ๋ก๊น
- ํธ๋์ญ์ ๊ด๋ฆฌ: ์ปค์คํ ํธ๋์ญ์ ์ฒ๋ฆฌ
- ์์ธ ์ฒ๋ฆฌ: ์ ์ญ ์์ธ ํธ๋ค๋ง
- API Response: ํ์คํ๋ REST API ์๋ต ํ์
- ํ์ด์ง ์ง์: ํ์ด์ง๋ค์ด์ ์ ์ํ ์ ํธ๋ฆฌํฐ
- ์์ธ ํด๋์ค: ๊ณตํต ์์ธ ์ฒ๋ฆฌ ํด๋์ค๋ค
build.gradle.kts์ ๋ค์์ ์ถ๊ฐํ์ธ์:
repositories {
maven { url = uri("https://jitpack.io") }
}
dependencies {
// ๋๋ ํ์ํ ๋ชจ๋๋ง ์ ํ์ ์ผ๋ก ์ฌ์ฉ
implementation("com.github.dnya0.common:core:${version}") // JPA ์ํฐํฐ, ๋๋ฉ์ธ ์ด๋ฒคํธ
implementation("com.github.dnya0.common:redis:${version}") // Redis ์บ์, ๋ถ์ฐ ๋ฝ
implementation("com.github.dnya0.common:core-aop:${version}") // AOP ๋ก๊น
implementation("com.github.dnya0.common:utils:${version}") // ์ ํธ๋ฆฌํฐ ํจ์
}@Entity
class User : BaseEntity() {
var name: String = ""
var email: String = ""
}class Order :
BaseEntity(),
AggregateRoot by DomainEventDelegate() {
fun completeOrder() {
// ๋น์ฆ๋์ค ๋ก์ง
registerEvent(OrderCompletedEvent(this.id!!))
}
}@Service
class UserService {
@Loggable
fun createUser(request: CreateUserRequest): User {
// ๋ฉ์๋ ์คํ ์๊ฐ๊ณผ ํ๋ผ๋ฏธํฐ๊ฐ ์๋์ผ๋ก ๋ก๊น
๋ฉ๋๋ค
return userRepository.save(User(...))
}
}common/
โโโ core/ # ํต์ฌ ๋๋ฉ์ธ ๋ชจ๋ธ ๋ฐ ์ด๋ฒคํธ
โโโ core-aop/ # AOP ๊ธฐ๋ฐ ํก๋จ ๊ด์ฌ์ฌ
โโโ redis/ # Redis ์ฐ๋ ์ ํธ๋ฆฌํฐ
โโโ utils/ # ๊ณตํต ์ ํธ๋ฆฌํฐ
โโโ buildSrc/ # Gradle ๋น๋ ๋ก์ง
- JDK: 17 ์ด์
- Kotlin: 2.3.0
- Spring Boot: 3.5.x
- Gradle: 9.0.0
# ํ๋ก์ ํธ ๋น๋
./gradlew build
# ํ
์คํธ ์คํ
./gradlew check
# ๋ก์ปฌ Maven ์ ์ฅ์์ ๋ฐฐํฌ
./gradlew publishToMavenLocal
# ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ์ ๋ฆฌ
./gradlew clean