Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
root = true

[*.kt]
ktlint_standard_package-name = disabled
ktlint_standard_filename = disabled
11 changes: 0 additions & 11 deletions build-logic/build.gradle.kts

This file was deleted.

17 changes: 0 additions & 17 deletions build-logic/settings.gradle.kts

This file was deleted.

15 changes: 0 additions & 15 deletions build-logic/src/main/kotlin/io/casper/build/TestClass.kt

This file was deleted.

64 changes: 15 additions & 49 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,71 +1,34 @@
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import kotlin.collections.plus

plugins {
kotlin("jvm") version "1.9.23"
kotlin("plugin.spring") version "1.9.23"
id("org.springframework.boot") version "3.4.4"
id("io.spring.dependency-management") version "1.1.7"
id("org.jlleitschuh.gradle.ktlint").version("12.1.1")
id("io.gitlab.arturbosch.detekt") version "1.23.6"
id("casper.documentation-convention")
id(Plugin.KOTLIN_JVM) version PluginVersion.KOTLIN_VERSION apply false
id(Plugin.DETEKT) version PluginVersion.DETEKT_VERSION
id(Plugin.KTLINT) version PluginVersion.KTLINT_VERSION apply false
}

// 서브프로젝트 설정
subprojects {
// 서브프로젝트에 공통 설정 적용
repositories {
mavenCentral()
}
group = "hs.kr.entrydsm"
version = "0.0.1"

apply(plugin = Plugin.KTLINT)

}

tasks.register("checkAll") {
group = "verification"
description = "모든 모듈(includeBuild 포함)에 대해 check 태스크를 실행합니다"

// 루트 프로젝트의 check 태스크에 의존
dependsOn(tasks.named("check"))

// 모든 서브프로젝트의 check 태스크에 의존
subprojects.forEach { subproject ->
dependsOn(subproject.tasks.matching { it.name.startsWith("check") })
}

// build-logic, convention 등 includeBuild 모듈의 check 태스크에 의존
dependsOn(gradle.includedBuilds.map { it.task(":check") })
}

group = "hs.kr.entrydsm"
version = "0.0.1-SNAPSHOT"

dependencies {

implementation("org.springframework.boot:spring-boot-starter")
implementation("org.jetbrains.kotlin:kotlin-reflect")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

kotlin {
jvmToolchain(17)
}

tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
}
}

tasks.withType<Test> {
useJUnitPlatform()
dependsOn(gradle.includedBuilds.map { it.task(":check") })
}

detekt {
config.setFrom(files("detekt.yml"))
buildUponDefaultConfig = false // yml에서 설정한 룰만 허용
parallel = true // 병렬 실행으로 성능 최적화
buildUponDefaultConfig = false
parallel = true
}

tasks.withType<io.gitlab.arturbosch.detekt.Detekt>().configureEach {
Expand All @@ -74,5 +37,8 @@ tasks.withType<io.gitlab.arturbosch.detekt.Detekt>().configureEach {
txt.required.set(false)
}

jvmTarget = ("17") // Detekt가 사용하는 JVM 타겟을 Java 17로 지정
jvmTarget = "17"
}



9 changes: 9 additions & 0 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
plugins {
`kotlin-dsl`
}

repositories {
mavenCentral()
}


