[Spring Webflux + R2DBC] 게시판 CRUD 예제 (1)
본 글은 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 {
}
마치며
벌써 기본적인 세팅은 끝났다. 이제 컨트롤러, 서비스, 레포지토리와 엔터티만 구현하면 된다.
다음 장에서 다룰 내용은
Author And Source
이 문제에 관하여([Spring Webflux + R2DBC] 게시판 CRUD 예제 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hans96/Spring-Webflux-R2DBC-게시판-CRUD-예제-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)