๐ ์ค๋์ ํ์ต ํค์๋
- 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)
๐ ์ค๋์ ํ๊ณ
๊ณง ์ฌํ์ ์ต์ข ํ๋ก์ ํธ๊ฐ ์์ํ๋ฏ๋ก, ์ง๊ธ๊น์ง ๋ฐฐ์์๋ ๊ฒ๋ค์ ๋ณต์ตํ๊ณ ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด์ํ๋ฉฐ ์ฑ์ฅํด ๊ฐ์!