[Spring Data JPA] JPA Entity ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

2024. 12. 30. 19:29ยท๐Ÿ› ๏ธBackend/๐ŸŒณSpring

JPA ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์ˆ˜ Entity ๊ฐ์ฒด

@PersistenceContext
private EntityManager entityManager;

public User getUser(Long userId) {
    User user = entityManager.find(User.class, userId);
    return user;  // JPA๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ํ•„๋“œ ๊ฐ’์„ ์„ค์ •
}

ํ•ด๋‹น ๊ณผ์ •์„ ์‚ดํŽด ๋ณด๋ฉด entityManager.find ์ฆ‰, ์กฐํšŒ ๊ณผ์ •์—์„œ User.class ํƒ€์ž…์„ ์ธ์ž๋กœ ๋ฐ›๊ณ  ์žˆ๋‹ค.

์ด User.class ์ด ํด๋ž˜์Šค ์ •๋ณด๋กœ ๋‚ด๋ถ€์— ์• ๋„ˆํ…Œ์ด์…˜์ด๋‚˜ ํ•„๋“œ ์ƒ์„ฑ์ž ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ, ๋Œ์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์ฃผ๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๊ฐ’์„ ๋‹ด์•„์ฃผ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š”๊ฐ€? ๊ทธ๊ฑด class์ •๋ณด๋ฅผ ๋„˜๊ธฐ๋ฉด์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์˜ ์ •๋ณด ๋˜ํ•œ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿผ ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

๊ฒฐ๋ก ์€, ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ™œ์šฉํ•ด ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ์ฒด๋กœ ๋‹ด์•„์„œ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•จ.

 

์ฐธ๊ณ ๋กœ ํ•ด๋‹น ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” public ๋˜๋Š” protected ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

์ด ๋˜ํ•œ, 

 

Spring Data JPA ์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

Spring Data JPA์—์„œ๋Š” ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด EntityManager๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ.

์ฆ‰, ์œ„์˜ ์ฝ”๋“œ๋“ค์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณต์„ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•˜๊ฒŒ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

์ฐธ๊ณ ๋กœ JPA๋‚˜ Spring Data JPA์—์„œ๋Š” ๋งค ์š”์ฒญ๋งˆ๋‹ค ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ EntityManager๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ œ๊ณต์„ ํ•ด์ค€๋‹ค.

 

 

๋‚ด๊ฐ€ ์™œ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‚˜ ๋ณด๋ฉด

 

๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๋‹น์‹œ JPA๋ฅผ ํ™œ์šฉํ•˜์—ฌ Entityํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค์— ๊ฐ’์„ ๋„ฃ์–ด DB์— insert๋ฅผ ํ•ด์ฃผ๋Š” ๋กœ์ง์„ ์งฐ์—ˆ๋‹ค. ์ด๋•Œ, ๋‚˜๋Š” Entity์— ํ•„๋“œ๊ฐ€ ๋งŽ์•„ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ธฐ์—๋Š” ๋ฐ์ดํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋Œ€ํ•œ ๋ช…ํ™•ํ•จ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ์ด ๋˜์–ด Builder ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ดํ›„, Lombok์˜ @Builder ์• ๋„ˆํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ, Builder ํŒจํ„ด์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ด๋•Œ ๋‚˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” BuilderํŒจํ„ด์€ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ private์œผ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ์ผ๋ฐ˜์ ์ธ๋ฐ, JPA์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•˜๋ฉด์„œ ํ•ด๋‹น ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” public ์ ‘๊ทผ ์ œ์–ด์ž ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ ๋ชจ์ˆœ์„ ๋А๊ผˆ๋‹ค.

 

Builder ํŒจํ„ด์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ private์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ด์œ 

์• ์ดˆ์— builderํŒจํ„ด์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ํ™œ์šฉ์„ ํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” private์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  public์œผ๋กœ ์—ด์–ด๋‘”๋‹ค๋ฉด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž ๋ฐ Builder ๋ฐฉ์‹ ์ด 2๊ฐ€์ง€๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌ๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ผ๊ด€์„ฑ๊ณผ Builder ํŒจํ„ด์˜ ์˜๋„๊ฐ€ ์ƒ์‹ค์ด ๋  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

๊ฒฐ๊ตญ JPA Entity ํด๋ž˜์Šค์—์„œ BuilderํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ๋„ฃ์–ด์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Builder ๋ฐ ์ƒ์„ฑ์ž ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๊ณต์กดํ•˜๊ฒŒ ๋˜๋ฉด์„œ ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋‹ต์€ JPA Entity ํด๋ž˜์Šค์—์„œ๋Š” public ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ™œ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋‹ค.

 

๊ฒฐ๋ก ์€ JPA Entity ํด๋ž˜์Šค์—์„œ๋Š” Builder ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฉ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค. ์ง€ํ–ฅํ•˜๋Š”๊ฒŒ ์ข‹์„๋“ฏ

'๐Ÿ› ๏ธBackend > ๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Framework] DispatcherServle  (0) 2025.05.12
[Spring Security] UsernamePasswordAuthenticationFilter  (0) 2025.05.07
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ  (0) 2024.11.14
[Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ  (1) 2024.11.05
[Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ & Bean ๊ฐœ๋… ์ดํ•ด ํ•˜๊ธฐ  (1) 2024.10.21
'๐Ÿ› ๏ธBackend/๐ŸŒณSpring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Spring Framework] DispatcherServle
  • [Spring Security] UsernamePasswordAuthenticationFilter
  • [Spring Framework] IoC ์ปจํ…Œ์ด๋„ˆ ๋™์ž‘ ์›๋ฆฌ
  • [Spring MVC] ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ๋™์ž‘ ์›๋ฆฌ
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (155)
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (26)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ›๏ธ์„ธ๊ณ„์˜์ •์น˜์™€๊ฒฝ์ œ (3)
      • ๐Ÿ› ๏ธBackend (52)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (21)
        • ๐ŸŒณSpring (11)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • Data Structure (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (65)
      • ์ •๋ณด (1)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์œ ๋น„์ฟผํ„ฐ์Šค
    ํด๋ž˜์Šค
    ์ž…์ถœ๋ ฅ
    Python
    ๋ฐฉํ†ต๋Œ€
    ๋‹คํ˜•์„ฑ
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ์Šคํ”„๋ง
    ํŒŒ์ด์ฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…
    ๋ฐฉ์†ก๋Œ€
    ํด๋ผ์šฐ๋“œ
    Java
    ์ž๋ฐ”
    ์„ธ๊ณ„ํ™”
    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    Spring Framework
    spring
    ์ปดํŒŒ์ผ๋Ÿฌ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[Spring Data JPA] JPA Entity ํด๋ž˜์Šค์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
์ƒ๋‹จ์œผ๋กœ

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