๐ OSIV๋? (Open Session In View)
์คํ๋ง์ ํธ๋์ญ์ ๋ฒ์๋ Service, Repository ๋ ์ด์ด์์๋ง ์ ์ง๋๋ค. ๋ณดํต JPA์ ์์์ฑ ์ปจํ ์คํธ๋ ํธ๋์ญ์ ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ฐ, OSIV๋ฅผ ์ด์ฉํ๋ฉด ์์์ฑ ์ปจํ ์คํธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋ทฐ(์ปจํธ๋กค๋ฌ)๋ ์ด์ด๊น์ง ์ ์งํ ์ ์๋ค. ์ฆ, ์์ ์ํ๋ฅผ ์ปจํธ๋กค๋ฌ์์๊น์ง ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ ๋ ์ด์ด์์ ์ง์ฐ๋ก๋ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
๐ ์คํ๋ง OSIV์ ๋์ ์๋ฆฌ
์คํ๋ง์ด ์ ๊ณตํ๋ OSIV์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ ์ฐจ์ด๋ ์์์ฑ ์ปจํ ์คํธ๊ฐ ์ธ์ ์๊ธฐ๋์ง์ ์๋ค.
- Servlet Filter๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- Interceptor๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ํ๋ ๊ณผ์ ์ ๋์ผํ๋ค.
- ์ฌ์ฉ์๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ค์ ์ ๋ฐ๋ผ Filter ๋๋ Interceptor์์ ์์์ฑ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ค.
- Service, Repository ๋ ์ด์ด๋ก ๋ค์ด๊ฐ๋ฉด ํธ๋์ญ์ ์ด ์์๋๊ณ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ฃ๋๋ฉด ํธ๋์ญ์ ์ด ์ข ๋ฃ๋๋ค. (flush ํธ์ถ)
- ํธ๋์ญ์ ์ ์ข ๋ฃ๋์์ง๋ง, DB ์ปค๋ฅ์ ์ ๋ซํ์์ง ์๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ ๋ ์ด์ด์์ ์ง์ฐ ๋ก๋ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์์ฒญ์ ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด close ๋ฉ์๋๋ฅผ ํธ์ถํด ์์์ฑ ์ปจํ ์คํธ๋ฅผ ์ข ๋ฃํ๋ค.
๐ OSIV์ ํ์ฉ
- View์์ Entity ๊ฐ์ฒด๋ฅผ ์ง์ฐ ๋ก๋ฉํ๊ฑฐ๋ ์ ์ดํ๋ ๊ฒฝ์ฐ
- ๊ฐ์ ์์์ฑ ์ปจํ ์คํธ ๋ด์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ ๊ณต์ ํ๋ ๊ฒฝ์ฐ
OSIV๋ ์์ฒญ์ด ๋ค์ด์จ ์์ ๋ถํฐ ์๋ต์ด ๋๋ ๋ ๊น์ง ์์์ฑ ์ปจํ
์คํธ์ DB ์ปค๋ฅ์
์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐ๋ผ์ ์ค์๊ฐ ํธ๋ํฝ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ปค๋ฅ์
์ด ๋ถ์กฑํด์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ง์ฝ OSIV๋ฅผ ๋ ์ํ๋ก ์ํฐํฐ๋ฅผ ์ ์ดํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด Command์ Query๋ฅผ ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๐ ์ปค๋งจ๋์ ์ฟผ๋ฆฌ ๋ถ๋ฆฌ
๋ณต์กํ ํ๋ฉด์ ์ถ๋ ฅ์ ์ํด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ ๊ฒฝ์ฐ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ๋ฐ, ํ๋ฉด์ ์ํ ๋น์ฆ๋์ค ์๋น์ค ๋ ์ด์ด์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
WordService.class๊ฐ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฆฌํ๋ค.
- WordService : ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง
- WordQueryService : ํ๋ฉด๊ณผ ๊ด๋ จ๋ ์๋น์ค ๋ก์ง (์ฃผ๋ก ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ )