본문 바로가기
🍃 Language/Java

[Webflux + Kotlin] Intellij에서 gradle로 Kotiln기반 Spring webflux 프로젝트시작하기

by 카프리썬_ 2022. 2. 1.
728x90
728x90

이 내용을 어떤 카테고리에 넣어야할지도 의문이 들었다.

그리고 관련된 내용을 검색해봐도 항상 내가 원하는 모든 조건을 만족할만한 예제가 없었다. ㅠㅠㅠ

내가 원하는 조건은 아래와 같다.  그리고 앞으로도 이 조건대로 kotiln기반 Spring webflux를 스터디 해볼 예정이다. 

  • IDE: Intellj 
  • Build Tool : gradle
  • Language : Kotiln
  • Framework : Spring5 (Webflux)

 

하 이 조건대로 코틀린 예시까지 있는 책 어디 없나 진짜..(spring공식문서뿐이네;)

보통 다 자바언어로 구현하거나 maven프로젝트가 많다..그래서 내가 원하는 조건의 프로젝트 예시는 거의 없다..흑

 

webflux는 reactor라는 라이브러리를 사용해서 비동기처리를 진행하는데, 자바나 코틀린 둘다 사용할 수 있다.

나는 코틀린을 사용할거고, 나중에 최종목표는 webflux 방식을 코틀린 코루틴으로 변경하는것이다. 

이번엔 spring webflux helloworld를 찍어보려고 한다. 본격적으로 실습! 

내가 이어서 보면 유튜브 메타코딩의 spring boot weblflux강좌 는 Spring webflux 프로젝트를 maven을 사용했다.

 

대부분 예제를 살펴보니까 다 maven으로 webflux프로젝트를 시작하고 있었다. (나는 메이븐이 싫어!!!)

근데 나는 gradle로 해보고 싶어서.. gradle기반 Spring webflux 프로젝트로 구성하였다. 

 

728x90

New Project 생성

Intellj > New > New Project > Spring Initializr로 프로젝트를 바로 생성할 수 있다.

  • 프로젝트 언어 : Kotiln
  • 프로젝트 타입 : gradle
  • 프로젝트 메타데이터 - group : build.gradle 파일의 group 정보로 들어갈 내용으로 자바의 root 패키지명
  • 프로젝트 메타데이터 - artifact : 프로젝트명
  • SDK 버전 : 1.8
  • 자바 버전 : 8

 

참고로 java11버전은 sdk 1.8을 지원하지 않는다. 그래서 나는 자바8버전, sdk 1.8버전을 선택했다. 

 

Dependecies 선택

참고로 spring boot1에서는 reactive가 지원되지 않기 때문에 스프링 버전은 2.6.3 을 사용한다. 

  • 스프링 버전 : 2.6.3
  • Reactive web : embedded Netty + Spring WebFlux가 있는 dependency
  • Thymeleaf template engine
  • Lombok 
  • Spring Data Reactive Redis

 

심플하게 Webflux를 사용할 수 있는 dependencyReactive web 이다.

참고로 ,redis랑 연동해서 테스트해보려고 redis 의존성도 미리 추가했다.

그리고 어디에서 봤는데 reactive web이랑 그냥 spring web이랑 같이 추가하면 경로가 꼬일수 있다고 한다.

믿거나 말거나이지만 그래도 호옥시 모르니까 Reactive web 하나만 추가하도록!

 

그럼 아래와 같이 build.gradle.kt 파일에 implementation해서 디팬던시가 추가되었을 것이다.

dependencies {
   implementation("org.springframework.boot:spring-boot-starter-data-redis-reactive")
   implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
   implementation("org.springframework.boot:spring-boot-starter-webflux")
   implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
   implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
   implementation("org.jetbrains.kotlin:kotlin-reflect")
   implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
   implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
   compileOnly("org.projectlombok:lombok")
   annotationProcessor("org.projectlombok:lombok")
   testImplementation("org.springframework.boot:spring-boot-starter-test")
   testImplementation("io.projectreactor:reactor-test")
}

 

728x90
반응형