현재 블로그는 nodejs 풀스택으로 구현되어있다. 프론트는 Next.js로, 백엔드는 InversifyJS를 사용해서 만들었고, 이 둘을 하나의 node위에서 돌리고 있다. 하나의 node위에서 모든걸 처리함에도 불구하고 프론트엔드와 백엔드가 통신할 때는 http request를 사용한다. 즉 이 둘은 node 코드상에서 결합되어있지 않기 때문에 백엔드를 통째로 들어내어 다른 구현체로 갈아끼울 수 있다.

node로 어느정도 끝장을 본 것 같으니, 이제 spring-webflux를 사용해서 NIO(non-blocking input and output)로 구현해봐야겠다(node의 mysql driver는 이미 NIO네...). github에 버전 태깅해놓고 백엔드 구현체를 바꿔보자~~ 그 전에 node에 프론트와 백엔드를 한꺼번에 돌리기 위한 프로젝트 구성을 정리하자 꼭. 나만의 node 풀스택 규칙 정리하기...

https://spring.io/blog/2018/12/07/reactive-programming-and-relational-databases

이 글을 보니까 java에서 RDB로 NIO를 하려면 아직 기다려야한다... 이 글 번역해보자. 번역이 없네,

일단 본문 요약은

  1. Reactive Programming은 scalibility와 stability에 좋다.
    • event-driven non-blocking functional pipeline을 통해서 요청을 처리하기 때문에
  2. 위 장점은 애플리케이션의 모든 스택이 reactive해야 누릴 수 있다.
    • 여기서 RDB가 문제가 됨.
  3. 아직 표준화된 비동기 RDB API가 없다.
    1. 오라클이 제안한 ADBA가 있음.
    2. Postgres ADBA driver가 있긴 한데...
    3. ADBA가 언제 쓸만해질지 기약할 수 없음.
  4. Pivotal에서 만드는 R2DBC가 있다.
    1. 표준 API와 구현체가 없는 마당에 기약없이 기다리기보다 직접 만듦
    2. 공식적으로 PostgreSQL, H2, Microsoft SQL Server를 지원함
    3. MySQL도 지원할 계획이 있음.
    4. 비공식적으로 구현한 r2dbc-mysql 구현체가 있음.
    5. 스프링에서 R2DBC를 사용할 수 있도록 Spring Data R2DBC라는 프로젝트도 시작함.
  5. Fibers 위에 JDBC를 올린다.
    1. Fibers는 blocking-api를 non-blocking으로 바꿔주는 light-weight abstraction임.
    2. This is possible by stack switching as soon as an invocation hits a blocking API. So the underlying Fiber attempts to continue on a previous flow that was using a blocking API.
  6. 결론
    1. Fibers위에 JDBC를 올리는 작업은 아직 미완성이지만, potential game changer임.
    2. ADBA는 현재 스케쥴이 따르면 Java 17, 2021년쯤 자바 표준 런타임에 포함될 것.
    3. 당장 시도해볼 수 있는 것은 R2DBC다.

댓글중에 rxjava2-jdbc 언급이 나왔다. 하지만 이 라이브러리는 jdbc의 wrapper일 뿐. jdbc call을 할 때마다 새로운 스레드를 생성해서 blocking 작업을 처리함. 그러나 매번 jdbc call할 때마다 새로운 스레드를 생성하므로 결국 jdbc를 직접 사용할 때와 같은문제에 봉착한다. R2DBC(혹은 Fibers) 말고는 답이 없음.

spring-webflux, spring-r2dbc, r2dbc-mysql를 사용하면 RDB를 NIO로 처리할 수 있다. 이걸로 한 번 해보자. kotlin까지.