54 changes: 54 additions & 0 deletions buildSrc/src/main/kotlin/Dependencies.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
object Dependencies {
// Spring Boot
const val SPRING_BOOT_STARTER = "org.springframework.boot:spring-boot-starter"
const val SPRING_BOOT_STARTER_WEB = "org.springframework.boot:spring-boot-starter-web"
const val SPRING_BOOT_STARTER_DATA_JPA = "org.springframework.boot:spring-boot-starter-data-jpa"
const val SPRING_BOOT_STARTER_DATA_REDIS = "org.springframework.boot:spring-boot-starter-data-redis"
const val SPRING_BOOT_STARTER_SECURITY = "org.springframework.boot:spring-boot-starter-security"
const val SPRING_BOOT_STARTER_VALIDATION = "org.springframework.boot:spring-boot-starter-validation"
const val SPRING_BOOT_STARTER_TEST = "org.springframework.boot:spring-boot-starter-test"

// Kotlin
const val KOTLIN_REFLECT = "org.jetbrains.kotlin:kotlin-reflect"
const val KOTLIN_TEST_JUNIT5 = "org.jetbrains.kotlin:kotlin-test-junit5"

// Database
const val MYSQL_CONNECTOR = "com.mysql:mysql-connector-j"

// JSON
const val JACKSON_MODULE_KOTLIN = "com.fasterxml.jackson.module:jackson-module-kotlin"
const val ORG_JSON = "org.json:json:${DependencyVersion.ORG_JSON}"

// JWT
const val JWT_API = "io.jsonwebtoken:jjwt-api:${DependencyVersion.JWT}"
const val JWT_IMPL = "io.jsonwebtoken:jjwt-impl:${DependencyVersion.JWT}"
const val JWT_JACKSON = "io.jsonwebtoken:jjwt-jackson:${DependencyVersion.JWT}"

// MapStruct
const val MAPSTRUCT = "org.mapstruct:mapstruct:${DependencyVersion.MAPSTRUCT}"
const val MAPSTRUCT_PROCESSOR = "org.mapstruct:mapstruct-processor:${DependencyVersion.MAPSTRUCT}"

// Test
const val JUNIT_PLATFORM_LAUNCHER = "org.junit.platform:junit-platform-launcher"

// gRPC
const val GRPC_NETTY_SHADED = "io.grpc:grpc-netty-shaded:${DependencyVersion.GRPC}"
const val GRPC_PROTOBUF = "io.grpc:grpc-protobuf:${DependencyVersion.GRPC}"
const val GRPC_STUB = "io.grpc:grpc-stub:${DependencyVersion.GRPC}"
const val GRPC_KOTLIN_STUB = "io.grpc:grpc-kotlin-stub:${DependencyVersion.GRPC_KOTLIN}"
const val PROTOBUF_KOTLIN = "com.google.protobuf:protobuf-kotlin:${DependencyVersion.PROTOBUF}"
const val GRPC_TESTING = "io.grpc:grpc-testing:${DependencyVersion.GRPC}"
const val GRPC_SERVER_SPRING_BOOT_STARTER = "net.devh:grpc-server-spring-boot-starter:${DependencyVersion.GRPC_SPRING_BOOT_STARTER}"


//swagger
const val SWAGGER = "org.springdoc:springdoc-openapi-starter-webmvc-ui:${DependencyVersion.SWAGGER}"

// Sentry
const val SENTRY_SPRING_BOOT_STARTER = "io.sentry:sentry-spring-boot-starter-jakarta:${DependencyVersion.SENTRY}"

//resilience4j
const val RESILIENCE4J = "io.github.resilience4j:resilience4j-circuitbreaker:${DependencyVersion.RESILIENCE4J}"
const val RESILIENCE4J_SPRING_BOOT = "io.github.resilience4j:resilience4j-spring-boot3:${DependencyVersion.RESILIENCE4J}"

}
22 changes: 22 additions & 0 deletions buildSrc/src/main/kotlin/DependencyVersion.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
object DependencyVersion {
const val KOTLIN = "1.9.25"
const val SPRING_BOOT = "3.4.4"
const val SPRING_DEPENDENCY_MANAGEMENT = "1.1.7"
const val DETEKT = "1.23.6"
const val KTLINT = "12.1.1"

const val JWT = "0.11.5"
const val ORG_JSON = "20230227"
const val MAPSTRUCT = "1.6.0"

const val GRPC = "1.61.1"
const val GRPC_KOTLIN = "1.4.1"
const val PROTOBUF = "3.25.3"
const val GRPC_SPRING_BOOT_STARTER = "3.1.0.RELEASE"

const val SWAGGER = "2.7.0"

const val SENTRY = "7.14.0"

const val RESILIENCE4J = "2.2.0"
}
11 changes: 11 additions & 0 deletions buildSrc/src/main/kotlin/Plugin.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
object Plugin {
const val KOTLIN_JVM = "org.jetbrains.kotlin.jvm"
const val KOTLIN_SPRING = "org.jetbrains.kotlin.plugin.spring"
const val KOTLIN_KAPT = "org.jetbrains.kotlin.kapt"
const val SPRING_BOOT = "org.springframework.boot"
const val SPRING_DEPENDENCY_MANAGEMENT = "io.spring.dependency-management"
const val DETEKT = "io.gitlab.arturbosch.detekt"
const val KTLINT = "org.jlleitschuh.gradle.ktlint"
const val CASPER_DOCUMENTATION = "casper.documentation-convention"
const val PROTOBUF = "com.google.protobuf"
}
8 changes: 8 additions & 0 deletions buildSrc/src/main/kotlin/PluginVersion.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
object PluginVersion {
const val KOTLIN_VERSION = "1.9.25"
const val SPRING_BOOT_VERSION = "3.4.4"
const val SPRING_DEPENDENCY_MANAGEMENT_VERSION = "1.1.7"
const val DETEKT_VERSION = "1.23.6"
const val KTLINT_VERSION = "12.1.1"
const val PROTOBUF_VERSION = "0.9.4"
}
117 changes: 117 additions & 0 deletions casper-status/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
id(Plugin.KOTLIN_JVM) version PluginVersion.KOTLIN_VERSION
id(Plugin.KOTLIN_SPRING) version PluginVersion.KOTLIN_VERSION
id(Plugin.KOTLIN_KAPT)
id(Plugin.SPRING_BOOT) version PluginVersion.SPRING_BOOT_VERSION
id(Plugin.SPRING_DEPENDENCY_MANAGEMENT) version PluginVersion.SPRING_DEPENDENCY_MANAGEMENT_VERSION
id(Plugin.CASPER_DOCUMENTATION)
id(Plugin.PROTOBUF) version PluginVersion.PROTOBUF_VERSION
}

