Skip to content
/ common Public

๐Ÿ“Œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์šฉ ๊ณตํ†ต ๋กœ์ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Notifications You must be signed in to change notification settings

dnya0/common

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

35 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Common Library ๐Ÿš€

Spring Boot Kotlin JVM

Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ ์ธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ค„์ด๊ณ , ์ผ๊ด€๋œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ—„๏ธ Core ๋ชจ๋“ˆ

  • BaseEntity ํด๋ž˜์Šค: JPA ์—”ํ‹ฐํ‹ฐ์šฉ ๊ณตํ†ต ๋ฒ ์ด์Šค ํด๋ž˜์Šค (ID, ์ƒ์„ฑ์ผ์‹œ, ์ˆ˜์ •์ผ์‹œ)
  • ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ: AggregateRoot์™€ DomainEvent๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜
  • Domain ์ถ”์ƒํ™”: ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ œ๊ณต

๐Ÿ”ด Redis ๋ชจ๋“ˆ

  • ์บ์‹œ ์œ ํ‹ธ๋ฆฌํ‹ฐ: Redis ๊ธฐ๋ฐ˜ ์บ์‹ฑ ์ง€์›
  • ๋ถ„์‚ฐ ๋ฝ: Redis๋ฅผ ํ™œ์šฉํ•œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ ๋™๊ธฐํ™”
  • ์„ธ์…˜ ๊ด€๋ฆฌ: Redis ๊ธฐ๋ฐ˜ ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€

๐Ÿ“Š AOP ๋ชจ๋“ˆ

  • ๋กœ๊น… AOP: ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ๊ฐ„, ํŒŒ๋ผ๋ฏธํ„ฐ, ๊ฒฐ๊ณผ ์ž๋™ ๋กœ๊น…
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ: ์ปค์Šคํ…€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ์ „์—ญ ์˜ˆ์™ธ ํ•ธ๋“ค๋ง

๐Ÿ› ๏ธ Utils ๋ชจ๋“ˆ

  • 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}")     // ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
}

๐ŸŽฏ ์‚ฌ์šฉ ์˜ˆ์‹œ

BaseEntity ์‚ฌ์šฉ

@Entity
class User : BaseEntity() {
    var name: String = ""
    var email: String = ""
}

๋„๋ฉ”์ธ ์ด๋ฒคํŠธ ์‚ฌ์šฉ

class Order : 
    BaseEntity(),
    AggregateRoot by DomainEventDelegate() {
    
    fun completeOrder() {
        // ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
        registerEvent(OrderCompletedEvent(this.id!!))
    }
}

AOP ๋กœ๊น… ์‚ฌ์šฉ

@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

About

๐Ÿ“Œ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์šฉ ๊ณตํ†ต ๋กœ์ง ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages