본문바로가기

Support

표준프레임워크 오픈커뮤니티의 새로운 소식 및 궁금한 점을 묻고 답할 수 있습니다.

자유게시판

여러분의 의견을 자유롭게 남기실 수 있는 공간입니다.

New전자정부 표준프레임워크 신버전 v4.2 세미나 후기
작성자명 : 김일국 작성일 : 2024-05-03 조회 : 16653 글번호 : 20900
 

어제 전자정부 표준프레임워크 신버전 v4.2 소개세미나에서 알려주신 내용 중 3교시 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/ )

  (아래왼쪽 화면 사용자명을 비우고 연결을 누르면, 아래 오른쪽 화면처럼 테이블 관리를 할 수 있다..)

 

 

Ps. 위 내용은 제 블로그에 게시한 글과 같습니다. https://kimilguk.tistory.com/870

 

twitter facebook

댓글 불러오는 중