Backend/JPA

[JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

2024. 2. 9. 22:11
๋ชฉ์ฐจ
  1. ๐Ÿค” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ?
  2. โœ” ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ & ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € Process
  3. โœ” ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ
  4. ๐Ÿ“Ž ๋น„์˜์†(new/transient)
  5. ๐Ÿ“Ž ์˜์†(managed)
  6. ๐Ÿ“Ž ์ค€์˜์†(detached)
  7. ๐Ÿ“Ž ์‚ญ์ œ(removed)
  8. โœ” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์ 
  9. ๐Ÿ”Ž 1์ฐจ ์บ์‹œ ์กฐํšŒ
  10. ๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ๋“ฑ๋ก - ์“ฐ๊ธฐ ์ง€์—ฐ
  11. ๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • - ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)
  12. ๐Ÿ“Œ ์š”์•ฝ

๐Ÿค” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ?

์˜๋ฏธ๋ฅผ ํ•ด์„ํ•ด๋ณด์ž๋ฉด "์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ" ์ด๋ผ๋Š” ๋œป์œผ๋กœ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์ด๋‹ค, EntityManager๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•œ๋‹ค.

 

โœ” ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ & ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € Process

EntityManager.persist(entity); // ์˜์†ํ™”

EntityManager๋ฅผ ์ƒ์„ฑํ•˜๋ฉด 1:1๋กœ PersistenceContext๋ผ๋Š” ๊ณต๊ฐ„์ด ์ƒ์„ฑ๋˜์–ด์ง€๊ณ , Entity๋ฅผ DB์— ์ €์žฅํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ PersistenceContext์— ์ €์žฅํ•œ๋‹ค.


โœ” ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ

 

๐Ÿ“Ž ๋น„์˜์†(new/transient)

//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ ( ๋น„์˜์† )
Member member = new Member();
member.setId("member1");
member.setName("username");

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ๋งŒ ํ•œ ์ƒํƒœ๋กœ JPA์™€ ์ „ํ˜€ ๊ด€๊ณ„์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ

 

๐Ÿ“Ž ์˜์†(managed)

//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ ( ๋น„์˜์† )
Member member = new Member();
member.setId("member1");
member.setName("username");

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ์ƒํƒœ(์˜์†)
em.persist(member);

์ƒ์„ฑํ•œ member๊ฐ์ฒด๋ฅผ EntityManager๋ฅผ ํ†ตํ•ด persistํ•˜์—ฌ PersistenceContext์— ์ €์žฅํ•œ ์ƒํƒœ

 

๐Ÿ“Ž ์ค€์˜์†(detached)

em.detach(member); //ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋งŒ ์ค€์˜์† ์ƒํƒœ๋กœ ์ „ํ™˜
em.clear(); // ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์™„์ „ํžˆ ์ดˆ๊ธฐํ™”
em.close(); // ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ข…๋ฃŒ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ

 

๐Ÿ“Ž ์‚ญ์ œ(removed)

em.remove(member);

์‚ญ์ œ๋œ ์ƒํƒœ


โœ” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์ 

๐Ÿ”Ž 1์ฐจ ์บ์‹œ ์กฐํšŒ

      //๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ ( ๋น„์˜์† )
      Member member = new Member();
      member.setId("member1");
      member.setName("username");
      .
      .
      .
      //๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ์ƒํƒœ(์˜์†)
      em.persist(member); // 1์ฐจ ์บ์‹œ์— ์ €์žฅ๋จ

      // 1์ฐจ ์บ์‹œ์—์„œ ์กฐํšŒ
      Member findMember = em.find(Member.class, "member1");
      // DB์—์„œ ์กฐํšŒ
      Member findMember2 = em.find(Member.class, "member2"); // DB์กฐํšŒ ํ›„ 1์ฐจ์บ์‹œ์— ์ €์žฅ

EntityManager๋Š” transaction๋‹จ์œ„๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๊ฐ์˜ ์š”์ฒญ ํ›„ ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ๋๋‚˜๊ฒŒ๋˜๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ์ง€์›Œ์ง€๊ณ , ์‚ฌ์šฉ์ž ๋ชจ๋‘๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์บ์‹œ๊ฐ€ ์•„๋‹Œ 1์ฐจ ์บ์‹œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์„ฑ๋Šฅ์ƒ์˜ ์ด์ ์„ ๊ธฐ๋Œ€ํ•˜๊ธด ํž˜๋“ค์ง€๋งŒ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ณต์žกํ•œ ๊ฒฝ์šฐ์—๋Š” ์ด์ ์„ ์–ป์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ“Œ ์˜์† ์—”ํ‹ฐํ‹ฐ์˜ ๋™์ผ์„ฑ ๋ณด์žฅ

