표준프레임워크 오픈커뮤니티의 새로운 소식 및 궁금한 점을 묻고 답할 수 있습니다.
여러분의 의견을 자유롭게 남기실 수 있는 공간입니다.
New전자정부 표준프레임워크 신버전 v4.2 세미나 후기 | |
작성자명 : 김일국 작성일 : 2024-05-03 조회 : 16581 글번호 : 20900 | |
어제 전자정부 표준프레임워크 신버전 v4.2 소개세미나에서 알려주신 내용 중 3교시 WebFlux 개발패턴이 흥미가 생겨서 실습을 진행하려고 합니다.^^(아래) ### 자바기반 스프링부트2.7.12의 Reactive Stream 라이브러리를 이용하여 Spring WebFlux 실습 위 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 사용
#### 스프링 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/ ) (아래왼쪽 화면 사용자명을 비우고 연결을 누르면, 아래 오른쪽 화면처럼 테이블 관리를 할 수 있다..)
Ps. 위 내용은 제 블로그에 게시한 글과 같습니다. https://kimilguk.tistory.com/870
|