๐ OSIV๋ ๋ฌด์์ธ๊ฐ
์ฆ, ์์์ฑ ์ปจํ์คํธ(์คํฐํฐ ๋งค๋์ )์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์น ์์ฒญ์ด ๋๋ ๋ ๊น์ง ์ฐ์ฅํ๋ ์ต์
์ด๋ค.
์ด ์ค์ ์ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ณ๋ค๋ฅธ ์ค์ ์ ํ์ง ์์๋ค๋ฉด default ON
์ํ์ด๋ค.
์๋ฒ ์คํ ์ ์๋์ ๊ฐ์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.
spring.jpa.open-in-view is enabled by default. Therefore, database
queries may be performed during view rendering.Explicitly configure
spring.jpa.open-in-view to disable this warning
OpenSessionInViewFilter ์ด๊ธฐํ
์์ฒญ ์ฒ๋ฆฌ ์์
DispatcherServlet ๋ฐ ์ปจํธ๋กค๋ฌ ํธ์ถ
์๋น์ค ๋ ์ด์ด ํธ๋์ญ์
๋ฐ์ดํฐ ์ก์ธ์ค ๋ ์ด์ด
ํธ๋์ญ์
์ปค๋ฐ
- PostService๋ ๊ธฐ๋ณธ ํธ๋์ญ์
์ ์ปค๋ฐํ๋ค. ๊ทธ๋ฌ๋ ์ธ์
์ด ์ธ๋ถ์์ ์ด๋ ธ๊ธฐ ๋๋ฌธ์( OpenSessionInViewFilter์์), ์ด ์์ ์์ ์ธ์
์ ๋ซํ์ง ์๋๋ค.
ํธ๋ ์ ์ ์ ์ปค๋ฉง ๋๋๋ผ๋ ์คํ ์ธ์ (์์์ฑ ์ปจํ ์คํธ) ์ ๋ซํ์ง ์๋๋ค!
๋ทฐ ๋ ๋๋ง ์์
๊ฒ์ผ๋ฅธ ์ฐ๊ด์ฑ ์ด๊ธฐํ
JPA์ ์์์ฑ ์ปจํ ์คํธ๊ฐ DB์ปค๋ฅ์ ์ ์ป๋ ์์ ์ DBํธ๋ ์ ์ ์ ์์ํ ๋ ์ด๋ค. @Transactional ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋งค์๋๊ฐ ์คํ๋ ๋. -์๋ค๋ฉด, ํด๋น JPA์ฟผ๋ฆฌ(Repository JPA ์กฐํ ๋ฉ์๋์ ์๋์ผ๋ก ํธ๋ ์ ์ ๋ถ์ฌ)๊ฐ ์คํ๋๋ ์์ ์ ์ป๊ฒ ๋๋ค.
DB์ปค๋ฅ์ ์ ๋ฐํํ๋ ์์ ์ ์๋น์ค ๋ ์ด์ด์ @Transactional์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋ฉ์๋๊ฐ ๋๋ ๋ ์ด๋ค. ์ด ๋, ์์์ฑ ์ปจํ ์คํธ๊ฐ ์ฌ๋ผ์ง๊ณ DB์ปค๋ฅ์ ์ด ๋ฐํ๋๋ค.
์ฆ, ํ ์ปจํธ๋กค๋ฌ ์์์ ์ฌ๋ฌ๊ฐ์ ์๋น์ค ๋ ์ด์ด์ ํจ์๋ฅผ ์ฌ๋ฌ๊ฐ ์คํํ ๊ฒฝ์ฐ, ๊ฐ๊ฐ์ ๋ฉ์๋๋ง๋ค ์์์ฑ ์ปจํ ์คํธ๊ฐ ์๊ธฐ๊ณ ์ฌ๋ผ์ง๊ฒ ๋๋ค.
ํด๋น ๋ฐฉ์์ DB์ปค๋ฅ์ ์ ์ต์ํ์ผ๋ก๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํธ๋ ํฝ์ด ์ค์ํ ๊ฒฝ์ฐ ์ ์ฐํ๊ณ ํจ์จ์ ์ด๋ค.
JPA๊ฐ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ์ป๋ ์์ ์ ๋์ผํ๋ค. @Transactional ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ๋งค์๋๊ฐ ์คํ๋ ๋. -์๋ค๋ฉด, ํด๋น JPA์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ์์ ์ ์ป๊ฒ ๋๋ค.
DB์ปค๋ฅ์ ์ ๋ฐํํ๋ ์์ ์ -api์ ๊ฒฝ์ฐ : ๋ฐ์ดํฐ๊ฐ ์ ์ ์๊ฒ ๋ฐํ๋ ๋ ๊น์ง. -tamplate์ผ๋ก ๊ฐ ๊ฒฝ์ฐ : ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ๋๋ง ๋์ด ์ถ๋ ฅ๋ ๋ ๊น์ง.
์ฆ, @Transactional๋ฉ์๋๊ฐ ๋๋ ๋ ์ฆ์ ๋ฐํํ์ง ์๊ณ ํ๋ก์ ๊ฐ์ฒด๊ฐ Lazy Loading์ผ๋ก ํธ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์, ์์์ฑ ์ปจํ ์คํธ๋ฅผ ์ด๋ ค ๋๋๊ฒ์ด๋ค.
์์์ฑ ์ปจํ ์คํธ๋ DB์ปค๋ฅ์ ์ ๋ณด์ ํด์ผ ์ ์ง๋ ์ ์๋ค.
ํด๋น ๋ฐฉ์์ ๊ฐ๋ฐ์ ์ธ ์ธก๋ฉด์์ ์ค๋ณต์ ์ค์ด๊ณ , ์ง์ฐ๋ก๋ฉ์ ์ฌ์ฉํ ์ ์์ด ์ฝ๋์ ์ ์ง๋ณด์์ฑ์ ํฐ ๋์์ ์ฃผ์ง๋ง, DB์ปค๋ฅ์ ์ ์ค๋ ๋ฌผ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์นซ ์ฑ๋ฅ์ ์ธ ์ฅ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.