๋ํ ๋ ์ด์ด์ ๋ชฉ์ ์ ๋ฐ๋ผ ์์ ๋ก ์ค๋ช ํ์ AlbumRepository์ ๊ตฌํ์ฒด์ธ HibernateAlbumRepository๋ฅผ IbatisAlbumRepository๋ก ๋ฐ๊พธ๋๋ผ๋ ๋์ผํ๊ฒ ๋์์ ํด์ผ ํฉ๋๋ค. ํ์ง๋ง ํ์ฌ ๊ตฌ์กฐ์์๋ IbatisAlbumRepository๋ก ๋ฐ๊พธ์์ ๊ฒฝ์ฐ ๊ณผ์ฐ Open Session in View Pattern์ ๋์ผํ๊ฒ ์ ์ฉํ ์ ์๋๋?๋ผ๋ ์๋ฌธ์ด ์๊น๋๋ค.
๊ฒฐ๊ตญ ์ ๊ฐ ๋งํ๋ ๊ฐ์ฅ ์ค์ํ ํต์ฌ์ ๊ณผ์ฐ ํ๋ฉด(view)์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ ์ํด์ ๋๋ฉ์ธ ์์ฒด ๋๋ ๋๋ฉ์ธ์ getter๋ฉ์๋๋ฅผ ๋ ธ์ถ์ํค๋ ๊ฒ์ด ์ณ์ ์ผ์ด๋ ํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ค๋ฌด์์ ์ผ์ ํ๋ค๋ณด๋ฉด ์ฌ๋ฌ๊ฐ์ง ์ฌ์ (ํนํ ์ผ์ )๋๋ฌธ์ ๋๋ ๋๋ฌด ๋ง์ ์ ๋ณด ๊ฐ์ฒด์ ์์ฑ์ ํํผํ๊ธฐ ์ํด์ ๋๋ฉ์ธ ์์ฒด๋ฅผ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ๊ฐ ๊ต์ฅํ ๋ง์ต๋๋ค.
ํ์ง๋ง ์๋ฏธ๋ก ์ ์ผ๋ก๋ง ์ ๊ทผ์ ํ์ ๊ฒฝ์ฐ ํด๋น ๋๋ฉ์ธ์ ์ ๋ณด๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ๋ ๊ฒฝ์ฐ interface๋ฅผ ํตํด์ ์ ๊ณต์ ํ๊ณ , ๊ทธ interface์ ๊ตฌํ์ฒด๋ฅผ ๋ทฐ์ ๋ ธ์ถ์์ผ์ผ ํ์ง ์๋ ์๊ฐ๋ฉ๋๋ค. ์ด ๋ถ๋ถ์ ย Allen Holub์ ์ค์ ์ฝ๋๋ก ๋ฐฐ์ฐ๋ ๋์์ธํจํด์ ๋ด์ฉ๊ณผ ๋์ผ ์ธ๋ฌผ์ Why getter and setter methods are evil(http://www.javaworld.com /javaworld/jw-09-2003/jw-0905-toolbox.html?page=1)์ ์ํฅ์ ๋ง์ด ๋ฐ์์ต๋๋ค.
Application ๋ ์ด์ด(๋๋ Service ๋ ์ด์ด)์์ ๋๋ฉ์ธ์ ๋ฆฌํดํ๋ค๋ ๊ฒ์ ํ๋ฉด(view)์์ ์ด๋ค ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ง ๋ชจ๋ฅธ๋ค๋ ๊ฒ์ ๋๋ค.ย์ด๋ ๋น์ฆ๋์ค ์๋๋ฆฌ์ค๋ฅผ ๋ค์ ์๊ฐํด๋ณด๋ฉด ํ๋ฉด(view)์์ ์๊ตฌํ๋ ์ ๋ณด๊ฐ ๋ฌด์์ธ์ง๋ ๋ชจ๋ฅด๋๋ฐ ์๋ฌด๊ฑฐ๋ ๋ค ์ธ ์ ์๋ ์ธํฐํ์ด์ค ๋์ถ์ด๋ผ๋ ๋ช ๋ชฉํ์ ๋๋ฉ์ธ์ ๋ฆฌํดํ๊ฒ ๋๊ณ , ์ด์ ๋ฐ๋ผ lazy loading์ ์ํ ํ๋ฉด(view)์์ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ์๋๊ฐํ๋ ์๊ฐ์ด ๋ญ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๋ผ๊ณ ์๊ฐ๋ฉ๋๋ค.1. ๋๋ฉ์ธ์ ๋ฆฌํดํ๋ private ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , ํด๋น view์์ ์๊ตฌํ๋ ์ ๋ณด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถ์ํจ๋ค.2. Hibernate.initialize๋ก ๋ชจ๋ ์ด๊ธฐํํด์ ์ ๋ณด๋ฅผ ๋๊ฒจ์ค๋ค. (์ฑ๋ฅ๋ฌธ์ ๋ฐ์) : ์ด๋ ๋ง์ํ์ Open Session in View Pattern์ ์ ์ฉํ๋๋ผ๋ ajaxํต์ (json)์ ํตํด view์์ ํธ์ถํ๋ฉด๊ฒฐ๊ตญ 2๋ฒ๊ณผ ๋์ผํ๊ฒ ๋์ํ๊ฒ ๋ฉ๋๋ค. ์ ๋ณด๋ฅผ ์ฐ์ง ์์๋ ๊ทธ๋ ์ต๋๋ค.
์กฐ๊ธ ๋ ผ์ธ์ด๊ธด ํฉ๋๋ค๋ง ์ ์์ ์ธ TDD๋ก ๊ฐ๋ฐ์ ํ๋ค๋ฉด ๋๋ฉ์ธ์ ๋ฆฌํดํ๋ ๊ฒฝ์ฐ๋ ์์ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ์์ TDD๋ฅผ ์๋ฒฝํ๊ฒ ์ ์ฉํ ์๋ ์๊ณ , ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ์ค๋ฌด์์ ์ด๋ก ์ ์ธ ๋ด์ฉ์ ์๋ฒฝํ ์ ๋ชฉ์ํค๋ ์ผ ๋ํ ์ด๋ ค์ด ์ผ์ด๋ผ ์๊ฐํฉ๋๋ค.
--
Google ๊ทธ๋ฃน์ค 'Korea Spring User Group' ๊ทธ๋ฃน์ ๊ฐ์ ํ์ผ๋ฏ๋ก ๋ณธ ๋ฉ์ผ์ด ์ ์ก๋์์ต๋๋ค.
์ด ๊ทธ๋ฃน์ ๊ฒ์ํ๋ ค๋ฉด ks...@googlegroups.com(์ผ)๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ธ์.
๊ทธ๋ฃน์์ ํํดํ๋ ค๋ฉด ksug+uns...@googlegroups.com๋ก ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์.
๋ ๋ง์ ์ต์ ์ ๋ณด๋ ค๋ฉด http://groups.google.com/group/ksug?hl=ko์์ ๊ทธ๋ฃน์ ๋ฐฉ๋ฌธํ์ธ์.
ํ์ด๋ฒ๋ค์ดํธ์ Entity๋ฅผ DDD์ Entity๋ก ํด์ํ๋ฉด ๋ฌด๋ฆฌ๊ฐ ์์ง ์๋ ์๊ฐ๋ฉ๋๋ค.ย
ํ์ง๋ง ํ์ด๋ฒ๋ค์ดํธ์ Entity์ ๊ฒฝ์ฐ POJO๋ฅผ ํ๋ฐฉํ๊ณ ์์ง๋ง ์ค์ ๋๋ฉ์ธ๊ณผ ์์์ฑ์ด ํผํฉ๋ ํํ์ Entity๋ผ๊ณ ์๊ฐ๋ฉ๋๋ค.ย
๊ทธ ์๋ก Entity์์๋ ๋ถ๊ตฌํ๊ณ ์ ๋ ธํ ์ด์ ํํ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กด์ ์ธ ๋ด์ฉ๋ค์ด ๊ธฐ์ ๋๊ธฐ ๋๋ฌธ์ด์ฃ . ๋ํ @Transient (JPA 1.0 ์คํ)์ ์ ๊ณตํ๊ณ ํ์ฉํ๋ค๋ ๊ฒ์ ๋๋ฉ์ธ์ ์๋ ๋ชฉ์ ์ธ ํ์๋ฅผ ํํํ๋ค๊ธฐ๋ณด๋ค๋ (ํนํ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๋ณด๋ฅผ ํํํ๋ ๊ฒฝ์ฐ๋ก ๋ ๋ง์ด ์ฐ์ธ๋ค๋ ๊ฒ์ด์ฃ .
--
(์ฌ์ค ์คํ๋ง3 ์ฑ ์ ์ง๊ธ ์ด ๊ธ์ด ๋ณด์ด๋ ๋ชจ๋ํฐ ๋ฐ๋ก ์์ ์๋ค์. ํญ์ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ^^)
๋ ๋ถ ๋ชจ๋ ์ ๊ณ ์ ๋ฐฐ๋์ด์ ๋ฐ ๋ชป๋ ์ ๊ณ ํ๋ฐฐ๋ฅผ ์ํด์ ์กฐ์ธ์ ํด์ฃผ์ ์ ๊ณ ๋ง์ธ๋ฐ๋ฆ์ ๋๋ค.
์ ์ฒ์ ์ง๋ฌธ๊ณผ ๋ค๋ฅธ ์ฃผ์ ์ด์ง๋ง ๊ถ๊ธํ์ฌ ์ง๋ฌธ์ ๋๋ฆฝ๋๋ค.
์์ ๋ด์ฉ์ ๋ณด๋ฉด ์ ๋
ธํ
์ด์
๊ณผ XML์ ๋์์ ์ฌ์ฉํ๋๊ฒ๊ฐ์
์๊ฐ์ด ๋ญ๋๋ค.
์ง๊ธ๊น์ง JPA๋ก ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ ๋
ธํ
์ด์
๋ง์ผ๋ก ๊ฐ๋ฐํ๋ค๋ณด๋
๋ก์ง์ด๋ ์ํฐํฐ์์ฑ์ ๋ณํ๊ฐ ์์ด๋ ์ปฌ๋ผ์ ๋ณํ๋๋ฌธ์ ์ปดํฌ๋ํธ๋ฅผ
์ฌ๋ฐฐํฌํด์์ต๋๋ค.
ํ ๋น๋์ด ๋ง์ํ์ ๋ฐฉ๋ฒ์ ์ง๊ธ๊ป ์๊ฐํด๋ณด์ง๋ ๋ชปํ์๊ธฐ์
๋๊ฐ์ง๋ฅผ ๋์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ํ์ฌ๋ ๋ชจ๋ฅด๊ณ ์์ต๋๋ค.
๋ง์ ์์ ์ ๋ฌธ์๋ฑ์ด ๋๊ฐ์ง ๋ฐฉ์ ์ฆ, ์ ๋
ธํ
์ด์
๊ณผ XML์ฌ์ฉ์
๋ํด์ ์ค๋ช
ํ๊ณ ์์ง๋ง ์ ๋
ธํ
์ด์
์์ ์ปฌ๋ผ์ ์ ์ํ๊ณ
XML์์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ์๊ธฐ์ ๋์คํ๋๋ฅผ
์ ํํ์ฌ ์ฌ์ฉํ๋๊ฒ์ผ๋ก ์คํด(?)ํ์๋ ์ถ๊ธฐ๋ ํฉ๋๋ค.
๋ฐฉ๋ฒ ๋๋ ๊ด๋ จ์๋ฃ๋ฅผ ๊ณต์ ํ ์ ์์๊น์?
๋ง์ ์์ ์ ๋ฌธ์๋ฑ์ด ๋๊ฐ์ง ๋ฐฉ์ ์ฆ, ์ ๋ ธํ ์ด์ ๊ณผ XML์ฌ์ฉ์ ๋ํด์ ์ค๋ช ํ๊ณ ์์ง๋ง ์ ๋ ธํ ์ด์ ์์ ์ปฌ๋ผ์ ์ ์ํ๊ณ XML์์ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ์๊ธฐ์ ๋์คํ๋๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ๋๊ฒ์ผ๋ก ์คํด(?)ํ์๋ ์ถ๊ธฐ๋ ํฉ๋๋ค.
ย XML object/relational mapping descriptor is used to selectively override annotation values or whether it serves as a complete alternative to Java language metadata annotations.๊ทธ๋ฌ๋๊น ํ ๋น๋ ๋ง์์ฒ๋ผ Annotation์ผ๋ก ๊ธฐ๋ณธ ๋งคํ์ ํ๊ณ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ณํ๋ ๋ถ๋ถ์ XML๋ก ์์ ํด์ ์ด์ํ ์๋ ์๊ณ Annotation์ ์์ ํ ๋์ฒดํ ์๋ ์๋ ๊ฑฐ์ฃ .
๋ง์ฝ ํ์ด๋ฒ๋ค์ดํธ ๋ง ์ฐ์ ๋ค๋ฉด ๊ทธ๋ฅ hbm.xml๋ก ๋งคํํ์๋ ๊ฒ ์๋ฃ๋ ์ถฉ๋ถํ๊ณ ๊ฒฝํ์์ ๋์์ ๊ตฌํ๊ธฐ๋ ์ฌ์ธ ๋ฏ ํฉ๋๋ค. ๊ผญ ํ์ค API๋ฅผ ์ฐ์ ์ผ ํ๋ค๋ฉด ํ์ค ๋ฌธ์ ์ฐธ๊ณ ํด์ ์๋ํด๋ณด์๋ ๊ฒ๋ ์ข๊ฒ ๋ค์.
๊ตญ๋ฐฉ๋ํ๊ต์์ ๋ค๋ฅธ ์ฐ๊ตฌ์ฑ ๊ณผ์ ๋ฅผ ์ํํ๊ณ ์๋๋ฐ ๊ตญ๋ฐฉ๋ํ๊ต์์๋ ์ธํฐ๋ท์ด ์๋์์.
์ค๋งํธํฐ์ผ๋ก ์ฝ๊ธฐ๋ ํ๋๋ฐ ๋ฐฐํฐ๋ฆฌ๊ฐ ๋ค๋์ ~~ ^^
ํ๋ฐฐ ์ง์๋ค์๊ฒ ์คํ์ ์ฝ์ด๋ผ ๋ผ๊ณ ๋งํ๋ฉด์ ์ ์์ ์ด ์คํ์ ์ํํ ๊ฐ์ด ์์๋ค์.
์ฝ์ด ๋ณด๊ธฐ๋ ํ์ํ
์ง๋ง ์ฝ๋ ๊ฒ๊ณผ ๊ณ ์ ๊ด๋
์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ์ ํ ๋ค๋ฅธ ์๋ฏธ๋ก ๋ฐ์ ๋ค์ด๊ธฐ๋ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
>> ์ํฐํฐ์ ๊ณ ์ ํ ์์ฑ์ ๋ํ๋ด๋ ์ ๋ณด๋ ์ ๋
ธํ
์ด์
์ผ๋ก ์์ฑํ๊ณ , ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ์์์ฑ๊ณผ ๊ด๋ จ๋ ์ ๋ณด(์ปฌ๋ผ ๋ด์ฉ, ํ
์ด๋ธ ์ ๋ณด,
>> ์ธ๋ฑ์ค, ํค ์์ฑ๋ฐฉ๋ฒ ๋ฑ)์ XML๋ก ์์ฑํ๋ ๊ฒ์
๋๋ค
ํ ๋น๋์ด ๋ง์ํ์ ๋ฐฉ๋ฒ์ด ์์ฐ์ค๋ฝ๋ค๋ ์๊ฐ์ ๋๋ค.
> ์ํฐํฐ ๊ด๊ณ ์ ๋ณด๋ ์ ๋
ธํ
์ด์
์, ํผ์์คํด์ค ์ ๋ณด๋ XML์ ๋ฃ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค๋ ๊ฒ์ 2007๋
์คํ๋ง ์ ์ ๋ฝ ์ปจํผ๋ฐ์ค์์ BEA์
> EJB ํ ๋ฆฌ๋์ด๋ฉฐ OpenJPA ํ๋ก์ ํธ์ ๋ฆฌ๋์ด๊ธฐ๋ ํ Patrick Linskey์ ์ธ์
์ ํตํด์ ๋ฐฐ์ ์ต๋๋ค.
2007๋ ๋์ ๊ทธ๋ฌํ ๋ด์ฉ์ ์ ํ์ จ๋ค๋ ์ ๋ง ๋นจ๋๋ค์.
์ด๋ฐ ํ ๋ก ์ ํตํด์ ์ ์ ์๊ฐ๋ ๋ง์ด ๋์ด์ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
"์ด๋ก ๊ณผ ์ค์ "์ด๋ผ๋ ๊ณ ์ ์ ์ธ ๋ง์ด ์๊ฐ๋ฉ๋๋ค. ์ต๊ทผ ๋๋ฌด ์ค์ ์๋ง ์น์คํด์๋ค๋ ์๊ฐ์ด ๋๋ ๊ตฐ์.
์ข์ ์ ๋ณด์ ์๊ฒฌ ๊ฐ์ฌํฉ๋๋ค.
ํ์ฌ๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์ JPA(ํ์ด๋ฒ๋ค์ดํธ)๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ต๊ด์ ๋ค์ด๊ณ ์ถ์ด์ ํ์ค๊ฐ๋ฐ์ ์ ํธํ๊ณ ์์ต๋๋ค.
๋ฌผ๋ก 100% ๊ตฌํ์ฒด ์ข
์กฑ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์๋๋๋ค.
Hibernate.initialize() ๋ ๊ธฐํ ๋งคํ ์ ๋
ธํ
์ด์
(ํ์ด๋ฒ๋ค์ดํธ๋ ์ ๋ง ๋ง์ ๊ณ ๊ธ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๊ตฐ์)์ ์ฌ์ฉํ๊ธด
ํฉ๋๋ค.
ํ์ด๋ฒ๋ค์ดํธ๋ฅผ ์ ๊ฑฐํ๋ฉด ์ปดํ์ผ์๋ฌ๊ฐ ^^
ํ๋ฒ ๋ต์์ง๋ง ๋๋ถ๋ถ์ ์ง๋ฌธ์๋ค์๊ฒ ์น์ ํ๊ฒ ๋ต๋ณ์ ํด์ฃผ์๋ [ํ์ฅ๋์ ์ข์งฑ์ธ๋ฏ! ] ^^ ใ
ใ
ใ
ใ
:D ~~~
์ข์ ์ ๋ณด(๋ค๋ฅธ ๊ตฌํ์ฒด ๋ค์ ๋ํ ์ค๋ช
๊น์ง ์น์ ํ๊ฒ ...)์ ๋ต๊ธ์ ๋ค์ํ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.