dependencies {
// 스프링 부트 기본 기능
implementation(Dependencies.SPRING_BOOT_STARTER)

// 코틀린 리플렉션
implementation(Dependencies.KOTLIN_REFLECT)

// 스프링 부트 테스트 도구
testImplementation(Dependencies.SPRING_BOOT_STARTER_TEST)

// 코틀린 + JUnit5 테스트
testImplementation(Dependencies.KOTLIN_TEST_JUNIT5)

// JUnit5 실행 런처
testRuntimeOnly(Dependencies.JUNIT_PLATFORM_LAUNCHER)

// 웹 관련
implementation(Dependencies.SPRING_BOOT_STARTER_WEB)

// 데이터베이스
implementation(Dependencies.SPRING_BOOT_STARTER_DATA_JPA)
implementation(Dependencies.SPRING_BOOT_STARTER_DATA_REDIS)
runtimeOnly(Dependencies.MYSQL_CONNECTOR)

// 보안
implementation(Dependencies.SPRING_BOOT_STARTER_SECURITY)

// 검증
implementation(Dependencies.SPRING_BOOT_STARTER_VALIDATION)

// JSON 처리
implementation(Dependencies.JACKSON_MODULE_KOTLIN)
implementation(Dependencies.ORG_JSON)

// JWT
implementation(Dependencies.JWT_API)
implementation(Dependencies.JWT_IMPL)
runtimeOnly(Dependencies.JWT_JACKSON)

// mapStruct
implementation(Dependencies.MAPSTRUCT)

// kapt
kapt(Dependencies.MAPSTRUCT_PROCESSOR)

// grpc
implementation(Dependencies.GRPC_NETTY_SHADED)
implementation(Dependencies.GRPC_PROTOBUF)
implementation(Dependencies.GRPC_STUB)
implementation(Dependencies.GRPC_KOTLIN_STUB)
implementation(Dependencies.PROTOBUF_KOTLIN)
implementation(Dependencies.GRPC_SERVER_SPRING_BOOT_STARTER)
testImplementation(Dependencies.GRPC_TESTING)

// swagger
implementation(Dependencies.SWAGGER)

// Sentry
implementation(Dependencies.SENTRY_SPRING_BOOT_STARTER)

// Resilience4j
implementation(Dependencies.RESILIENCE4J)
implementation(Dependencies.RESILIENCE4J_SPRING_BOOT)
}

protobuf {
protoc {
artifact = "com.google.protobuf:protoc:${DependencyVersion.PROTOBUF}"
}
plugins {
create("grpc") {
artifact = "io.grpc:protoc-gen-grpc-java:${DependencyVersion.GRPC}"
}
create("grpckt") {
artifact = "io.grpc:protoc-gen-grpc-kotlin:${DependencyVersion.GRPC_KOTLIN}:jdk8@jar"
}
}
generateProtoTasks {
all().forEach {
it.plugins {
create("grpc")
create("grpckt")
}
}
}
}

repositories {
mavenCentral()
}

kotlin {
jvmToolchain(17)
}

tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs += "-Xjsr305=strict"
}
}

tasks.withType<Test> {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package hs.kr.entrydsm.status.global.config

import org.springframework.boot.context.properties.ConfigurationPropertiesScan
import org.springframework.context.annotation.Configuration

/**
* Configuration Properties 스캔 설정 클래스입니다.
* 애플리케이션 전반의 설정 프로퍼티들을 자동으로 스캔하여 등록합니다.
*/
@ConfigurationPropertiesScan("hs.kr.entrydsm.status")
@Configuration
class ConfigurationPropertiesConfig
Loading