๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FrameWork/JPA

[JPA] JPA๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

by yunamom 2022. 5. 31.
728x90
300x250

โœจ JPA(Java Persistence API) 

์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ

by yunamom

- ์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ช…์„ธ๋กœ, JAVA ์—์„œ ์ œ๊ณตํ•˜๋Š” API์ด๋‹ค.

- ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.(ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค)

- ์—”ํ„ฐํ‹ฐ ๋นˆ์„ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

- ORM์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” ํด๋ž˜์Šค์™€ DBํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•œ๋‹ค. (SQL ์„ ๋งคํ•‘ํ•˜์ง€ ์•Š์Œ)

 

โœจ ORM์ด๋ž€? (SQL Mapper ์™€ ORM)

- ORM์€ DBํ…Œ์ด๋ธ”์„ ์ž๋ฐ” ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•จ์œผ๋กœ์จ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ (Mapper๋Š” SQL์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผํ•จ)

- ORM์€ RDB์˜ ๊ด€๊ณ„๋ฅผ Object์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด, Mapper๋Š” ๋‹จ์ˆœํžˆ ํ•„๋“œ๋ฅผ ๋งคํ•‘์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ชฉ์ 

SQL Mapper ORM(Object-Relation Mapping / ๊ฐ์ฒด - ๊ด€๊ณ„ ๋งคํ•‘)
SQL ์ฟผ๋ฆฌ๋ฌธ์œผ๋กœ ์ง์ ‘ DB๋ฅผ ์กฐ์ž‘ ๊ฐ์ฒด์™€ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘
- SQL ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ• ์ˆ˜ ์žˆ๋‹ค.
- ๊ฐ์ฒด๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.
- Persistant API
MyBatis, JDBC Template JPA, Hibernate

 

โœจ JPA ๋™์ž‘ ๊ณผ์ • 

JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด์—์„œ ๋™์ž‘ํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, JPA ๋‚ด๋ถ€์—์„œ JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL์„ ํ˜ธ์ถœ → DB์™€ ํ†ต์‹ ํ•œ๋‹ค.

INSERT

MemberDAO ์—์„œ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๊ฐœ๋ฐœ์ž๋Š” JPA์— Member ๊ฐ์ฒด๋ฅผ ๋„˜๊ธด๋‹ค.

์—”ํ‹ฐํ‹ฐ ๋ถ„์„ → INSERT SQL ์ƒ์„ฑ → JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL์„ DB์— ์ „์†ก

SELECT

์ฐพ๊ณ ์ž ํ•˜๋Š” Member์˜ PK๊ฐ’์„ JPA์— ๋„˜๊ธด๋‹ค.

์—”ํ‹ฐํ‹ฐ ๋ถ„์„ → SELECT SQL ์ƒ์„ฑ → JDBC API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SQL์„ DB์— ์ „์†ก → DB ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ด

→ ๊ฒฐ๊ณผ (ResultSet)๋ฅผ ๊ฐ์ฒด์— ๋ชจ๋‘ ๋งคํ•‘

(SQL ์ฟผ๋ฆฌ๋ฅผ JPA๊ฐ€ ๋งŒ๋“ค์–ด ์ฃผ๋ฏ€๋กœ Object์™€ RDB ๊ฐ„์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ)

 

โœจ JPA ํŠน์ง• 

- ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•œ๋‹ค.

- ์ž๋ฐ” ๊ฐ์ฒด์™€ DB ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ๋งคํ•‘ ์„ค์ •์„ ํ†ตํ•ด SQL์„ ์ƒ์„ฑํ•œ๋‹ค.

- ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” JPQL(Java Persistence Query Language)๋ฅผ ์ง€์›ํ•จ

- JPA๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ง€์—ฐ ๋กœ๋”ฉ์ด๋‚˜ ์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ๋ช‡๊ฐ€์ง€ ๊ธฐ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๊ฒƒ์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด SQL์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

โœจ JPA ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ  

- SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค 

- ์ƒ์†, ์—ฐ๊ด€๊ด€๊ณ„, ๊ฐ์ฒด๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋“ฑ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

- ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค (๊ธฐ์กด์—๋Š” ๋ชจ๋“  SQL์„ ์ˆ˜์ •ํ–ˆ์ง€๋งŒ JPA๋Š” ํ•„๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. SQL์€ JPA๊ฐ€ ์ฒ˜๋ฆฌํ•จ)

- ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์ด์Šค๋Š” ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ๋ฒค๋”๋งˆ๋‹ค ์‚ฌ์šฉ๋ฒ•์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด ๊ฒŒ์‹œ๋ฌผ ํŽ˜์ด์ง•์ฒ˜๋ฆฌ ์ฟผ๋ฆฌ๋ฌธ์€ DB๋งˆ๋‹ค ๋‹ฌ๋ผ์„œ ์‚ฌ์šฉ๋ฒ•์„ ๊ฐ๊ฐ ๋ฐฐ์›Œ์•ผ ํ•˜์ง€๋งŒ, JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB์‚ฌ์ด์˜ ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ œ๊ณตํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • DB์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

์ถœ์ฒ˜

 

728x90
300x250

์ฝ”๋“œ