์ค๋ ํ ๊ณต๋ถ ๐ง
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ (Java) 1๋ฌธ์ ํ์ด & ๋ธ๋ก๊ทธ ์ ๋ฆฌ
- Spring ์๋ จ ๊ฐ์ ๋ฃ๊ธฐ (2์ฃผ์ฐจ)
- ๋ฒ ์ด์ง๋ฐ ์ธ์ ๋ธ๋ก๊ทธ ์ ๋ฆฌ
- Spring ์๋ จ ๊ฐ์ ๋ฃ๊ธฐ (3์ฃผ์ฐจ ์ค์ต ๊ฐ์ ์ ๊น์ง)
- TIL ๋ธ๋ก๊ทธ ์์ฑ
์ค๋ ์ป์ ๋ด์ฉ ์ ๋ฆฌ โ๏ธ
๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ๋ค ๋ฐ๋ก ๊ตฌ๊ธ๋งํด์ ์ ๋ฆฌํ๋ ๋ด์ฉ์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค!
์ฆ์ ๋ก๋ฉ (Immediate Loading)
fetch = fetchType.EAGER
Entity๋ฅผ ์กฐํํ ๋ ํด๋น Entity์ ์ฐ๊ด๋ ๋ชจ๋ Entity๋ฅผ ๋์์ ์กฐํํ๋ ๋ฐฉ์์ด๋ค.
A Entity์ B Entity๊ฐ ์ฐ๊ด๋์ด ์์ ๋, A๋ฅผ ์กฐํํ๋ฉด B๋ ํจ๊ป ์กฐํ๋๋ค. ์ด๋ก ์ธํด ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ํ ์์ ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ์ง๋ง ์กฐ์ธ ๋ฑ์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋ ์ ์๊ณ , ๋ถํ์ํ ๋ฐ์ดํฐ ๋ก๋ฉ์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
์ฆ์ ๋ก๋ฉ์ ์ ํํ๋ ์ด์
- ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ค.
- ๊ฐ์ฒด๋ฅผ ์กฐํํ ๋ ์ฐ๊ด๋ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ํ ๋ฒ์ ๋ก๋ฉ๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๋ค.
- ๋ชจ๋ ์ฐ๊ด๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ๋ก๋ฉ๋์ด ์์ผ๋ฏ๋ก ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ๋ณ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ์์ด ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ ์ด๋ํ ์ ์๋ค.
- ๋ณต์กํ ์กฐํ๋ฅผ ๋จ์ํํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ Join์ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์ฐ๊ด ๊ด๊ณ๋ฅผ ํด๊ฒฐํ ํ์ ์์ด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
โญ ์ง์ฐ ๋ก๋ฉ (Lazy Loading)
fetch = fetchType.LAZY
๊ฐ์ฒด๋ฅผ Proxy๋ก ๊ฐ์ ธ์จ ํ ์ค์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์ด๊ธฐํํ๋ค.
์ฐ๊ด๋ Entity๋ฅผ ์ฒ์์๋ ์กฐํํ์ง ์๊ณ , ์ค์ ๋ก ํด๋น Entity๊ฐ ํ์ํ ์์ ์ ์กฐํํ๋ ๋ฐฉ์์ด๋ค.
A Entity๋ฅผ ์กฐํํด๋ B Entity๋ ์ด๊ธฐ์ ์กฐํ๋์ง ์๊ณ , B Entity๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํ๋๋ค. ์ด๋ฅผ ํตํด ์ฟผ๋ฆฌ์ ์ต์ ํ์ ์ฑ๋ฅ ํฅ์์ ์ด๋ฃฐ ์ ์๋ค.
์ฐ๊ด Entity๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ๋ ์ ์๋ค.
๋๋ถ๋ถ์ JPA ๊ตฌํ์ฒด์์ ์ง์๋๋ ๊ธฐ๋ฅ์ด๋ค.
Entity ํด๋์ค์ ์ฐ๊ด ๊ด๊ณ ํ๋์ @ManyToOne , @OneToMany , @OneToOne , @ManyToMany ์ ๊ฐ์ Annotation์ ์ฌ์ฉํ ๋ fetch ์์ฑ์ ์ง์ ํ์ฌ ์กฐ์ ํ ์ ์๋ค.
์ง์ฐ ๋ก๋ฉ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
๋ด์์ ์ฐ๊ด๋ Entity์ ์ ๊ทผํด์ผ๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๊ฐ ์ผ์ด๋๋ค.
์ง์ฐ ๋ก๋ฉ์ ์ ํํ๋ ์ด์
- ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์๋ค.
- ์ฆ์ ๋ก๋ฉ์ ๋ชจ๋ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์, ํ์ํ์ง ์์ ๋ฐ์ดํฐ๊น์ง ๋ถํ์ํ๊ฒ ๋ก๋ฉ๋ ์ ์๊ณ ์ด๋ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํ ์ ์๋ค.
- ์ง์ฐ ๋ก๋ฉ์ ํ์ํ ์์ ์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ต์ ํ ํ ์ ์๋ค.
- ๋ฐ์ดํฐ ์ ๊ทผ์ด ์ต์ ํ๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋๋ง ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ์ด ์ต์ ํ๋๋ค.
- ๋ฐ๋ผ์ ์์คํ ์ ์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ ๋ก๋ฉ์ ๋ํ ๋ถํ๊ฐ ๋ถ์ฐ๋ ์ ์๋ค.
- ์ํ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- ๊ฐ์ฒด ๊ฐ์ ์ฐ๊ด ๊ด๊ณ์์ ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ์ค์ด๋ ๋ค.
- ๊ฐ์ฒด๋ฅผ ์กฐํํ ๋ ์ค์ ๋ก ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ฉ๋๋ฏ๋ก ๋ฌดํํ ์ํ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํ ํ ์ ์๋ค.
- ์ฆ์ ๋ก๋ฉ์ ์ฐ๊ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ ์ ์๋ค.
- ์ง์ฐ ๋ก๋ฉ์ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํ ํ ์ ์๋ค.
์ค๋ฌด์์๋ ๋ชจ๋ ์ฐ๊ด ๊ด๊ณ์ ์ง์ฐ ๋ก๋ฉ์ ์ฌ์ฉํด์ผ ํ๋ค!
์ฆ์ ๋ก๋ฉ์ ์ ์ฉํ๊ฒ ๋๋ฉด ์์ํ์ง ๋ชปํ SQL์ด ๋ฐ์ํ ์ ์๋ค.
1์ฐจ ์บ์
์์์ฑ ์ปจํ
์คํธ ๋ด๋ถ์๋ ์๋ Entity๋ฅผ ๋ณด๊ดํ๋ ์ ์ฅ์๋ฅผ 1์ฐจ ์บ์๋ผ๊ณ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํธ๋์ญ์
์ ์์ํ๊ณ ์ข
๋ฃํ ๋๊น์ง๋ง 1์ฐจ ์บ์๊ฐ ์ ํจํ๋ค.
1์ฐจ ์บ์๋ Key-Value ํํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- Key : DB์ ๊ธฐ๋ณธํค
- Value : Entity
EntityManger๋ฅผ ํตํด find ๋ช
๋ น์ผ๋ก DB๋ฅผ ์กฐํํ์ ๋, DB๋ฅผ ๋จผ์ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ ์์์ฑ ์ปจํ
์คํธ์ 1์ฐจ ์บ์๋ฅผ ๋จผ์ ์กฐํํ๋ค.
find ์์ ์
๋ ฅ ๋ฐ์ id ๊ฐ์ด 1์ฐจ ์บ์์ ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ ์ฐพ์ returnํด์ค๋ค.
persist๋ฅผ ํ ๋ค์, find๋ฅผ ์ํํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด find ์ํ ์ DB๋ฅผ ์กฐํํ์ง ์๊ณ 1์ฐจ ์บ์์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ select ์ฟผ๋ฆฌ๋ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ด๋ค.
์ค์ ๊ฒฐ๊ณผ๋ insert ์ฟผ๋ฆฌ๋ง ์ํํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
1์ฐจ ์บ์์ ๊ฐ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ์๋ํ ๊น?!
- find ์, 1์ฐจ ์บ์๋ฅผ ์กฐํํ๋ค.
- 1์ฐจ ์บ์์ ์ ๋ ฅ ๋ฐ์ id๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด DB๋ฅผ ์กฐํํ๋ค.
- DB์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ 1์ฐจ ์บ์์ ์ ์ฅํ๋ค.
- 1์ฐจ ์บ์์ ์ ์ฅํ ๊ฐ์ returnํ๋ค.
1์ฐจ ์บ์์ ํ๊ณ
์ฌ์ค 1์ฐจ ์บ์๋ ํจ์จ์ฑ์ ํฌ๊ฒ ์ ๊ณตํด์ฃผ์ง ๋ชปํ๋ค..
์์ฒญ๋ง๋ค ์์ฑ๋๋ ์์์ฑ ์ปจํ
์คํธ๋ ์์ฒญ์ด ๋๋๊ณ ํธ๋์ญ์
์ด ์ข
๋ฃ๋ ๋ ํจ๊ป ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ 1์ฐจ ์บ์๋ ํฐ ๋์์ด ์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ฌผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ด ๊ต์ฅํ ๋ณต์กํ ๊ฒฝ์ฐ์ ์ฟผ๋ฆฌ๊ฐ ์ค์ด๋ค๊ธด ํ์ง๋ง, 1์ฐจ ์บ์์ ์ฑ๋ฅ๋ณด๋ค ๋งค์ปค๋์ฆ์์ ์ป๋ ์ด์ ์ด ๋ ํฌ๋ค.
2์ฐจ ์บ์
์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ณต์ ํ๋ ์บ์๋ฅผ JPA๋ ๊ณต์ ์บ์(Shared Cache)๋ผ๊ณ ํ๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก 2์ฐจ ์บ์(Second Level Cache, L2 Cache) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
2์ฐจ ์บ์๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฒ์์ ์บ์์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ๊ฐ 1์ฐจ ์บ์๋ง ์ฌ์ฉํ ๋ ๋ณด๋ค ํ๊ธฐ์ ์ผ๋ก ์ค์ด๋ ๋ค.
1์ฐจ ์บ์์์ Entity๋ฅผ ์ฐพ์๋ณด๊ณ ์์ผ๋ฉด 2์ฐจ ์บ์์์ Entity๋ฅผ ์ฐพ๋๋ค.
์ฐพ๋ Entity๊ฐ ์กด์ฌํ๋ฉด 2์ฐจ ์บ์์์ ๋ฐํํ๊ณ ์กด์ฌํ์ง ์์ผ๋ฉด DB๋ฅผ ์กฐํํด์ ๋ฐํํ๋ค.
์ด๋ 2์ฐจ ์บ์๋ ๋์์ฑ์ ๊ทน๋ํํ๊ธฐ ์ํด ์ง์ ๋ฐํํ์ง ์๊ณ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด ๋ฐํํ๋ค.
์ฌ๊ธฐ์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ ์ด์ ๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ฉด ์ฌ๋ฌ ๊ณณ์์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋์์ ์์ ํ๋ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ค๋ ํ๋ฃจ ์ ๋ฆฌ โ๏ธ
์ค๋์ ์ค์ ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๊ณ ๊ฐ์ธ ๊ณผ์ ๋ฐ์ ๋ฅผ ๋ค์๋ค.
Spring ์
๋ฌธ ์ฃผ์ฐจ์ ๊ณผ์ ์์ Develop์ ํ๋ ๊ฒ์ด์๋๋ฐ ์๊ฐ๋ณด๋ค ์ฌ์๋ณด์ด๋ฉด์๋ ๋ด๊ฐ ํ ์ ์์๊น..? ํ๋ ์๊ฐ์ด ๋ค์๋ค.
์คํ์๋ ๊ณ์ํด์ Spring ์๋ จ ๊ฐ์๋ฅผ ๋ค์๋ค!
์
๋ฌธ ๊ฐ์๋ณด๋ค๋ ์ดํด๊ฐ ์๋์ ์ง๋๊ฐ ์ญ์ญ ๋๊ฐ๋๋ฐ ๊ทธ ์ค์์๋ ์ดํด๊ฐ ์๋๋ ๋ถ๋ถ๋ค์ ๋ฐ๋ก ๋ฉ๋ชจํด๋๊ณ ์ ๋
์๊ฐ ์ดํ์ ๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์ดํดํ๋ค!
๊ฐ์ ๋ฃ๋ ์ค๊ฐ์ ์ง์ค๋ ฅ์ด ๋๊ฒจ์ ๋ฒ ์ด์ง๋ฐ ์ธ์ ์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ค! ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ฉด์ ๋ค์ ํ๋ฒ ๋ณต์ตํ๋๊น ๋ด์ฉ์ด ๋ ์ ๊ธฐ์ต๋๋ ๋๋์ด์๋ค! ์ด์ ํํฐ๋์ ์ค๋ช ์ด ๊ท์ ์์ ๋ค์ด์์ ๊ทธ๋ฐ๊ฐ ๐๐๐
์ค๋ ํ๋ฃจ๋ ์์ฐจ๊ฒ ๊ณต๋ถํ๋ฉด์ ์ ๋ณด๋ธ ๊ฒ ๊ฐ๋ค. ์ค๋ ํ๋ฃจ์ข ์ผ ์ด์ฌํ ๊ฐ์ ๋ค์ผ๋ฉด์ ์ดํดํ์ผ๋๊น ํน ์ฌ๊ณ ๋ด์ผ๋ ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๋ค!!!
๋ด์ผ ํ๋ฃจ๋ ํ๋ด๋ณด์!!
๋ด์ผ ๊ณํ โฐ
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ (Java) 1๋ฌธ์ ํ์ด & ๋ธ๋ก๊ทธ ์ ๋ฆฌ
- Spring ์๋ จ ๊ฐ์ ๋ฃ๊ธฐ (3์ฃผ์ฐจ)
- Spring ์๋ จ ๊ฐ์ ๋ด์ฉ ์ ์ฒด์ ์ผ๋ก ๋ณต์ต
- ๊ณผ์ ์์ํด๋ณด๊ธฐ(?)
- TIL ๋ธ๋ก๊ทธ ์์ฑ
+ ์ถ๊ฐ๋ก ๊ณํ์ด ๋ ์๊ธธ ์๋ ์์ด๋ค~_~
'Today I Learned(TIL) > ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 15 (1) | 2024.12.13 |
---|---|
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 14 (2) | 2024.12.12 |
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 12 (0) | 2024.12.10 |
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 11 (2) | 2024.12.09 |
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 10 (2) | 2024.12.08 |