์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์คํ ์ด์ง ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ต๋ ์ ์ ๋ชจ๋๋ก vertx ์น์ ์ค์ ํ๋ ์์ ๋ฅผ ์ด๋์์ ์ป์ ์ ์๋์ง ์๋ ค์ฃผ์ค ์ ์์ต๋๊น?
Mutiny๋ฅผ ์ฌ์ฉํ๋ ์ด ์์ ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค.
https://how-to.vertx.io/hibernate-reactive-howto/
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
ํ์ฌ๋ก์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
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 ๋ฒํฐํด ์ด ๋ฉ์ท์ ๋ ํฉํ ๋ฆฌ ํด๋ก์ฆ๊ฐ ์์ด์ผ ํ์ง ์๋?
์๋ง.
์ด ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฐ ์ฐจ์ด๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.