Member a = em.find(Memeber.class, "Member1");
Member b = em.find(Member.class, "Memeber2");
a == b // true

Java Collection์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š”๊ฒƒ๊ณผ ๊ฐ™์ด ๊ฐ™์€ Reference์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฐ™์€ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค, ์ด๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ 1์ฐจ์บ์‹œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ๋“ฑ๋ก - ์“ฐ๊ธฐ ์ง€์—ฐ

em.persist(memberA)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด JPA๊ฐ€ memberA๋ฅผ ๋ถ„์„ํ•˜์—ฌ Insert SQL์„ ์ƒ์ƒํ•˜์—ฌ ์“ฐ๊ธฐ์ง€์—ฐ SQL์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค. memberB๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.
์“ฐ๊ธฐ ์ง€์—ฐ SQL์ €์žฅ์†Œ์— ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ธ SQL์€ transaction.commit() ๋ช…๋ น๊ณผ ํ•จ๊ป˜ flush ๋˜์–ด ํ•œ๋ฒˆ์— ์‹คํ–‰๋˜์–ด์ง„๋‹ค.

 

 

๐Ÿ’ก๊ทธ๋Ÿผ ์™œ ํ•œ๋ฒˆ์— ๋ชจ์•„์„œ ๋ณด๋‚ผ๊นŒ?

DB์— ์•„๋ฌด๋ฆฌ insertํ•˜๋”๋ผ๋„ commit๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐ˜์˜์ด ์•ˆ๋˜๊ธฐ๋•Œ๋ฌธ์— commit์ด์ „์—๋งŒ ์‹คํ–‰๋˜๋ฉด ๋œ๋‹ค ๋˜ํ•œ ์‹คํ–‰ ๋  ๋•Œ๋งˆ๋‹ค SQL์„ ๋ณด๋‚ด์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
Hibernate์—์„œ๋Š” ์˜ต์…˜์œผ๋กœ ์„ค์ •ํ•œ size๋งŒํผ SQL์„ ๋ชจ์•„์„œ flushํ•œ๋‹ค

    <propert name="hibernate.jdbc.batch_size" value="10" />

๋ฒ„ํผ๋ง๊ฐ™์€ ๊ธฐ๋Šฅ์œผ๋กœ ๋ชจ์•˜๋‹ค๊ฐ€ DB๋กœ ์ €์žฅํ•จ์œผ๋กœ์จ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • - ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)

JPA์˜ ๋ชฉ์ ์€ Java Collection๋‹ค๋ฃจ๋“ฏ์ด ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— update๋ผ๋Š” ํŠน์ • ๋ช…๋ น์—†์ด ๊ฐ์ฒด๋ฅผ setํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ DB์— ๋ฐ˜์˜ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” 1์ฐจ ์บ์‹œ ์•ˆ์—๋Š” ์Šค๋ƒ…์ƒท์ด๋ž€ ๊ณต๊ฐ„์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์Šค๋ƒ…์ƒท์€ ๊ฐ’์„ ์ตœ์ดˆ๋กœ ์ฝ์–ด์˜จ ์‹œ์ ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ , flush๋˜๋Š” ์‹œ์ ์— Entity์™€ ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•˜์—ฌ ์ฆ‰ ์ตœ์ดˆ ์‹œ์ ์˜ Entity์™€ flush์‹œ์ ์˜ Entity๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉด ๋‚ด๋ถ€์ ์œผ๋กœ update์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค.

 

๐Ÿ“Œ flush
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•œ๋‹ค

  • em.flush() - ์ง์ ‘ํ˜ธ์ถœ
  • ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ - ํ”Œ๋Ÿฌ์‹œ ์ž๋™ ํ˜ธ์ถœ
  • JPQL ์ฟผ๋ฆฌ ์‹คํ–‰ - ํ”Œ๋Ÿฌ์‹œ ์ž๋™ ํ˜ธ์ถœ
  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋น„์šฐ์ง€ ์•Š๋Š”๋‹ค.
  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™๊ธฐํ™”
  • ํŠธ๋žœ์žญ์…˜์ด๋ผ๋Š” ์ž‘์—… ๋‹จ์œ„๊ฐ€ ์ค‘์š” -> ์ปค๋ฐ‹ ์ง์ „์—๋งŒ ๋™๊ธฐํ™” ํ•˜๋ฉด ๋จ

