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;
// Getters, Setters, Constructors
}
// μμμ± μ»¨ν
μ€νΈμ 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μμ μν°ν° κ°μ²΄μ μνλ₯Ό κ΄λ¦¬νκ³ , λ°μ΄ν°λ² μ΄μ€μμ λκΈ°νλ₯Ό μ²λ¦¬νλ μ€μν λ©μ»€λμ¦μ
λλ€.