ππ₯π₯ λΌμΌλ¦¬μ μ½λ λΆμ€λ¬κΈ° ππ₯π₯
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° νμ΅ λ΄μ© μ 리ν ν¬μ€ν
μ
λλ€.
λ€μν μ°κ΄κ΄κ³ λ€λ£¨κΈ° μν°ν°μ μ°κ΄κ΄κ³λ₯Ό 맀νν λ κ³ λ €ν μ λ€μ€μ± λ¨λ°©ν₯, μλ°©ν₯ μ°κ΄κ΄κ³μ μ£ΌμΈ λ€μ€μ± λ€λμΌ(@ManyToOne), μΌλλ€(@OneToMany), μΌλμΌ(@OneToOne), λ€λλ€(@ManyToMany) λ€μ€μ±μ νλ¨νκΈ° μ΄λ €μΈ λλ λ°λλ°©ν₯μ μκ°ν΄λ³΄μ. λ³΄ν΅ λ€λμΌκ³Ό μΌλλ€ κ΄κ³λ₯Ό κ°μ₯ λ§μ΄ μ¬μ©νκ³ λ€λλ€ κ΄κ³λ μ€λ¬΄μμλ κ±°μ μ¬μ©νμ§ μμ. λ¨λ°©ν₯, μλ°©ν₯ κ°μ²΄ κ΄κ³μμ νμͺ½λ§ μ°Έκ³ νλ κ²μ λ¨λ°©ν₯ κ΄κ³λΌκ³ νλ©°, μμͺ½μ΄ μλ‘ μ°Έμ‘°νλ κ²μ μλ°©ν₯ κ΄κ³λΌ νλ€. μ°κ΄κ΄κ³μ μ£ΌμΈ μΈλ ν€λ₯Ό κ°μ§ ν
μ΄λΈκ³Ό 맀νν μν°ν°κ° μΈλν€λ₯Ό κ΄λ¦¬νλκ² ν¨μ¨μ μ΄λ―λ‘ λ³΄ν΅ μ΄κ³³μ μ°κ΄κ΄κ³μ μ£ΌμΈμΌλ‘ μ ννλ€.
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° νμ΅ λ΄μ© μ 리ν ν¬μ€ν
μ
λλ€.
μλ°©ν₯ μ°κ΄κ΄κ³ μΌλλ€ κ΄κ³μμλ μ¬λ¬ 건과 μ°κ΄κ΄κ³λ₯Ό λ§Ίμ μ μμΌλ―λ‘ μ»¬λ μ
(Collection, Set, Map, List ..) μ μ¬μ©νλ€.
μλ°©ν₯ μ°κ΄κ΄κ³ 맀ν νμ μν°ν° (Member.java)
νμ μν°ν°μλ λ³κ²½ν μ¬νμ΄ μλ€.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; // μ°κ΄κ΄κ³ 맀ν @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // μ°κ΄κ΄κ³ μ€μ public void setTeam(Team team) { this.
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° νμ΅ λ΄μ© μ 리ν ν¬μ€ν
μ
λλ€.
κ°μ²΄λ μ°Έμ‘°(μ£Όμ)λ₯Ό μ¬μ©ν΄μ κ΄κ³λ₯Ό λ§Ίκ³ ν
μ΄λΈμ μΈλ ν€λ₯Ό μ¬μ©ν΄μ κ΄κ³λ₯Ό λ§Ίλλ€. λ°©ν₯(Direction) : λ¨λ°©ν₯κ³Ό μλ°©ν₯μ΄ μμΌλ©° λ°©ν₯μ κ°μ²΄κ΄κ³μλ§ μ‘΄μ¬νκ³ ν
μ΄λΈ κ΄κ³λ νμ μλ°©ν₯ μ΄λ€. λ€μ€μ±(Multiplicity) : λ€λμΌ(N:1), μΌλλ€(1:N), μΌλμΌ(1:1), λ€λλ€ (N:N) μ°κ΄κ΄κ³ μ£ΌμΈ (owner) : κ°μ²΄λ₯Ό μλ°©ν₯ μ°κ΄κ΄κ³λ‘ λ§λ€λ©΄ μ°κ΄κ΄κ³μ μ£ΌμΈμ μ ν΄μΌ νλ€. λ¨λ°©ν₯ μ°κ΄κ΄κ³ κ°μ²΄ μ°κ΄κ΄κ³ νμ κ°μ²΄μ ν κ°μ²΄λ λ¨λ°©ν₯ κ΄κ³ λ€. νμμ Member.team νλλ₯Ό ν΅ν΄μ νμ μ μ μμ§λ§ λ°λλ‘ νμ νμμ μ μ μλ€.
μλ° ORM νμ€ JPA νλ‘κ·Έλλ° νμ΅ λ΄μ© μ 리ν ν¬μ€ν
μ
λλ€.
JPA μ 맀ν μ΄λ
Έν
μ΄μ
κ°μ²΄μ ν
μ΄λΈ 맀ν : @Entity, @Table κΈ°λ³Έ ν€ λ§€ν : @Id νλμ μ»¬λΌ λ§€ν : @Column μ°κ΄κ΄κ³ 맀ν : @ManyToOne, @JoinColumn 4.1 @Entity ν
μ΄λΈμ 맀νν λ @Entity μ΄λ
Έν
μ΄μ
μ νμλ‘ λΆμ΄μΌ νλ€. μμ± κΈ°λ₯ κΈ°λ³Έκ° name JPA μμ μ¬μ©ν μν°ν° μ΄λ¦μ μ§μ νλ€. λ³΄ν΅ κΈ°λ³Έκ°μΈ ν΄λμ€ μ΄λ¦μ μ¬μ©νλ€. μ€μ νμ§ μμΌλ©΄ ν΄λμ€ μ΄λ¦μ κ·Έλλ‘ μ¬μ©. @Entity μ μ©μ μ£Όμν μ 맀κ°λ³μκ° μλ κΈ°λ³Έ μμ±μλ νμ.
μ€νλ§ 5.0 λ§μ€ν° μ€ν°λ μ€νλ§ 5.0 λ§μ€ν° μ€ν°λ νμ΅ λ΄μ© μ 리μ
λλ€. 리μ‘ν°λΈ μ€νΈλ¦Ό μμ‘΄μ± μΆκ° 1 2 implementation ('org.reactivestreams:reactive-streams:1.0.2') implementation ('org.reactivestreams:reactive-streams-tck:1.0.2') 리μ‘ν°λΈ μ€νΈλ¦Όμ ꡬμ±μμ Publisher : λ°μ΄ν° μ 곡μ. ꡬλ
ν ꡬλ
μλ€μκ² κ΅¬λ
μ 보λ₯Ό ν λλ‘ λ°μ΄ν°λ₯Ό μ 곡νλ€. Subscriber : λ°μ΄ν° μλͺ¨μ. μ 곡μλ‘λΆν° λ°μ΄ν°λ₯Ό λ°μ μλͺ¨νλ€. Subscription : ꡬλ
μ 보. Subscriber λ Publisher λ₯Ό ꡬλ
νμ¬ λ°μ΄ν°(n) μμ²ν μ μλ€. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 // Publisher package org.
μ€νλ§ 5.0 λ§μ€ν° μ€ν°λ μ€νλ§ 5.0 λ§μ€ν° μ€ν°λ νμ΅ λ΄μ© μ 리μ
λλ€. 리μ‘ν°λΈ μμ€ν
μλ‘μ΄ λλ°μ΄μ€ (λͺ¨λ°μΌ, νλΈλ¦Ώ λ±) real-time data μ λν μμ μ¦κ°
λλμ νλ‘μΈμ€ μ²λ¦¬ λ‘λ λ°μ λ°μ΄ν° λ³Όλ₯¨μ΄ κΈ°νκΈμμ μΌλ‘ μ¦κ° μΈνλΌ μ μ§ λ³΄μ λΉμ© μ¦κ° Reactive μμ€ν
νΉμ§ Reactive manifesto : https://www.reactivemanifesto.org/ko
Reative Manifesto λ λ€μ λ€ κ°μ§ ν΅μ¬ μμΉμ λ°λΌ Reactive System μ νΉμ±μ κ°λ΅μ μΌλ‘ μ€λͺ
νκ³ μλ€.
λ°μμ± (Responsive) : λͺ¨λ μλ΅μ μ μμ λΉ λ₯΄κ³ μΌκ΄λ λμμ μ 곡νλ©° μ λ’°ν μ μμΌλ©° μΌκ΄λ μλΉμ€ νμ§μ μ 곡νλ€.