Home
>
CS
>
2024
>
πΎ [CS] μμμ±(Persistence)λ 무μμΌκΉ?
CS
βπΎ [CS] μμμ±(Persistence)λ 무μμΌκΉ?β
μμμ±(Persistence) μ΄λ λ°μ΄ν°λ κ°μ²΄μ μνλ₯Ό μ§μμ μΌλ‘ μ μ₯νμ¬ νλ‘κ·Έλ¨μ΄ μ’
λ£λκ±°λ μμ€ν
μ΄ μ¬λΆν
λλλΌλ κ·Έ μνκ° μ μ§λλ κ²μ μλ―Έν©λλ€.
κ°λ¨ν λ§νλ©΄, μμμ±μ λ°μ΄ν°λ₯Ό μꡬμ μΌλ‘ μ μ₯νλ λ₯λ ₯μ κ°λ¦¬ν΅λλ€.
μννΈμ¨μ΄ μμ€ν
μμλ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€, νμΌ μμ€ν
, μμ μ μ₯μμ κ°μ μΈλΆ μ μ₯μμ λ°μ΄ν°λ₯Ό μ μ₯νλ κ²μ μμμ±μ΄λΌκ³ ν©λλ€.
1οΈβ£ μμμ±μ μ.
λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°
λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ λ°μ΄ν°λ μμ€ν
μ΄ μ’
λ£λκ±°λ μ μμ΄ κΊΌμ Έλ μꡬμ μΌλ‘ μ μ₯λ©λλ€.
νλ‘κ·Έλ¨μ΄ λ€μ μ€νλ λ μ΄ λ°μ΄ν°λ₯Ό λΆλ¬μμ μ¬μ©ν μ μμ΅λλ€.
νμΌ μμ€ν
μ μ μ₯λ λ°μ΄ν°
νμΌ μμ€ν
μ μ μ₯λ νμΌλ μμ€ν
μ¬λΆν
νμλ μ μ§λλ©°, λμ€μ λ€μ μ¬μ©ν μ μμ΅λλ€.
2οΈβ£ μμμ±μ μ€μμ±.
μννΈμ¨μ΄ μμ€ν
μμλ λλΆλΆμ λ°μ΄ν°κ° λ©λͺ¨λ¦¬(νλ°μ±)μλ§ μ‘΄μ¬νλ©΄ νλ‘κ·Έλ¨μ΄ μ’
λ£λκ±°λ μ₯μ κ° λ°μν λ λ°μ΄ν°λ₯Ό μκ² λ©λλ€.
μμμ± μ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ΄ μ’
λ£λλλΌλ μ€μν λ°μ΄ν°λ λ°μ΄ν°λ² μ΄μ€λ νμΌ μμ€ν
μ μ μ₯λλ―λ‘ μμ€ν
μ΄ λ€μ μμλμμ λ λ°μ΄ν°λ₯Ό 볡ꡬνκ±°λ μ΄μ΄μ μ¬μ©ν μ μμ΅λλ€.
3οΈβ£ Java λ° Springμμμ μμμ±.
Java νκ²½, νΉν JPA(Java Persistence API) λ₯Ό μ¬μ©νλ μ ν리μΌμ΄μ
μμ μμμ± μ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€μ μλ° κ°μ²΄ κ°μ μν μ μ§λ₯Ό μλ―Έν©λλ€.
JPAλ μλ° κ°μ²΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μμμ μΌλ‘ μ μ₯νκ³ , νμν λ λ°μ΄ν°λ₯Ό μ‘°ννμ¬ λ€μ κ°μ²΄λ‘ λ³ννλ κ³Όμ μ μλμΌλ‘ μ²λ¦¬ν©λλ€.
JAPμμμ μ£Όμ κ°λ
.
1. μμμ± μ»¨ν
μ€νΈ(Persistence Context)
μμμ± μ»¨ν
μ€νΈλ JPAμμ μλ° κ°μ²΄(Entity)λ₯Ό κ΄λ¦¬νλ μΌμ’
μ μΊμ λ©λͺ¨λ¦¬μ
λλ€.
μν°ν°κ° μμμ± μ»¨ν
μ€νΈμ ν¬ν¨λλ©΄, ν΄λΉ μν°ν°λ λ°μ΄ν°λ² μ΄μ€μ μμ λ©λλ€.
μμμ± μ»¨ν
μ€νΈλ μν°ν°μ μν λ³νλ₯Ό κ°μ§νκ³ , κ·Έ λ³νκ° νΈλμμ
μ΄ λλ λ λ°μ΄ν°λ² μ΄μ€μ λ°μλλλ‘ κ΄λ¦¬ν©λλ€.
2. μν°ν°(Entity)
JPAμμ μν°ν°λ λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈκ³Ό 맀νλλ μλ° κ°μ²΄ μ
λλ€.
μν°ν°λ λ°μ΄ν°λ₯Ό μμμ μΌλ‘ μ μ§νκΈ° μν μλ¨μΌλ‘, JPAλ μ΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯νκ³ λ€μ λΆλ¬μ΅λλ€.
3. EntityManager
EntityManager
λ JPAμ ν΅μ¬ μΈν
νμ΄μ€λ‘, μν°ν°μ CRUD(μμ±, μ‘°ν, μμ , μμ ) μμ
μ λ΄λΉν©λλ€.
EntityManager
λ μμμ± μ»¨ν
μ€νΈλ₯Ό κ΄λ¦¬νλ©°, λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ μ²λ¦¬ν©λλ€.
persist()
λ©μλλ₯Ό ν΅ν΄ μν°ν°λ₯Ό μμμ± μ»¨ν
μ€νΈμ μ μ₯νκ³ , μ΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ λ°μν μ μμ΅λλ€.
4. μμ μν(Persistent State)
JPAμμ μν°ν° κ°μ²΄λ λ€μ μΈ κ°μ§ μνλ₯Ό κ°μ§λλ€.
λΉμμ(Transient) : λ°μ΄ν°λ² μ΄μ€μ μ ν μ°κ²°λμ§ μμ μνμ
λλ€.
μμ(Persistent) : μν°ν°κ° μμμ± μ»¨ν
μ€νΈμ ν¬ν¨λμ΄ κ΄λ¦¬λκ³ μλ μνλ‘, λ°μ΄ν°λ² μ΄μ€μ κΈ°λ‘λκ±°λ κΈ°λ‘λ μ€λΉκ° λμ΄ μλ μνμ
λλ€.
μ€μμ(Detached) : μμμ± μ»¨ν
μ€νΈμ μν΄ κ΄λ¦¬λμ§ μμ§λ§ λ°μ΄ν°λ² μ΄μ€μλ μ¬μ ν μ‘΄μ¬νλ μνμ
λλ€.
μμ μν μ μ΄ μμ
@Entity
public class User {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name ;
}
/ / μμμ± μ»¨ν
μ€νΈμ EntityManagerλ₯Ό μ¬μ©ν μμμ± μμ
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin ();
/ / 1. λΉμμ μν: User κ°μ²΄λ μμ§ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°λμ§ μμ
User user = new User ();
user.setName("Kobe");
/ / 2. μμ μν: persist()λ‘ μμμ± μ»¨ν
μ€νΈμ μ μ₯λ¨
entityManager.persist(user );
/ / 3. νΈλμμ
μ΄ μλ£λλ©΄, λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ¨
entityManager.getTransaction().commit ();
entityManager.close();
μ€λͺ
.
λΉμμ μν : new User()
λ‘ μμ±λ κ°μ²΄λ λ©λͺ¨λ¦¬μμλ§ μ‘΄μ¬νκ³ , μμ§ λ°μ΄ν°λ² μ΄μ€μ μ°κ²°λμ§ μμμ΅λλ€.
μμ μν : entityManager.persist(user)
λ₯Ό νΈμΆνλ©΄ κ°μ²΄λ μμμ± μ»¨ν
μ€νΈμ μ μ₯λκ³ , λ°μ΄ν°λ² μ΄μ€μ λ°μλ μ€λΉκ° λ©λλ€.
νΈλμμ
μ΄ μ»€λ°λλ©΄, μμμ± μ»¨ν
μ€νΈμ μλ κ°μ²΄μ μνκ° λ°μ΄ν°λ² μ΄μ€μ μꡬμ μΌλ‘ μ μ₯λ©λλ€.
4οΈβ£ μ 리.
μμμ± μ λ°μ΄ν°λ₯Ό μꡬμ μΌλ‘ μ μ₯νλ κΈ°λ₯μ
λλ€.
μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€λ νμΌ μμ€ν
μ λ°μ΄ν°λ₯Ό μ μ₯νμ¬ νλ‘κ·Έλ¨μ΄ μ’
λ£λλλΌλ λ°μ΄ν°κ° μ μ§λ μ μκ² ν©λλ€.
JPAμμ μμμ± μ κ°μ²΄(Entity)μ μνλ₯Ό μμμ± μ»¨ν
μ€νΈμμ κ΄λ¦¬νκ³ , μ΄ μνκ° λ°μ΄ν°λ² μ΄μ€μ μ°λλμ΄ μ§μλ μ μκ² νλ κ²μ μλ―Έν©λλ€.
μμμ± μ»¨ν
μ€νΈλ JPAμμ μν°ν° κ°μ²΄μ μνλ₯Ό κ΄λ¦¬νκ³ , λ°μ΄ν°λ² μ΄μ€μμ λκΈ°νλ₯Ό μ²λ¦¬νλ μ€μν λ©μ»€λμ¦μ
λλ€.