Rx๋ ์์กด์ฑ์ผ๋ก Reactive Extensions(์ฆ, RxJava)๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฌ์ ํผ๋์ ์์ ๊ธฐ ์ํด ์ด ํ๋ก์ ํธ์ ์ด๋ฆ์ "hibernate-reactive" ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@emmanuelbernard WDYT?
์, ํญ์ ์ฝ๋ ์ด๋ฆ์ด์์ต๋๋ค.
๊ทธ๋ผ ์ง์ง ์ด๋ฆ์ผ๋ก ๊ตณ์ด์ง๋ ๊ณผ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋นจ๋ฆฌ ๋ฐ๊พธ๋ ๊ฒ ์ข์ ๊ฒ ๊ฐ์์!
๋๋ ๊ทธ๊ฒ์ ๋์๊ฒ ํ ๋นํ๋ค. ๋๊ตฐ๊ฐ ์ด์๋ฅผ ์ ๊ธฐํ์ง ์๋ ํ, ๋๋ ์ด๋ฒ์ฃผ ๋ง์ ๊ทธ๊ฒ์ ํ ๊ฒ์ ๋๋ค.
์ด๋ฒ์ฃผ๋ง์ ํด๋ด์ผ๊ฒ ์ด์
๊ทธ๋ฐ๋ฐ ๋ฌด์์ผ๋ก ๋ฐ๊พธ๊ฒ ์ต๋๊น?
hibernate-reactive
๋์์ง ์์ ์๋ฆฌ
>
์ต๋ ์ ์ ๋ชจ๋ ๋ฐ์์ +1
2020๋ 4์ 1์ผ ์์์ผ ์ค์ 7์ 45๋ถ DavideD [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
hibernate-reactive
๋์์ง ์์ ์๋ฆฌ>
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/hibernate/hibernate-rx/issues/77#issuecomment-607292426 ,
๋๋ ๊ตฌ๋ ์ทจ์
https://github.com/notifications/unsubscribe-auth/AADJJTIRGWQNUSN7FC3WCSLRKNHRJANCNFSM4LX6AEVQ
.
๊ด์ฐฎ์ต๋๋ค๋ง ReactiveSession
๋ฅผ ์ฒ ๋ฒ ์
๋ ฅํ๊ณ ์ถ์ง ์์ต๋๋ค....
์ ๋ HibernateRX
์ข์ํฉ๋๋ค. "๋ฐ์์ฑ"์ด๋ผ๋ ๊ฒ์ ๊ฐ๋
์ด๋ฉฐ RxJava์ ์ํ๊ฐ ์๋๋๋ค.
๊ด์ฐฎ์ง๋ง ReactiveSession์ ์ฒ ๋ฒ ์ ๋ ฅํ๊ณ ์ถ์ง ์์ต๋๋ค.
์ ํ? ํค๋ณด๋์ ์คํ์ด์ค ๋ฒํผ์ด ์์ต๋๊น? :)
๊ณต์ ํ๊ฒ ๋งํ์๋ฉด ๋๋ ํด๋์ค ์ด๋ฆ์ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋ค์ง ์ข์ํ์ง ์์ต๋๋ค. ํจํค์ง์ ๋ฃ์ด๋ ์ถฉ๋ถํ์ง ์์๊น์? ์๋๋ฉด ORM์ผ๋ก ์์
ํ ๋ ๋๋ฌด ํผ๋์ค๋ฝ์ต๋๊น?
R
๋ฅผ ์ ๋์ฌ๋ก ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ค์์ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ต์ ์ ๋ํ ์์ฝ์ ๋๋ค(๋ค๋ฅธ ๊ฒ์ ์์ ๋กญ๊ฒ ์ ์ํ ์ ์์).
org.hibernate.rx.RxSession
(ํ์ฌ)org.hibernate.rx.Session
org.hibernate.reactive.ReactiveSession
org.hibernate.reactive.Session
org.hibernate.reactive.RSession
org.hibernate.rx.RSession
๋ค๋ฅธ ์ ์ ์ฌํญ์ด ์์ต๋๊น?
๋๋ ๊ฐํ ์ ํธ๋๊ฐ ์์ต๋๋ค. ๋๋ Reactive๊ฐ ์ด๋ฆ์ ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ๊ทธ๋ ๊ฒ ๊ธธ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ ํด๋์ค๋ฅผ ํ์ฅํ๋ ์ผ๋ถ ๊ตฌํ ๋๋ ํด๋์ค์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋์ฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
class AbstracRxtEntityPersister extends RxEntityPersister
class AbstracReactivetEntityPersister extends ReactiveEntityPersister
์ด๊ฒ์ ํ์ฌ ํ๋ก์ ํธ์์ ๋งค์ฐ ์ผ๊ด์ฑ์ด ์์ต๋๋ค. ๋๋๋ก ์์
์ด ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
RxAbstractEntityPersister
๋๋ ์ต์
3์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค: org.hibernate.reactive.ReactiveSession
๊ทธ๋ฌ๋ ๋ ๋์ ์ ์์ด๋ ์ด์ ๋ํ ๊ฐ๋ ฅํ ์๊ฒฌ์ด ์์ผ๋ฉด ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค.
๋๋ 3
ํฌํํ๊ฒ ์ง๋ง @vietj ๋ ์๊ฒฌ์ด ์์ ์ ์์ต๋๊น?
์, ๋ ๋์ ์ต์
์ ์ฐพ์ผ๋ ค๊ณ ๋
ธ๋ ฅํ์ง๋ง ์์งํ ๊ณต๋ฐฑ์ ๊ทธ๋ ธ๊ณ ๊ทํ์ ์๊ฒฌ์ ๋์ํฉ๋๋ค. ReactiveSession
๋ณด๋ค ๋ ๋์ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ Java์ ์ ํ ๋ณ์นญ์ด ์๋ ๊ฒ์ ์ซ์ด ํฉ๋๋ค. ๋ด๊ฐ ์๊ฐํ ์ ์๋ ์ ์ผํ ํดํน์ Reactive.Session
, Reactive.Query
๋ฑ์ ์ผ๋ถ Reactive
์ ํ์ ๋ด๋ถ ์ธํฐํ์ด์ค๋ก ์ฌ์ฉํ์ฌ ์ํ๋ ๊ฒฝ์ฐ ์ ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค. ๊ทธ๊ฒ์ ํฉ๋ฆฌ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด์ง๋ง ๋ค๋ฅธ ์ฌ๋์ด Java์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ๋ก ๋ณธ ์ ์ด ์์ต๋๋ค.
๋๋ ์ต์ 2์ 4๋ฅผ ์ข์ํ๋ค:
- org.hibernate.rx.Session
- org.hibernate.reactive.Session
ํจํค์ง ์ด๋ฆ์ด ํด๋์ค๊ฐ "๋ฐ์ํ"์์ ๋ํ๋ด๋๋ก ํ์ญ์์ค. Rx/Reactive๋ฅผ ๋ชจ๋ ํด๋์ค์ ์ ๋์ฌ๋ก ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋์ค๋ฅผ 2๊ธ ์๋ฏผ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ญ๋๋ค.
๋น๋ฐ์ํ ๋์๋ฌผ๊ณผ ๋์ผํ ํด๋์ค ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ์ ๋จ์ ์ ์ฌ์ฉ์๊ฐ ๋์ผํ ํด๋์ค์์ ๋ ํด๋์ค๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ๊ฒ์ผ๋ก ์์ํ๋ ๊ฒฝ์ฐ(๋ฐ๋ผ์ ์ ํ์ด ํํ๋๋ ๋ชจ๋ ๊ณณ์์ ์ ๊ทํ๋ ํด๋์ค ์ด๋ฆ์ด ํ์ํจ)์ด์ง๋ง AFAIK๋ ๊ทธ๋ ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ผ์ด๋ ๋ค?
๋๋ ์ต์ 2์ 4๋ฅผ ์ข์ํ๋ค:
- org.hibernate.rx.Session
- org.hibernate.reactive.Session
FTR ์ ๋ ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ์๋ ๊ฐ์ ธ์ค๊ธฐ ์ ์ค๋ฅ์ ์ํ์ด ์ฆ๊ฐํ๋ค๋ ์ ์ ์ ์ํ๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ถ๊ทน์ ์ผ๋ก ๋ค์ํ ์ข ๋ฅ์ ๋ฐ์ ์ธ์ ์ ๊ฐ์ง ๊ฒ์ด ๊ฑฐ์ ํ์คํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ค์์ ์ ์ํ๊ณ ์ถ์ต๋๋ค.
MutinySession
StagedSession
๋๋ ์ด์ ์ ์ฌํ CompletionStage
์ด๋ป๊ฒ ์๊ฐํ์ญ๋๊น?
์ด๊ฒ์ด ๋ฐ์ํ ํ๋ฏธ๋ฅผ ๋ ธ์ถํ๋ ์ ์ผํ ์ฌ์ฉ์ ๋๋ฉด API์ ๋๊น?
์ด๊ฒ์ด ๋ฐ์ํ ํ๋ฏธ๋ฅผ ๋ ธ์ถํ๋ ์ ์ผํ ์ฌ์ฉ์ ๋๋ฉด API์ ๋๊น?
"์ฃผ์" API ์ค์๋ Query
ํด๋นํ๋ API๋ ์์ต๋๋ค.
๊ธฐ๋ก์ ์ํด, ๋๋ "Rx"๊ฐ ๊ทธ๊ฒ์ ๋ํด ์ข์ ๋ง์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ฏฟ๊ณ , ๊ทธ๊ฒ์ RxJava ํ๋ก์ ํธ์ ์ํด ์ ํ _์์ _๋์ง ์์ต๋๋ค - ์์์ ์ธ๊ธํ๋ฏ์ด - ๊ทธ๋์ ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ณ์ง ์์ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ ์ ์งํ๊ณ ์ถ์ต๋๋ค.
๊ณ์ฝ ๊ตฌ์กฐ์ ๋ํด
Gavin์ด ์ง์ ํ ๊ฒ์ฒ๋ผ Session
์ธํฐํ์ด์ค์ ์ค๋ฒ๋ก๋ฉ์ด ๋ง์์ ๋ค์ง ์์ต๋๋ค. ์ด๋ ์๋ ์์ฑ ์ค๋ฅ์ ์ฌ๋๋ค์ ์ธ์ง ๊ณผ๋ถํ๋ก ์ด์ด์ง๋๋ค.
๋ฐ๋ผ์ ๋ค์ ํจํด ์ค ํ๋์ ๋ํด +1:
MutinySession
, RxJava2Session
, JDKReactiveSession
(CompletionStage ๋ฐ Flow์ฉ)SessionMutiny
, SessionRxJava2
๋ฑ๋์์ ์ธ ํจํด์ reactiveSession.forMutiny().[...]
, reactiveSession.forJDK().[...]
์ด์ง๋ง ์์กด์ฑ ์
๋ชฝ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ๋์ต๋๋ค. reactiveSession.unwrap(MutinySession.class)
๋ ๊ฐ์น๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ช ๊ฐ์ง ์ถ๊ฐ ์ฌํญ:
CompletionStage
์ ํ์งฑ์ ๋ผ๊ณ ์๋ ํ๋์ด Flow ๋ผ๊ณ ํด์ JDKReactiveSession
๋ผ๊ณ ๋ถ๋ ์ต๋๋ค.RxJavaXSession
๋ฉ์๋๋ fetchAsSingle()
๋ฑ๊ณผ ๊ฐ์ด "์ค๋ฒ๋ก๋"๋ ์ ์์ต๋๋ค.๋๋ Query
์๋ Reactive ๋์๋ฌผ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์์ํฉ๋๋ค. BTW ์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์๊ฐ ์ง์ ์ ํ๊ณผ ๋ฐ์ ๋ํผ(์: Uni<String>
๋ฅผ ๋ชจ๋ ์๋ฝํด์ผ ํ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์ด๋ฆ์์ Hibernate ORM Reactive๋ hibernate-orm-reactive
๊ด์ฐฎ์ง๋ง @FroMage "Panache Rx"๋ ๋น์ทํ ๋ณํ์
@emmanuelbernard ๋ Session
๋ฐ SessionFactory
๋ฅผ ์ป๋ ํ์ฌ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class);
RxSession session = sessionFactory.openRxSession();
๋๋ ์ด ํจํด์ ์๋นํ ๋ง์กฑํ๋ค.
JDKReactiveSession
์ด. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฝ๋์์ ์์ฃผ ๋ณผ ์ ์๋ ๋ฌด์ธ๊ฐ์ ๋ํด ๋์ฐํด ๋ณด์ ๋๋ค.
๋๋
Query
์๋ Reactive ๋์๋ฌผ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์์ํฉ๋๋ค.
์, ์ด๋ฏธ ์กด์ฌํ๋ฉฐ ํ์ฌ RxQuery
ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ์๋ฌด ๊ฒ๋ ํ์ง ์์ต๋๋ค.
์์งํ ๋ค์ ์ต์ ์ด ์ ์ ๋ง์์ ๋ญ๋๋ค.
//I want to try out Mutiny
Mutiny.SessionFactory sessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
Mutiny.Session session = sessionFactory.openReactiveSession();
Mutiny.Query = session.createQuery(hql);
๋๋:
//I want to try it out with CompletionStage
Stage.SessionFactory sessionFactory = emf.unwrap(Stage.SessionFactory.class);
Stage.Session session = sessionFactory.openReactiveSession();
Stage.Query = session.createQuery(hql);
๊ทธ๋ฐ ๋ค์ Mutiny
์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ํ์คํ ์๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
import static org.hibernate.reactive.mutiny.Mutiny.*;
...
SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
Session session = sessionFactory.openReactiveSession();
Query = session.createQuery(hql);
๋๋ ์ธ๋ถ ํด๋์ค๊ฐ ์๋ ๊ฐ์ ธ์ค๊ธฐ ์ฌ๊ณ ์ ๋ฌธ์ ๋ฅผ ์๋นํ ์ํ ํ๋ค๊ณ ์๊ฐ ํฉ๋๋ค. (๋จ, ๋ค๋ฅธ ๋จ์ ์ด ์์ต๋๋ค.)
๋ฉ์ง๋ค @gavinking
@gavinking ๋ง์ง๋ง ์ ์์ด ์ ๋ง ๋ง์์
๋๋ ์ธ๋ถ ํด๋์ค๊ฐ ์๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํ๋ ์ฌ๊ณ ์ ๋ฌธ์ ๋ฅผ ์๋นํ ์ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋จ, ๋ค๋ฅธ ๋จ์ ์ด ์์ต๋๋ค.)
์๋ฅผ ๋ค์ด?
@DavidD ํ ๊ฐ์ง ๋จ์ ์ IDE๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. (ํ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.)
@emmanuelbernard ๋
Session
๋ฐSessionFactory
๋ฅผ ์ป๋ ํ์ฌ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class); RxSession session = sessionFactory.openRxSession();
๋๋ ์ด ํจํด์ ์๋นํ ๋ง์กฑํ๋ค.
JDKReactiveSession
์ด. ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฝ๋์์ ์์ฃผ ๋ณผ ์ ์๋ ๋ฌด์ธ๊ฐ์ ๋ํด ๋์ฐํด ๋ณด์ ๋๋ค.
๋ด๊ฐ ์์งํ ๋๋ถ๋ถ์ ํผ๋๋ฐฑ์์ ์ฌ๋๋ค์ CompletionStage
์ซ์ดํ๊ณ RxJava๋ ์น๊ตฌ๋ค์ ์ฐพ์ต๋๋ค. ๊ทธ๋์ ๊ทธ ๋ฒ์ ์ ๊ฐ๋ํ ์ฌ๋์ ์ ํ์ด ๋ ๊ฒ์
๋๋ค.
๋ด๊ฐ ์์งํ ๋๋ถ๋ถ์ ํผ๋๋ฐฑ์์ ์ฌ๋๋ค์ CompletionStage๋ฅผ ์ซ์ดํ๊ณ RxJava๋ ์น๊ตฌ๋ค์ ์ฐพ์ต๋๋ค. ๊ทธ๋์ ๊ทธ ๋ฒ์ ์ ๊ฐ๋ํ ์ฌ๋์ ์ ํ์ด ๋ ๊ฒ์ ๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ด ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋์ง ํ์ธํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๊น? :-NS
๋ด๊ฐ ์์งํ ๋๋ถ๋ถ์ ํผ๋๋ฐฑ์์ ์ฌ๋๋ค์
CompletionStage
์ซ์ดํ๊ณ RxJava๋ ์น๊ตฌ๋ค์ ์ฐพ์ต๋๋ค. ๊ทธ๋์ ๊ทธ ๋ฒ์ ์ ๊ฐ๋ํ ์ฌ๋์ ์ ํ์ด ๋ ๊ฒ์ ๋๋ค.
๋ฌผ๋ก ์ ๋ ์ซ์ดํฉ๋๋ค.
IDE๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ์ง ์์ต๋๋ค.
Session
์์ฑํ ์ ์๊ณ static Mutiny.Session
๋ฅผ ๊ฐ์ ธ์ค๋ผ๋ IDE ์ ์์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก ํญ์ Mutiny.Session
์ ๋์ฌ๋ก ์
๋ ฅํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋ฌธ์์๋ ๊ฐ์ ธ์ค๊ธฐ๋ ํฌํจ๋์ด์ผ ํ๋ฏ๋ก ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์ด๋ฆ์์ Hibernate ORM Reactive๋ ์ข์ hibernate-orm-reactive์ด์ง๋ง @FroMage ๋ "Panache Rx"์ ๋ํด ์ ์ฌํ ๋ณํ์ ์ํํฉ๋๊น?
์. ํญ์ ์ฝ๋๋ค์์ด์์ต๋๋ค.
Session์ ์์ฑํ ์ ์๊ณ ๊ฐ์ ธ์ฌ IDE ์ ์์ ๋ฐ์ ์ ์๋ค๋ ์ ์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๊ทธ๋ ๊ฒ ๊ฐ๋ ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ค์ ์ฐ๋ฆฌ๊ฐ ๋ฌธ์์ ์ถฉ์คํด์ผ ํ๋ ๊ฒ์ฒ๋ผ ์ฌ์ ํ Mutiny.SessionFactory
์ธ ์ ์์ต๋๋ค(๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํญ์ ๊ทธ๋์ผ ํ์ง๋ง, ์์
ํ์ ํฌํจํ ํ์๊ฐ ์์ต๋๋ค) .
@FroMage ๊ทธ๋ ๊ฒ ๋์์ง ์์ต๋๋ค. IntelliJ์์ ์ค์ > ์ฝ๋ ์คํ์ผ > Java > ๊ฐ์ ธ์ค๊ธฐ๋ก ์ด๋ ํฉ๋๋ค. Eclipse์๋ ๋น์ทํ ๊ฒ์ด ์์ต๋๋ค.
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ Mutiny๋ ๋ด ์๊ฐ์ ๊ธฐ๋ณธ API๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค. ๋๋จธ์ง๋ compat
ํจํค์ง์ ์ํ ์ ์์ต๋๋ค. CompletionStage/Flow
๋ฒ์ ๋ :-)
์ ๋ฐ์ดํธ: Mutiny ๋ฌธ์๋ฅผ ๊ฐ์ํ ๋ compat์์ ๊ตฝ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น? ์ด๋ฅผ ์ํด Mutiny์ ์์กดํ๊ณ ๊ฐ๋ฐ์๊ฐ ํ๋์์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ณํ์ ์ํํ๋ ๋ฐ ์ฝ๊ฐ์ ๋ถ๋ด์ ์ค๋๋ค.
Clement๋ Mutiny์ ํธ๋จํด๋ฆฐ์ ์ถ๊ฐํ๊ณ ์์ผ๋ฉฐ Mutiny๋ฅผ Reactive Hibernate์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ง๋๋ ๋ ๋ค๋ฅธ ์ง์ ์ธ์์ผ ์ ์์ต๋๋ค.
์ด ํ ๋ก ์ hibernate-dev ๋ฉ์ผ๋ง ๋ฆฌ์คํธ์์ ๋ฐ์ ํ์ต๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ Hibernate Reactive
๋ก ๊ฐ๊ณ ์ถ์ดํ๋ ๊ฒ ๊ฐ์ต๋๋ค ... ์์์ต๋๊น?
๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ๋ต์ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ฑ๋กํ๋ ค๋ฉด ๋ค์์ ์ฐธ์กฐํ์ญ์์ค.
ํนํ ์ด๊ฒ์ (๋ฌด์๋ณด๋ค๋) ์ด ๋ฌธ์ ์ ๊ด๋ จ๋ ํฐ ์ค๋ ๋์ ๋๋ค.
Hibernate Reactive, ์์์ง?
:์ดํ์ธ:
ํนํ ์ด๊ฒ์ (๋ฌด์๋ณด๋ค๋) ์ด ๋ฌธ์ ์ ๊ด๋ จ๋ ํฐ ์ค๋ ๋์ ๋๋ค.
์ผ๋ง๋ ํฐ ์ค๋ ๋, ํ๋์ ์ด๋ฉ์ผ์ด ์์ต๋๋ค ;)
๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ฌ์ ํ HibernateRX๋ฅผ ๋ ์ข์ํ๋ค -- ๋๋ RxJava๊ฐ "Rx"๋ฅผ ์์ ํ์ง ์๊ณ IMO HibernateRX๊ฐ ๋์ ์ ๋๋ ์ด๋ฆ์ด๋ผ๋ Sanne์ ๋์ํ๋ค. Hibernate Reactive๋ ์ด๋ฆ๋ณด๋ค ์ค๋ช ์ ๋ ๊ฐ๊น์ต๋๋ค. ๋จ์ง ๋ด $0.02์ด๊ณ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ์ค๋ ๋๋ฅผ ์ด๊ฒ์ผ๋ก ์ด์ง๋ฝํ๊ณ ์ถ์ง ์์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ฌ์ ํ HibernateRX๋ฅผ ๋ ์ข์ํ๋ค -- ๋๋ RxJava๊ฐ "Rx"๋ฅผ ์์ ํ์ง ์๊ณ IMO HibernateRX๊ฐ ๋์ ์ ๋๋ ์ด๋ฆ์ด๋ผ๋ Sanne์ ๋์ํ๋ค. Hibernate Reactive๋ ์ด๋ฆ๋ณด๋ค ์ค๋ช ์ ๋ ๊ฐ๊น์ต๋๋ค. ๋จ์ง ๋ด $0.02์ด๊ณ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ์ค๋ ๋๋ฅผ ์ด๊ฒ์ผ๋ก ์ด์ง๋ฝํ๊ณ ์ถ์ง ์์์ต๋๋ค.
@aguibert ์ ๋ฌธ์ ๋ x๊ฐ Hibernate Rx ์ด๋ฆ์์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
Reactive Extension์ ํน์ https://en.m.wikipedia.org/wiki/Reactive_extensions์
๋๋ค.
๋ง์, ๋๋ Hibernate Rx๊ฐ "Hibernate Reactive Extensions"์ ์ฝ์๋ผ๊ณ ์๊ฐํ๋ค. Reactive Extensions๋ ํน์ ํ ๊ฒ์ด์ง๋ง ํน์ ์ ํ์ด๋ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ๊ฐ๋ ์ ๋ํ๋ ๋๋ค. IMO ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ํ๋ ์ผ์ ์ฌ์ ํ โโ๊ทธ ๊ฐ๋ ์ ๋ง์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ "Hibernate Reactive"๋ผ๋ ์ด๋ฆ์ผ๋ก ์ป์ ์ ์์ ๋งํผ ํฉ์์ ๊ทผ์ ํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ ๊ทธ ์ด๋ฆ์ผ๋ก๋ ์์ ํ ๊ด์ฐฎ์ต๋๋ค.
๋ฉ์ผ๋ง ๋ฆฌ์คํธ์ ์๋ Emmanuel์ ์ด๋ฉ์ผ๋ก ์ธํ ๋ฐ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์ด ๊ธ์ ๋ซ๊ฒ ์ต๋๋ค. :)
Hibernate Reactive
์
๋๋ค! @murphye ์ ๋ชจ๋์๊ฒ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
#111์ ์ด์ด
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์งํ ๋ค์ ์ต์ ์ด ์ ์ ๋ง์์ ๋ญ๋๋ค.
๋๋:
๊ทธ๋ฐ ๋ค์
Mutiny
์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ํ์คํ ์๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.๋๋ ์ธ๋ถ ํด๋์ค๊ฐ ์๋ ๊ฐ์ ธ์ค๊ธฐ ์ฌ๊ณ ์ ๋ฌธ์ ๋ฅผ ์๋นํ ์ํ ํ๋ค๊ณ ์๊ฐ ํฉ๋๋ค. (๋จ, ๋ค๋ฅธ ๋จ์ ์ด ์์ต๋๋ค.)