요구사항 + API 분석

Untitled


프로젝트 구성

settings.gradle.kts

rootProject.name = "fastcampus-issue-service"
include("issue-service")
include("user-service")

root/build.gradle.kts

⇒ JVM을 가동시킬 때 kotlin의 어노테이션을 포함시키기 위해 사용되는 플러그인

⇒ web config를 yaml 파일로 작성하고, 그걸 @ConfigurationProperties 로 처리하였는데, 이때 kapt가 필요

plugins {
    ...
    kotlin("kapt") version "1.6.21"
}
...
subprojects {
    ...
    apply(plugin = "kotlin-kapt")
}

user-service/build.gradle.kts

dependencies {

    implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
    implementation("org.springframework.boot:spring-boot-starter-webflux")

    // reactor, coroutine 확장
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")

    // 설정파일을 config class로 관리하기 위해 필요
    kapt("org.springframework.boot:spring-boot-configuration-processor")

    // password 암호화
    implementation("at.favre.lib:bcrypt:0.9.0")

    // R2DBC + h2 database
    runtimeOnly("io.r2dbc:r2dbc-h2")
}

R2DBCConfig.kt

@Configuration
class R2DBCConfig {

    // spring boot 가 올라가면서 bean이 초기화 되고,
    // scripts/schema.sql를 읽어
    // spring data r2dbc에서 초기화 작업이 진행된다.
    @Bean
    fun init(connectionFactory: ConnectionFactory) =
        ConnectionFactoryInitializer().apply { // 설정값 주입
            setConnectionFactory(connectionFactory)
            setDatabasePopulator(
                ResourceDatabasePopulator(
                    ClassPathResource("scripts/schema.sql")
                )
            )
        }
}