JPA

JPA ๊ตฌ๋™๋ฐฉ์‹

devJK93 2024. 12. 5.

๐Ÿ“ JPA ๊ตฌ๋™ ๋ฐฉ์‹

JPA์˜ ๊ตฌ๋™ ๋ฐฉ์‹์€ Persistence → EntityManagerFactory → EntityManager์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ฃผ์š” ํด๋ž˜์Šค์™€ ๊ตฌ๋™ ๋ฐฉ์‹์„ ๋‹จ๊ณ„๋ณ„๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. JPA์˜ ์ฃผ์š” ํด๋ž˜์Šค ๋ฐ ์—ญํ• 

  • Persistence:
    • JPA ํ‘œ์ค€์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค.
    • META-INF/persistence.xml ํŒŒ์ผ์„ ์ฝ์–ด EntityManagerFactory๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• .
  • EntityManagerFactory:
    • EntityManager๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์—์„œ ๊ณต์œ  ๊ฐ€๋Šฅ.
  • EntityManager:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์‹ค์ œ ์ƒํ˜ธ์ž‘์šฉ(์‚ฝ์ž…, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ)์„ ์ฒ˜๋ฆฌ.
    • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)๋ฅผ ๊ด€๋ฆฌ.

2. JPA ๊ตฌ๋™ ๋ฐฉ์‹

  1. persistence.xml ์ฝ๊ธฐ:
    • JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ META-INF/persistence.xml์„ ์ฝ์–ด ์„ค์ • ์ •๋ณด๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. Persistence.createEntityManagerFactory() ํ˜ธ์ถœ:
    • Persistence ํด๋ž˜์Šค๋Š” persistence.xml ํŒŒ์ผ์˜ ์„ค์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ EntityManagerFactory๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. EntityManagerFactory ์ƒ์„ฑ:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด ๋ฐ ORM ๋งคํ•‘ ์ •๋ณด๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  4. EntityManager ์ƒ์„ฑ:
    • EntityManagerFactory๋Š” ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„๋กœ ์‚ฌ์šฉํ•  EntityManager๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. JPA ์‹คํ–‰ ํ๋ฆ„

  1. Persistence.createEntityManagerFactory() ํ˜ธ์ถœ:JPA ํ‘œ์ค€ ํด๋ž˜์Šค์ธ Persistence๊ฐ€ persistence.xml์„ ์ฝ์–ด ์„ค์ •์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  2. EntityManagerFactory ์ดˆ๊ธฐํ™”:๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด์™€ Hibernate Dialect๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  3. EntityManager ์ƒ์„ฑ:EntityManager๋Š” ๊ฐ ํŠธ๋žœ์žญ์…˜๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋ฉฐ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ˆ˜ํ–‰:EntityManager๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…(CRUD)์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ฆฌ์†Œ์Šค ์ •๋ฆฌ:EntityManager์™€ EntityManagerFactory๋ฅผ ๋‹ซ์•„ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

4. JPA ์ฝ”๋“œ ์˜ˆ์ œ


import javax.persistence.*;

@Entity
class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getter, Setter
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

public class JpaExample {
    public static void main(String[] args) {
        // 1. EntityManagerFactory ์ƒ์„ฑ
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        // 2. EntityManager ์ƒ์„ฑ
        EntityManager em = emf.createEntityManager();

        // 3. ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
        EntityTransaction tx = em.getTransaction();
        tx.begin();

        try {
            // 4. ์—”ํ‹ฐํ‹ฐ ์ €์žฅ
            User user = new User();
            user.setName("John Doe");
            em.persist(user);

            // 5. ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        } finally {
            // 6. EntityManager ์ข…๋ฃŒ
            em.close();
        }

        // 7. EntityManagerFactory ์ข…๋ฃŒ
        emf.close();
    }
}

5. ์ฃผ์š” ํด๋ž˜์Šค ์š”์•ฝ

  • Persistence ํด๋ž˜์Šค:
    • JPA ์„ค์ • ํŒŒ์ผ(persistence.xml)์„ ์ฝ๊ณ  EntityManagerFactory๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• .
  • EntityManagerFactory ํด๋ž˜์Šค:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดˆ๊ธฐํ™”.
    • EntityManager๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒฉํ† ๋ฆฌ ์—ญํ• .
  • EntityManager ํด๋ž˜์Šค:
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌ.
  • EntityTransaction ํด๋ž˜์Šค:
    • ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์‹œ์ž‘(begin), ์ปค๋ฐ‹(commit), ๋กค๋ฐฑ(rollback) ์ž‘์—…์„ ์ฒ˜๋ฆฌ.

6. ๊ฒฐ๋ก 

JPA๋Š” Persistence → EntityManagerFactory → EntityManager์˜ ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ„์ธต์  ๊ตฌ์กฐ ๋•๋ถ„์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋…๋ฆฝ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€