๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

03/06(์ˆ˜) ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Java 50์ผ์ฐจ TIL - ORM

by ๊ฐ์ž๊ฐœ๋ฐœ๊พผ 2024. 3. 6.

 

๐Ÿ“–  ์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ

  • ORM

 

๐Ÿฅ”  ORM

  • ORM์€ Object Relational Mapping(๊ฐ์ฒด-๊ด€๊ณ„-๋งคํ•‘)์˜ ์•ฝ์ž์ด๋‹ค.
  • ORM์€ ๊ฐ์ฒด์™€ DB์˜ ๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.
  • ORM์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.
  • ORM์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ค‘๊ณ„์ž ์—ญํ• ์„ ํ•œ๋‹ค.
  • ORM์€ MVC ํŒจํ„ด์—์„œ ๋ชจ๋ธ์„ ๊ธฐ์ˆ ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.
  • ORM์€ ๊ฐ์ฒด์™€ ๋ชจ๋ธ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

 

โ—๏ธ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ฐ์ฒด๋กœ ๋งคํ•‘ํ•˜๋ ค๋Š” ์ด์œ 

  • ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ ๊ตฌํ˜„์ด ํŽธ๋ฆฌํ•ด์ง„๋‹ค.
  • ๊ฐ์ข… ๋””์ž์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ

 

๐Ÿฅ”  ORM์˜ ๋ฌธ์ œ์ ๊ณผ ํ•ด๊ฒฐ์ฑ…

์ƒ์†์˜ ๋ฌธ์ œ

 

- ๊ฐ์ฒด : ๊ฐ์ฒด๊ฐ„์— ๋ฉค๋ฒ„๋ณ€์ˆ˜๋‚˜ ์ƒ์†๊ด€๊ณ„๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ๋‹ค.

- RDB : ํ…Œ์ด๋ธ”๋“ค์€ ์ƒ์†๊ด€๊ณ„๊ฐ€ ์—†๊ณ  ๋ชจ๋‘ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค.

 

โ—๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

- ๋งคํ•‘์ •๋ณด์— ์ƒ์†์ •๋ณด๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. (@OneToMany, @ManyToOne)

 

 

๊ด€๊ณ„ ๋ฌธ์ œ

 

- ๊ฐ์ฒด : ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง„๋‹ค.

- RDB : ์™ธ๋ž˜ํ‚ค๋ฅผ ์„ค์ •ํ•˜์—ฌ ์กฐ์ธ์œผ๋กœ ์กฐํšŒ์‹œ์—๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โ—๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

- ๋งคํ•‘์ •๋ณด์— ๋ฐฉํ–ฅ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. (@JoinColumn, @MappedBy)

 

 

ํƒ์ƒ‰ ๋ฌธ์ œ

 

- ๊ฐ์ฒด : ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ์ˆœ์ฐจ์  ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ฝœ๋ ‰์…˜๋„ ์ˆœํšŒํ•œ๋‹ค.

- RDB : ํƒ์ƒ‰์‹œ ์ฐธ์กฐํ•˜๋Š” ๋งŒํผ ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๋‚˜, ์กฐ์ธ์ด ๋ฐœ์ƒํ•˜์—ฌ ๋น„ํšจ์œจ์ ์ด๋‹ค.

 

โ—๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

- ๋งคํ•‘/์กฐํšŒ ์ •๋ณด๋กœ ์ฐธ์กฐํƒ์ƒ‰ ์‹œ์ ์„ ๊ด€๋ฆฌํ•œ๋‹ค. (@FetchType, @fetchJoin())

 

๋ฐ€๋„ ๋ฌธ์ œ

 

- ๊ฐ์ฒด : ๋ฉค๋ฒ„ ๊ฐ์ฒดํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ํด ์ˆ˜ ์žˆ๋‹ค.

- RDB : ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งŒ ์กด์žฌํ•œ๋‹ค.

 

โ—๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

- ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฉค๋ฒ„ ๊ฐ์ฒด๋Š” ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์†์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.(@embedded)

 

์‹๋ณ„์„ฑ ๋ฌธ์ œ

 

- ๊ฐ์ฒด : ๊ฐ์ฒด์˜ hashCode ๋˜๋Š” ์ •์˜ํ•œ equals() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์‹๋ณ„

- RDB : PK๋กœ๋งŒ ์‹๋ณ„

 

โ—๏ธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

 

- PK๋ฅผ ๊ฐ์ฒด id๋กœ ์„ค์ •ํ•˜๊ณ  EntityManager๋Š” ํ•ด๋‹น ๊ฐ’์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค.(@Id, @GeneratedValue)

 

 

 

 

๐Ÿ“š  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

๊ณง ์‹ฌํ™”์™€ ์ตœ์ข… ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ, ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์›Œ์™”๋˜ ๊ฒƒ๋“ค์„ ๋ณต์Šตํ•˜๊ณ  ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์„ ๋ณด์™„ํ•˜๋ฉฐ ์„ฑ์žฅํ•ด ๊ฐ€์ž!