[Spring Webflux + R2DBC] 게시판 CRUD 예제 (1)

hans·2021년 11월 17일
7

Webflux

목록 보기
1/1
post-thumbnail

본 글은 Spring MVC 개발 경험을 전제로 작성되었습니다.

들어가기 앞서

신규 개발 프로젝트에 Spring Webflux 도입을 검토하게 되어 간단하게 구현해본 토이 프로젝트를 공유해보고자 한다.

아직 상용화하기에는 시기상조인, 비교적 최근에 개발된 프레임워크라서 그런지 따라해볼만한 예제의 부재를 느껴 처음으로 작성하게 된 포스트이다. 이론 및 개념적인 요소에 대한 포스팅은 이미 많기에 링크로 첨부하거나 생략할 것이며, Reactive 프로그램에 대해 가볍게 경험하고자 하는 목적으로 실제 동작하는 코드(돌면 장땡) 위주로 풀어나갈 예정이다.

개발 환경

IDE: IntelliJ
Language: JAVA 11
Database: Postgres / R2DBC

프로젝트 구조


일반 MVC 구조와 동일하다. HTTP EndPoint 노출을 @Controller로 채택하였으나, Router Function 역시 지원한다.

Router Function은 Java에서 딱히 이점이 없는 것 같아(Swagger까지 사용하면 코드만 길어진다) ?장에서 간단한 예시만 다루어볼 예정이다.

프로젝트 생성

필자는 IntelliJ를 사용하였다.

환경 세팅

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'io.r2dbc:r2dbc-postgresql'
    runtimeOnly 'org.postgresql:postgresql'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
    implementation 'org.springdoc:springdoc-openapi-webflux-ui:1.5.12'
}

Swagger

간편한 API 호출을 위해 우선 swagger를 추가하였다. gradle dependency에 'org.springdoc:springdoc-openapi-webflux-ui:{버전}' 만 추가해주면 docket과 여타 세팅 없이 바로 사용 가능하다(편-안).

url : {ip주소}:{port}/webjars/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/

필수요소는 아니지만 Swagger 페이지를 커스터마이징하기 위해 메인 클래스에 @OpenAPIDefinition 어노테이션을 추가하였다.

WebfluxBoardApplication.java

@SpringBootApplication
@OpenAPIDefinition(info = @Info(title = "Webflux board II", version = "0.0", description = "Created 2021/11/12"))
public class WebfluxBoardApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebfluxBoardApplication.class, args);
    }

}

DB

R2DBC와 지원 데이터베이스 목록은 공식 문서 참고
Mysql로 구현하고자 하는 경우 다음 블로그 참고

필자는 docker의 postgres 이미지를 이용하였다.

사용하는 DB에 맞게 gradle에 dependency 추가 후에 application.yml에서 설정해준다. bean을 생성하여 connectionFactory를 구성하는 것도 가능하다.

application.yml

spring:
  r2dbc:
    url: r2dbc:postgresql://localhost:9005/webflux #?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Seoul
    username: xxx
    password: xxx
    pool:
      max-size: 100

ddl은 지원하지 않는다.

Auditing 기능을 사용하기 위해 DatabaseConfig 클래스를 생성한다.

DatabaseConfig.java

import org.springframework.context.annotation.Configuration;
import org.springframework.data.r2dbc.config.EnableR2dbcAuditing;

@Configuration
@EnableR2dbcAuditing
public class DatabaseConfig {
}

마치며

벌써 기본적인 세팅은 끝났다. 이제 컨트롤러, 서비스, 레포지토리와 엔터티만 구현하면 된다.
다음 장에서 다룰 내용은

profile
응애 개발자

0개의 댓글