오늘 전자정부 표준프레임워크 신버전 v4.2 소개세미나에서 알려주신 내용 중 WebFlux 개발패턴이 흥미가 생겨서 실습을 진행하려고 합니다.^^(아래)
### 자바기반 스프링부트2.7.12의 Reactive Stream 라이브러리를 이용하여 Spring WebFlux 실습
4개 DB를 사용하여 실습하는 소스 : https://www.egovframe.go.kr/home/sub.do?menuNo=37
위 4개 DB중 R2DBC를 사용하여 실습을 진행한 소스 : https://github.com/miniplugin/egovframe-webflux-r2dbc
#### R2DBC를 사용하여 실습을 진행하기 전 사전 지식: (아래)
1). Spring WebFlux : 스프링 5부터 지원되는 라이브러리로 MVC의 컨트롤러에서 RDBC대신 R2DBC기반의 ReactiveStream 패키지의 객체를 사용하여 서버에서 데이터 입출력 처리를 구현한다.
2). 사용DB커넥션 : H2 DB기반에서 R2DBC : Relational Reactive DataBase Connection 사용
3). Reactive 데이터 스트림에서 비동기 데이터 처리란?
- 오래 걸리는 데이터 작업을 기다리지 않고, 바로 다음 데이터 처리 작업을 하는 것을 말한다.
- 데이터를 순서대로 주고받아야 하는데, 네트워크나 와이파이 문제로 특정 API 호출이 늦어져서 순서가 달라지면 원하는 흐름대로 작동하지 않는 경우가 있다.
- 위와 같은 문제에서 애플리케이션이 원하는 데이터 흐름대로 작동하게 하기 위해, 순서를 보장해야 할 때 스트림(Stream)을 이용한다.
#### 스프링 Flux 반응형 웹 프레임워크를 사용하여 기본 CRUD 앱 테스트 하기(아래)
- 우선 용어 부터 확인(아래)
1). Publisher(퍼블리셔) : 데이터를 발생시키는 기능.(게시판 목록조회 또는 IoT 장치에서 발생된 데이터)
2). Subscriber(구독자) : 발생된 데이터를 처리하는 기능.
3). Subscription(중계) : 퍼블리셔(데이터발생)와 구독자(데이터처리) 사이 데이터 송수신 순서를 관리하는 역할.
4). Stream Processing(스트림 데이터 처리) : None Blocking 으로 끊김없이 데이터를 주고 받게 처리한다.
5). Back Pressure(데이터과속을 방지) : 퍼블리셔(데이터발생)와 구독자(데이터처리) 사이 속도 차이에 맞추어 데이터 요청양을 조정한다.
- 스프링 Flux 웹 프레임워크의 클래스와 생명주기 함수 구성을 알아 본다.(아래)
- 스프링 Flux 샘플 앱을 실행하였을 때 위 생명주기 함수가 실행되는 것을 확인(아래 onSubscribe 부터 onComplete 까지)
#### API서버를 @Rest컨트롤러 대신 RouterFunction 인터페이스를 이용하여 함수형 프로그램으로 구현한다.(아래)
아래 RouterFunction 함수에 /router/list 로 접근할 때 list 함수를 실행하도록 매칭할 수 있다.(아래 스웨거 사이트에서 결과 확인가능 단, 스프링부트 2.x.x 버전(스웨거2.x): localhost:9091/swagger-ui.html 과 3.x.x 버전(스웨거3.x): localhost:9091/swagger-ui/index.html 로 차이가 있으니 주의 한다.)
- 위 API서비스를 스웨거 URL http://localhost:9091/swagger-ui.html 말고, 웹에서도 바로 확인 가능하다.(아래, http://localhost:9091/router/list )
- h2 DB에 대한 설정은 config 폴더에서 확인가능하다.(아래)
- 위 중간화면 에서 src/main/resources/db/sampledb.sql 에 h2 데이터베이스의 테이블 생성 쿼리가 들어 있다.
- 위 중간화면 에서 R2DBC(Relational Reactive Database Connection) Factory 클래스로 DB연결을 하는 것을 볼 수 있다.
- 위 하단화면 에서 초기 데이터로 8개의 레코드 자료가 등록되는 것을 확인 할 수 있다.
- 위 상단화면 에서 h2-console 화면의 접속 포트가 9995인 것을 확인 할 수 있다.(아래 http://localhost:9995/ )
(아래왼쪽 화면 사용자명을 비우고 연결을 누르면, 아래 오른쪽 화면처럼 테이블 관리를 할 수 있다..)
스프링부트2 프로젝트를 스프링부트3로 마이그레이션_3/3 (1) | 2024.01.31 |
---|---|
스프링부트2 프로젝트를 스프링부트3로 마이그레이션_2/3 (0) | 2024.01.30 |
스프링부트2 프로젝트를 스프링부트3로 마이그레이션_1/3 (1) | 2024.01.28 |
헤로쿠 클라우드플랫폼 기존에 사용하던 스택 업그레이드 (0) | 2022.08.19 |
코트린 프로젝트17 (0) | 2022.06.03 |
댓글 영역