๋ฉ‹์‚ฌ Backend Plus 16์ผ์ฐจ ๐Ÿฆ

์‹ ์žฌ์›ยท2023๋…„ 11์›” 14์ผ

์ด์ „ mybatis ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๋А๋‚€์ ๊ณผ ์˜ค๋Š˜ JPA ๋ฅผ ๋ฐฐ์šฐ๋ฉฐ ๋А๋‚€์ ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

JPA ๋ž€

๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ €ํฌ๊ฐ€ ํ‰์†Œ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋˜ ์ž๋ฐ” ๋กœ์ง๋งŒ ์žˆ๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค. (sql ๋ฌธ์„ ์ง์ ‘ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž‘์„ฑ X)
์ฆ‰ ์ด๋ง์€ sql ๊ตฌ์กฐ๋ฅผ ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์‚ฌ์ง„์€ ์ด์ „์— ์ œ๊ฐ€ Spring Data JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์ง„์—์„œ ์ฒ˜๋Ÿผ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์†Œํ†ต์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Entity ํด๋ž˜์Šค ํ•œ๊ฐœ์˜ ํ…Œ์ด๋ธ” 1๊ฐœ๋กœ ๋งคํ•‘
  • Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งŽ์€ ์ œ์•ฝ? ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • Entity ํด๋ž˜์Šค์—์„œ๋Š” setter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ Protected ๋กœ ๋งŒ๋“ค์–ด ์™ธ๋ถ€์—์„œ ๋ณ€๊ฒฝ์„ ๋ง‰๋Š”๋‹ค. (private ์œผ๋กœ ํ•˜๋ฉด JPA ์—์„œ๋„ ์ ‘๊ทผ ๋ชปํ•จ) ๋“ฑ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ํ…Œ์ด๋ธ”์ด ์—„์ฒญ ๋ณต์žกํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด JPA๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ง์ ‘ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ๋ ์ˆ˜๋„ ์žˆ๋‹ค -> ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ• ์ค„ ์•Œ์•„์•ผํ•จ


์œ„์˜ ์‚ฌ์ง„์—์„œ Entity ํด๋ž˜์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํด๋ž˜์Šค๋กœ EntityManger ๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ถ€ํ„ฐ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ ์„ค๋ช…์„ ์•ˆํ•ด์ฃผ์…จ๋‹ค..... (์ค‘์š”ํ•œ ๋‚ด์šฉ์ผ ํ…๋ฐ ์™œ ์•ˆํ•˜์…จ์ง€..)

EntityManget๋Š” 4๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • persist() : ์ €์žฅ
  • find() : ์ฐพ๊ธฐ
  • remove() : ์‚ญ์ œ
  • merge() : ๋ณ€๊ฒฝ์‚ฌํ•ญ

(์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋„ ๊น€์˜ํ•œ๋‹˜์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋ฉฐ ์•Œ์•˜์Œ)

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์‹œ ๋ณต์Šต ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

๋А๋‚€์ 

์ด์ „์—๋Š” Spring Data Jpa ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ• ๋•Œ๋Š” @Entity ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ…Œ์ด๋ธ”๊ฐ„์˜ ์—ฐ๊ด€๊ด€๊ณ„๋Š”
@ManyToOne (๋‹ค๋Œ€์ผ) , @OneToOne (์ผ๋Œ€์ผ) ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ํ…Œ์ด๋ธ”๊ฐ„์˜ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ด์คฌ๋”๋ผ๋ฉด,

mybatis ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ๋Š” ์™ธ๋ž˜ํ‚ค๋ฅผ inner join ๋“ฑ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•ด์ค˜์•ผ ๋˜๊ณ  @Mapper ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด xml ํŒŒ์ผ์˜ sql ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๋งคํ•‘ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

REFERENCE

https://dbjh.tistory.com/77 (JPA๋ž€)
https://perfectacle.github.io/2018/01/14/jpa-entity-manager-factory/ (EntityManger ๊ฐœ๋…, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)

0๊ฐœ์˜ ๋Œ“๊ธ€