๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ DevLog/Devcourse

[DevCourse] ์ƒ์„ฑํ˜• AI ํ™œ์šฉ ๋ฐฑ์—”๋“œ ๋ฐ๋ธŒ์ฝ”์Šค 55์ผ์ฐจ

by hyebin (Helia) 2025. 6. 29.
๋ฐ˜์‘ํ˜•

์˜ค๋Š˜์€ JPA์— ๋Œ€ํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•™์Šตํ–ˆ๋‹ค.

๊ทธ๋™์•ˆ MyBatis๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ค„์™”๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ORM ๊ธฐ์ˆ ์ธ JPA๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์•˜๋‹ค.


๐Ÿ“Œ ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ ์ •๋ฆฌ

๐Ÿ”ท JPA๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ์“ฐ๋Š”๊ฐ€

JPA๋Š” Java Persistence API์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•ด ์ฃผ๋Š” ORM ๊ธฐ์ˆ ์ด๋‹ค. ๊ทธ๋™์•ˆ์€ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ๋งคํ•‘ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, JPA๋Š” ์ด๋ฅผ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ์ถ”์ƒํ™”ํ•ด ์ค˜์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์งˆ์ ์ธ ๋™์ž‘์€ Hibernate ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ•˜๊ณ , Spring์—์„œ๋Š” ์ด JPA๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก Spring Data JPA๋ผ๋Š” ๋ชจ๋“ˆ๋„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฒƒ๋„ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๐Ÿ”ถ ๊ฐ์ฒด ์ค‘์‹ฌ ์„ค๊ณ„์˜ ์žฅ์ ๊ณผ ์ฃผ์˜์ 

MyBatis์—์„œ๋Š” ํ…Œ์ด๋ธ” ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋ฅผ ํ•ด์™”๋‹ค๋ฉด, JPA๋Š” ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ์‹œ์Šคํ…œ์„ ๋ฐ”๋ผ๋ณธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Member๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์—”ํ‹ฐํ‹ฐ๋กœ ์„ ์–ธํ•˜๊ณ , @Entity, @Id, @Column ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋ฉด JPA๊ฐ€ ์•Œ์•„์„œ DB์™€ ํ†ต์‹ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„ ๋งคํ•‘, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ, ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋“ฑ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋ถ€์กฑํ•˜๋ฉด ์˜คํžˆ๋ ค ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋ฒ„๊ทธ๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋„ ๋ช…ํ™•ํžˆ ๋А๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๐Ÿ”ธ Spring Data JPA์˜ ์‚ฌ์šฉ์„ฑ

๊ธฐ๋ณธ์ ์ธ CRUD๋Š” JpaRepository๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ , ๋ฉ”์„œ๋“œ ๋ช…๋งŒ์œผ๋กœ๋„ ์ฟผ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด findByEmail(String email) ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋งŒ ์„ ์–ธํ•ด๋„ JPA๊ฐ€ ์•Œ์•„์„œ SELECT * FROM member WHERE email = ? ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•ด ์ค€๋‹ค๋Š” ์ ์ด ๊ต‰์žฅํžˆ ์ธ์ƒ ๊นŠ์—ˆ๋‹ค.

๋ฌผ๋ก , ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ JPQL์ด๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์จ์•ผ ํ•˜์ง€๋งŒ, ๋‹จ์ˆœํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—์„œ๋Š” ์••๋„์ ์ธ ์ƒ์‚ฐ์„ฑ์„ ๋ณด์—ฌ์ค€๋‹ค๋Š” ๊ฑธ ์‹ค์Šต์„ ํ†ตํ•ด ์ฒด๊ฐํ–ˆ๋‹ค.


๐Ÿงก ๋А๋‚€ ์ 

์˜ค๋Š˜ JPA๋ฅผ ์ฒ˜์Œ ํ•™์Šตํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฌ๊ฒŒ ๋А๋‚€ ๊ฑด, ‘๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๋ผ๋ณด๋Š” ์‹œ์„ ’์ด์—ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€๋Š” DB์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์งœ์™”์ง€๋งŒ, JPA๋Š” ์ฝ”๋“œ๊ฐ€ ์ค‘์‹ฌ์ด ๋˜๊ณ  DB๋Š” ๊ทธ์— ๋งž์ถฐ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ฒ ํ•™์ด ๋ถ„๋ช…ํ–ˆ๋‹ค.

JPA๋Š” ํ•™์Šตํ•  ๊ฐœ๋…๋„ ๋งŽ๊ณ  ์„ค์ •๋„ ๋ณต์žกํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ๋” ๋‚˜์€ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๋„๊ตฌ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

ํŠนํžˆ Spring Boot์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ด๋‹ˆ๋งŒํผ, ์ด์ œ๋Š” ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ฉฐ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ต์ˆ™ํ•ด์ ธ์•ผ๊ฒ ๋‹ค๊ณ  ๋А๊ผˆ๋‹ค.

 

์•„์ง ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋‚˜ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๋“ฑ์€ ์™„์ „ํžˆ ์†์— ์ต์ง€ ์•Š์•˜์ง€๋งŒ, ์˜ค๋Š˜ ํ•™์Šต์„ ๊ณ„๊ธฐ๋กœ JPA์— ๋Œ€ํ•œ ํฅ๋ฏธ๊ฐ€ ์ƒ๊ฒผ๊ณ , ์•ž์œผ๋กœ ๋” ๊นŠ์ด ์žˆ๊ฒŒ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

๋ฐ˜์‘ํ˜•