728x90
Module 생성

Main
@SpringBootApplication
@ConfigurationPropertiesScan //프로퍼티 스캔
class FastcampusUserServiceApplication {
}
fun main(args: Array<String>) {
runApplication<FastcampusUserServiceApplication>(*args)
}
Build.gradle
plugins {
id("java")
}
group = "com.fastcampus"
version = "0.0.1-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
implementation("org.springframework.boot:spring-boot-starter-webflux")
implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
kapt("org.springframework.boot:spring-boot-configuration-processor")
implementation("at.favre.lib:bcrypt:0.9.0")
runtimeOnly("io.r2dbc:r2dbc-h2")
}
tasks.getByName<Test>("test") {
useJUnitPlatform()
}
- R2DBC, coroutine, reactor 관련 의존성을 추가한다.
- @ConfigurationPropertiesScan을 붙인다(패키지를 기반으로 @ConfigurationProperties가 등록된 클래스들을 찾아 값들을 주입하고 빈으로 등록해준다)
R2DBC 설정
@Configuration
class R2DBCConfig {
@Bean
fun init(connectionFactory: ConnectionFactory) =
ConnectionFactoryInitializer().apply {
setConnectionFactory(connectionFactory)
setDatabasePopulator(
ResourceDatabasePopulator(
ClassPathResource("scripts/schema.sql")
)
)
}
}
schema.sql
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
id bigint NOT NULL AUTO_INCREMENT,
email varchar(100),
username varchar(50),
password varchar(500),
profile_url varchar(500),
created_at timestamp default NOW(),
updated_at timestamp default NOW(),
primary key (id)
)
- R2DBC 같은 경우 자동으로 DDL 쿼리를 실행시켜 주지 않기 때문에 scripts/schema.sql 파일을 읽도록 설정해 주어야 한다.
WebConfig
@Configuration
class WebConfig : WebFluxConfigurer {
override fun addCorsMappings(registry: CorsRegistry) {//CORS 관련 설정
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.maxAge(3600)
}
}
- CORS 문제를 해결하기 위해 WebFluxConfigurer를 상속받는 클래스를 생성한 뒤, CORS 관련 설정을 한다.
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > 회원 인증 서비스 개발하기' 카테고리의 다른 글
| 회원가입 (0) | 2022.12.14 |
|---|---|
| JWT 기반 인증 구현 (0) | 2022.12.13 |
| 토큰 기반 인증 (0) | 2022.12.13 |
| 공통 에러 처리 (0) | 2022.12.13 |
| API 스펙 정의 (0) | 2022.12.13 |