Hibernate-reactive: Vert.X ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ ๋ฐ˜์‘ ๋‹จ๊ณ„ ์„ค์ • ์˜ˆ

์— ๋งŒ๋“  2021๋…„ 06์›” 07์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: hibernate/hibernate-reactive

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์Šคํ…Œ์ด์ง€ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ ์ ˆ์ „ ๋ชจ๋“œ๋กœ vertx ์›น์„ ์„ค์ •ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์–ด๋””์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Mutiny๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด ์˜ˆ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
https://how-to.vertx.io/hibernate-reactive-howto/

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

question

๋ชจ๋“  10 ๋Œ“๊ธ€

ํ˜„์žฌ๋กœ์„œ๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Hibernate Reactive ์„ธ์…˜ ํŒฉํ† ๋ฆฌ์— ๊ด€ํ•œ ํ•œ ๋‹ค์Œ์„ ํ†ตํ•ด Stage ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  emf = Persistence
    .createEntityManagerFactory("pg-demo", props)
    .unwrap(Stage.SessionFactory.class);

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ Uni๋ฅผ CompletionStage๋กœ(๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ) ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Uni uni = ...
CompletionStage stage = uni.subscribeAsCompletionStage();
Uni uni =Uni.createFrom().completionStage( stage );

ํ˜ธ๊ธฐ์‹ฌ์— ์Šคํ…Œ์ด์ง€ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค,
์ด์ „์—๋Š” ์Šคํ…Œ์ด์ง€ ๋ชจ๋“œ์™€ vertx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ€์‚ฌ ์ข…์†์„ฑ์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๋‚˜๋Š” ๋ฐ˜๋ž€์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ณ  ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์˜๊ตฌ์‹ฌ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ด๊ณ  ํ† ๋ก ํ•˜๊ธฐ์— ์ข‹์€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์— ํฌ๋Ÿผ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Mutiny๋Š” ๊ฝค ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์งˆ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋‹ต๋ณ€ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ๋Š” https://smallrye.io/smallrye-mutiny/์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  CompletionStage API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Mutiny๊ฐ€ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ์ฃผ์— CompletionStage๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜์ง€๋งŒ ๊ทธ ๋™์•ˆ Hibernate Reactive ๋ฌธ์„œ์—์„œ ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://hibernate.org/reactive/documentation/1.0/reference/html_single /#_apis_for_chaining_reactive_operations

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค :-)

Vert.x ์™€ CompletionStage ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ณ„๋„์˜ ์˜ˆ์ œ๊ฐ€ ์ •๋ง ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์˜ˆ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋น„์Šทํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Mutiny๊ฐ€ HR๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ์— ํ›จ์”ฌ ๋” ํŽธ์•ˆํ•œ API๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ณ„๋กœ ์ผ์ด โ€‹โ€‹์•„๋‹Œ ๊ฒƒ ๊ฐ™์•„์š”. ๊ท€์ฐฎ๊ฒŒ ํ•˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์š”.

Mutiny๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์ œ์˜ JBang ๋ณ„์นญ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/DavidD/jbang-rep/blob/main/StageVerticle.java

JBang์„ ์„ค์น˜ํ–ˆ์œผ๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

jbang stage-verticle@DavideD/jbang-rep

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ IDE(์˜ˆ: IDEA)์—์„œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

jbang edit --open  stage-verticle@DavideD/jbang-rep

(JBang์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒˆ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•˜๊ณ  ๋งจ ์œ„์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

์–ด์จŒ๋“  Future ๋ฐ CompletionStage๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ Mutiny๋ฅผ ์‹œ๋„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฑด๋ฐฐ.

์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜์ง€๋งŒ ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

@DavidD ๋ฐ @gavinking ๋•๋ถ„์— ๊ท€ํ•˜๊ฐ€ ์ œ๊ณตํ•œ ์˜ˆ์ œ๋ฅผ ์ฝ๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  Mutiny๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๊ฒ ์ง€๋งŒ Stage API๋ณด๋‹ค ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ๋‚˜๋Š” Stage ๋˜๋Š” Mutiny๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ์ •์ฑ…์— ๊ตฌ์†๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์•ˆ ์ธ์‚ฌ

@arifpratama398 ์˜ˆ์ œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ์•ฝ์†์„ ์™„๋ฃŒํ•˜์ง€ ์•Š์•˜๊ณ  ๊ณต์žฅ์„ ๋‘ ๋ฒˆ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์—…๋ฐ์ดํŠธํ–ˆ๋‹ค. jbang์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ jbang --fresh stage-verticle@DavideD/jbang-rep ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์›๋ž˜ ์˜ˆ์ œ๋Š” ํŒฉํ† ๋ฆฌ๋ฅผ ๋‹ซ์ง€ ์•Š๋Š”๋ฐ stop ๋ฉ”์†Œ๋“œ์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
@gavinking ๋ฒ„ํ‹ฐํด ์ด ๋ฉˆ์ท„์„ ๋•Œ ํŒฉํ† ๋ฆฌ ํด๋กœ์ฆˆ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€ ์•Š๋‚˜?

์•„๋งˆ.

์ด ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‹ค์ œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