Real Vectorism. 훨씬 더 입체적으로...
스프링 부트에서 R2DBC 사용해보기 본문
반응형
0. 스프링 부트 프로젝트 생성
1. 메이븐에 다음 종속성을 추가. (예시는 마리아DB, 현재 각 데이터베이스 별로 R2DBC 지원여부가 다를 수 있으니 사용 전 확인필요. 오라클은 검색결과 아직 대응중인듯.)
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-r2dbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
<version>2.4.4</version>
<!-- 스프링 부트 버전과 오버라이딩 될 수 있으니 version 구문은 빼는것이 관리측면에서 도움될 듯. -->
</dependency>
<!-- https://mvnrepository.com/artifact/org.mariadb/r2dbc-mariadb -->
<dependency>
<groupId>org.mariadb</groupId>
<artifactId>r2dbc-mariadb</artifactId>
<version>1.0.1</version>
</dependency>
2. application.properties 에 다음과 같은 프로퍼티 추가
jdbc 방식 (R2DBC를 사용할 경우 추가할 필요 없음)
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://{host}:{port}/{database}
spring.datasource.username={username}
spring.datasource.password={password}
r2dbc 방식
spring.r2dbc.url=r2dbc:mariadb://{host}:{port}/{database}
spring.r2dbc.username={username}
spring.r2dbc.password={password}
query 의 작동원리 확인용 로깅
logging.level.org.springframework.r2dbc.core.DefaultDatabaseClient=debug
3. JPA처럼 데이터베이스에 접근하기 위한 객체유형을 선언 후 Mapper 객체로 연결
-- MARIADB
CREATE TABLE SYSTEM_USER (
IDX INT PRIMARY KEY AUTO_INCREMENT COMMENT '일련번호',
USERNAME VARCHAR(50) UNIQUE NOT NULL COMMENT '사용자명',
PASSWORD VARCHAR(100) NOT NULL COMMENT '패스워드',
NAME VARCHAR(50) DEFAULT NULL COMMENT '이름',
MAIL VARCHAR(500) DEFAULT NULL COMMENT '메일주소',
IS_PUBLIC VARCHAR(1) DEFAULT 'Y' COMMENT '사용여부',
IS_DELETE VARCHAR(1) DEFAULT 'N' COMMENT '삭제여부',
REGDATE DATETIME DEFAULT NOW() COMMENT '생성일자'
) ENGINE=INNODB CHARSET=UTF8 COMMENT='사용자 정보 테이블';
-- ORACLE
CREATE SEQUENCE SEQ_SYSTEM_USER
INCREMENT BY 1
START WITH 0
NOMINVALUE
NOMAXVALUE
NOCACHE;
CREATE TABLE SYSTEM_USER (
IDX NUMBER PRIMARY KEY,
USERNAME VARCHAR2(50) UNIQUE NOT NULL,
PASSWORD VARCHAR2(100) NOT NULL,
NAME VARCHAR2(50) DEFAULT NULL,
MAIL VARCHAR2(500) DEFAULT NULL,
IS_PUBLIC CHAR(1) DEFAULT 'Y',
IS_DELETE CHAR(1) DEFAULT 'N',
REGDATE DATE DEFAULT SYSDATE
)
COMMENT ON TABLE SYSTEM_USER IS '사용자 정보 테이블';
COMMENT ON COLUMN SYSTEM_USER.IDX IS '일련번호';
COMMENT ON COLUMN SYSTEM_USER.USERNAME IS '사용자명';
COMMENT ON COLUMN SYSTEM_USER.PASSWORD IS '패스워드';
COMMENT ON COLUMN SYSTEM_USER.NAME IS '이름';
COMMENT ON COLUMN SYSTEM_USER.MAIL IS '메일주소';
COMMENT ON COLUMN SYSTEM_USER.IS_PUBLIC IS '공개여부';
COMMENT ON COLUMN SYSTEM_USER.IS_DELETE IS '삭제여부';
COMMENT ON COLUMN SYSTEM_USER.REGDATE IS '생성일자';
@Table("SYSTEM_USER")
public class SystemUser {
@Column("idx") @Id private int idx;
@Column("username") private String username;
@Column("password") private String password;
@Column("name") private String name;
@Column("mail") private String mail;
@Column("is_public") private String isPublic;
@Column("is_delete") private String isDelete;
@Column("regdate") private LocalDateTime regdate;
// MARIADB의 DATETIME 타입이 LocalDateTime 이외 다른 클래스타입으로 캐스팅이 안되는듯.
// 오라클의 DATE 타입일 경우에는 어떤 클래스타입으로 캐스팅되는지 확인 못함.
public SystemUser() {}
public SystemUser(int idx) { this.idx = idx; }
// 이하 getter, setter, toString 생략
}
@Repository
public interface SystemUserMapper extends R2dbcRepository<SystemUser, Integer> {}
// Bean 호출
@Resource
private SystemUserMapper systemUserMapper;
// 사용, 리턴타입은 각각 Mono<SystemUser>, Flux<SystemUser>
systemUserMapper.findById(1);
systemUserMapper.findAll();
이게 아닐 수도 있음. 틀린점이 있으면 댓글로 지적 부탁.
반응형
'Java (based by Spring Boot 2)' 카테고리의 다른 글
Mono에 대한 궁금증 (0) | 2021.06.28 |
---|---|
R2DBC 안해...! (0) | 2021.06.22 |
마이크로서비스 개발이 어렵긴 하다 (0) | 2021.02.14 |
왜 스프링 웹플럭스에서 Flux.just를 볼 때 마다 (0) | 2021.02.10 |
스프링 부트를 자바11 이상에서 돌리게 될 경우 (JAXB가 ClassNotFound일 경우) (0) | 2021.01.27 |
Comments