91.
[2020.10.30]
TDD는 끝없는 자기부정이다
90.
[2020.10.29]
The Twelve-Factor App
89.
[2020.10.26]
육하원칙이 아니라 5원칙이 필요하다
88.
[2020.10.15]
Interview-driven study
87.
[2020.09.20]
불신자가 읽는 성경
86.
[2020.09.01]
기독교 복음주의, 반동적인 초국가기구
85.
[2020.08.29]
종교가 돈이 되고 권력이 될 때, 신앙이란 이름으로 이성적 사고가 마비될 때
84.
[2020.08.28]
쿠팡 추천시스템 변천사
83.
[2020.08.25]
IntelliJ 2020과 QueryDSL 플러그인 문제
82.
[2020.08.09]
cherry-pick대신 rebase --onto
81.
[2020.08.07]
Java Reactive Stream 명세
80.
[2020.08.02]
Amazon Linux 2, Nginx, Let's Encrypt
79.
[2020.08.02]
웹 디자인 레퍼런스 모음
78.
[2020.07.28]
동시성 프로그래밍 게임
77.
[2020.07.27]
적정 수면시간은 더 잘 수 없을 때까지 자는 것이다
76.
[2020.07.22]
Kibun
75.
[2020.07.22]
파워포인트 대신 글쓰기로
74.
[2020.07.17]
컨볼루션
73.
[2020.07.14]
사용성
72.
[2020.07.13]
AWS Well Architectured Framework
71.
[2020.07.13]
안경 Plainbrand
70.
[2020.06.27]
국가기관의 성별선택란
69.
[2020.06.15]
이놈들아 미꾸라지 다 죽것다
68.
[2020.06.14]
css 기본 폰트 설정
67.
[2020.06.14]
메타 태그 정리
66.
[2020.06.13]
다크 모드 지원
65.
[2020.06.13]
Effective Java 원서로 다 읽었다
64.
[2020.06.08]
MBTI 전문가 발언
63.
[2020.05.16]
Java의 Cloneable 인터페이스
62.
[2020.04.28]
마틴 파울러의 Self Testing Code
61.
[2020.04.21]
추천 알고리즘과 텐서플로우
60.
[2020.04.19]
함수형 프로그래밍 레퍼런스
59.
[2020.04.19]
리눅스 예쁜 명령어
58.
[2020.04.15]
Spring 웹 컨트롤러 프록시
57.
[2020.04.13]
redux-toolkit과 typesafe-actions
56.
[2020.04.12]
VPC 이해하기
55.
[2020.04.12]
NIO가 성능이 좋은 이유
54.
[2020.04.11]
풀 스택과 NIO
53.
[2020.04.08]
Next.js v9.3 인증과 SSG
52.
[2020.04.04]
redux-observable
51.
[2020.04.04]
블로그 1.0 완성
50.
[2019.09.14]
49.
[2019.09.13]
혐오정치와 개신교
48.
[2019.09.12]
보이는 것은 실재가 아니다
47.
[2019.09.08]
인연 - 피천득
46.
[2019.06.09]
이건 하면서 저건 왜 안해요?
45.
[2019.05.13]
존재에 대하여 [有物]
44.
[2019.05.06]
죽편(竹篇) 1 - 여행
43.
[2019.05.05]
당신 인생의 이야기
42.
[2019.05.04]
41.
[2019.04.29]
有朋自遠方來 不亦樂乎
40.
[2019.04.27]
에고센트릭 시스템
39.
[2019.04.15]
서구가 만든 중동
38.
[2019.04.14]
나는 간호사, 사람입니다.
37.
[2019.04.12]
Our Planet
36.
[2019.04.11]
"불교에서는 생명 아닌게 없어"
35.
[2019.04.10]
볼링 100점
34.
[2019.04.09]
르몽드 디플로마티크 2월
33.
[2019.03.23]
32.
[2019.03.20]
부두
31.
[2019.03.15]
30.
[2019.03.11]
지옥
29.
[2019.03.06]
28.
[2019.03.05]
기본소득 → 무상 서비스
27.
[2019.03.04]
기술 도서
26.
[2019.03.03]
25.
[2019.03.02]
손 씻기
24.
[2019.03.01]
퍼블리2
23.
[2019.02.28]
책 읽기
22.
[2019.02.27]
퍼블리
21.
[2019.02.26]
위빠사나
20.
[2019.02.25]
다육이2
19.
[2019.02.24]
18.
[2019.02.23]
비극
17.
[2019.02.22]
간담회 후
16.
[2019.02.21]
누구인가?
15.
[2019.02.20]
팀원을 평가하는 세 가지 기준
14.
[2019.02.18]
감사의 글
13.
[2019.02.16]
파워풀
12.
[2019.02.15]
11.
[2019.02.14]
단조증가
10.
[2019.02.13]
퍼스날 데이타베이스
9.
[2019.02.11]
성찰하는 남자들
8.
[2019.02.10]
삶의 의미
7.
[2019.02.08]
6.
[2019.02.07]
버림받는다는 것
5.
[2019.02.06]
전문성
4.
[2019.02.05]
다육이
3.
[2019.02.04]
React
2.
[2019.02.03]
1.
[2019.02.02]
첫 번째 일기