๐Ÿ“Œ ์š”์•ฝ

JPA๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ํ•˜๋ฉด EntityManagerFactory์—์„œ EntityManager๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(PersistenceContext)๋ผ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ํŠธ๋ Œ์ ์…˜ ๋‹จ์œ„ ์•ˆ์—์„œ ์ž‘๋™ํ•˜๊ฒŒ ๋˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค๊ฐ€ ๋๋‚˜๋ฉด ์‚ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.
๋˜ํ•œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์—๋Š” 1์ฐจ์บ์‹œ์™€ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ†ตํ•ด 1์ฐจ ์บ์‹œ ์กฐํšŒ, ์“ฐ๊ธฐ ์ง€์—ฐ, ๋ณ€๊ฒฝ ๊ฐ์ง€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค.
๋ฐ์ดํ„ฐ์˜ ์กฐํšŒ, ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ์‹œ Java ๊ฐ์ฒด ๋‹ค๋ฃจ๋“ฏ ๋‚ด๋ถ€์ ์œผ๋กœ ๋น„๊ตํ•˜์—ฌ SQL๋ฌธ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ตœ์ ํ™”๋œ SQL๋ฌธ์„ ์ƒ์„ฑํ•˜์—ฌ DB์— ์š”์ฒญํ•œ๋‹ค.


 

๐Ÿ“š ์ฐธ๊ณ  ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜ : ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ (๊น€์˜ํ•œ)

'Backend > JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JPA] ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘, @MappedSuperclass  (0) 2024.03.07
[JPA] ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ( ManyToOne, OneToMany, OneToOne, ManyToMany )  (0) 2024.03.04
[JPA] ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋ง๊ณผ ์–‘๋ฐฉํ–ฅ,๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘  (0) 2024.02.17
[JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘  (0) 2024.02.10
[JPA] SQL ์ค‘์‹ฌ์  ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ ๊ณผ JPA๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ   (0) 2024.02.08
  1. ๐Ÿค” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ?
  2. โœ” ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ & ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € Process
  3. โœ” ์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ
  4. ๐Ÿ“Ž ๋น„์˜์†(new/transient)
  5. ๐Ÿ“Ž ์˜์†(managed)
  6. ๐Ÿ“Ž ์ค€์˜์†(detached)
  7. ๐Ÿ“Ž ์‚ญ์ œ(removed)
  8. โœ” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์ 
  9. ๐Ÿ”Ž 1์ฐจ ์บ์‹œ ์กฐํšŒ
  10. ๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ๋“ฑ๋ก - ์“ฐ๊ธฐ ์ง€์—ฐ
  11. ๐Ÿ”Ž ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • - ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)
  12. ๐Ÿ“Œ ์š”์•ฝ
'Backend/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JPA] ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ( ManyToOne, OneToMany, OneToOne, ManyToMany )
  • [JPA] ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋ง๊ณผ ์–‘๋ฐฉํ–ฅ,๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
  • [JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
  • [JPA] SQL ์ค‘์‹ฌ์  ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ ๊ณผ JPA๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
์žฅ์šฉ์„
์žฅ์šฉ์„
๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์žฅ์šฉ์„
dot
์žฅ์šฉ์„
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (38)
    • Backend (12)
      • JPA (7)
      • Spring (3)
    • CS (2)
    • Algorithm (18)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • ๋ฌธ์ œ (10)
    • Project (6)
      • SpringBoot+JPA ๊ฒŒ์‹œํŒ (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ORM
  • Java
  • dfs
  • ์ž๋ฐ”
  • JPA
  • ํ…Œ์ŠคํŠธ์ฝ”๋“œ
  • spring data JPA
  • ์‹ค๋ฒ„
  • DP
  • ๊ฒŒ์‹œํŒ
  • Builder
  • CRUD
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ฐฑํŠธ๋ž˜ํ‚น
  • 1890๋ฒˆ
  • spring
  • 12865๋ฒˆ
  • ๋ฐฑ์ค€
  • ๊ณจ๋“œ
  • ์ž๋ฃŒ๊ตฌ์กฐ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
์žฅ์šฉ์„
[JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.