실무 프로젝트로 배우는 Kotlin & Spring/회원 인증 서비스 개발하기

프로젝트 구성하기

webmaster 2022. 12. 13. 15:14
728x90

Module 생성

IntelliJ 모듈 생성

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