๊ฐ์ฒด์ ์์กด ๊ด๋ฆฌ๋ ์คํ๋ง์ด ํ๋ค.
์คํ๋ง์ ๊ฐ๋ฐ์๋ฅผ ๋์ ํด์ ๊ฐ์ฒด๋ค์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ผ์ ํ๋ค.
ChessService์์ ChessDao ์์กดํ๊ธฐ
๋ณ๊ฒฝ์ ์ทจ์ฝํ๋ค
์์กด ๊ด๊ณ๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ด๋ฆฌํ๋ ค๋ฉด ๋ณต์กํ๋ค.
์คํ๋ง ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํด์ค๋ค.
์ปจํ ์ด๋
๋ด์๋๋ ์ฉ๊ธฐ
์คํ๋ง์์๋ ์คํ๋ง์ด ํ์ฉํ ๊ฐ์ฒด๋ค์ ๋ด์๋์ ์ฉ๊ธฐ๋ฅผ ๋งํ๋ค.
Bean์ผ๋ก ๋ฑ๋กํ๋ ๊ธฐ์ค?
ํ๋ก๊ทธ๋จ ๋ณ๋ก ๊ณตํต์ ์ผ๋ก ์ธ ์ ์๋ ๋์
๋ ์ด์ด์ ๋ํ ๊ฐ์ฒด๋ค์ ์ฌ์ฌ์ฉํ ์ ์๋๋ฐ ์ด๋ค์ ๋น์ผ๋ก ๊ด๋ฆฌํ๋ค.
์ํ๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๋ค. -> ๋น์ผ๋ก ๋ฑ๋ก ํ๋ ค๋ฉด ์ํ๊ฐ ์์ด์ผ ํ๋ค.
์ค์ ์ ๋ฉํ ๋ฐ์ดํฐ(Configuration Metadata)๋ฅผ ์ด์ฉํด ์คํ๋ง ์ปจํ
์ด๋์ ๋ด์๋๋๋ค.
์ปจํ
์ด๋์ ๋ด์ผ๋ฉด ๋น์ผ๋ก ๋ฑ๋ก๋๋ค.
์คํ๋ง์ด ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ฒ ํ๋ ค๋ฉด
- ๊ฐ์ฒด ๊ด๋ฆฌ ๋์ ์๋ ค์ฃผ๊ธฐ
- ๊ฐ์ฒด๋ค ๊ฐ์ ์์กด์ฑ ์ ์ํ๊ธฐ
์ปจํ ์ด๋ ์ค์ ๋ฐฉ๋ฒ - ๋น ๋ฑ๋ก ๋ฐฉ๋ฒ
@ComponentScan : ๋ฑ๋กํ ๋น์ ์ค์บํ classpath๋ฅผ ์ง์ (@SpringBootApplication ๋ด๋ถ์ ์ํด์๋ ์ ๋ํ ์ด์ )
@Component : ComponentScan ํด๋์ค ํ์์ ํน์ ์ ๋ํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ์คํ๋ง ๋น์ผ๋ก ์ง์
์์กด์ฑ ์ฃผ์
์์ฑ์ ์ฃผ์ (without ์คํ๋ง ์ปจํ ์ด๋)
์์ ์ ์ฃผ์ (without ์คํ๋ง ์ปจํ ์ด๋)
ํ๋๋ฅผ ํตํด ์ฃผ์
ํ ์๋ ์๋ค.
์คํ๋ง์์๋ XML, ์ด๋
ธํ
์ด์
, ์๋ฐ ํด๋์ค๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์
ํ ์ ์๋ค.
@Autowired๋ฅผ ๋ถ์ฌ์ค๋ค. ์์ฑ์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ด ํ์ํ๊ตฌ๋๋ฅผ ์ ์ ์๋ค.
ํน์ ์ปดํฌ๋ํธ ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค๊ณ ํด์ ํน์ ์๋ฏธ๊ฐ ๋ถ์ฌ๋๋ ๊ฒ์ ์๋๊ณ ,
Repository๋ ๋๋ฉ์ธ ๊ฐ์ฒด์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ Public Operation์ ์ ๊ณตํฉ๋๋ค. ์ด์ Domain Layer์ ํด๋นํฉ๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ์์ ์ฃผ๊ธฐ๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ด์ฃ . ์ค์ ๊ตฌํ์ฒด์ธ SimpleJpaRepository๋ Infrastructure Layer์ ํด๋นํฉ๋๋ค. ์ด๋ ๊ฒ ์ถ์์ ์์กดํ๊ณ ๊ตฌ์ฒด์ ์์กดํ์ง ์๋๋ก ๊ตฌ์ฑํจ์ผ๋ก์จ(DIP) ์ ์ฐ์ฑ์๋ ์์คํ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, DAO๋ CRUD์ 1:1๋ก ๋งค์นญ๋์ด Persistence Operation์ ์ ๊ทน์ ์ผ๋ก ๋๋ฌ๋ ๋๋ค. ์ฆ, repository๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ผ๋ถ๋ก ๋ณด๋ฉฐ ์ถ์์ธ ๋ฐ๋ฉด, dao๋ ์ถ์์ด ํ์๋ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
http://egloos.zum.com/aeternum/v/1160846
https://stackoverflow.com/questions/8550124/what-is-the-difference-between-dao-and-repository-patterns
๋น์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํด ์ค์ฝํ
์ปจํ ์ด๋๋ ๊ฐ๋ ์ ์ธ ๊ฒ ์ปจํ ์คํธ๋ ๊ฐ์ฒด์ ์ผ์
๊ฐ ์ ์ผ๋ก ์ด๋ ธํ ์ด์ ์ ๋ง๋ถ์ด๊ธฐ ์ข๊ณ (๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ธฐ) xml์ ๋ช ์ํ๋ฉด ์ผ๋ฅ ์ ์ผ๋ก ๋ด๊ฐ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๊ณ ์๋์ง ๋์ ๋ค์ด์์ ์ข์์ต๋๋ค.
์๋น์ค ๋ ์ด์ด๋ ์ด๋ค ์ญํ ์ ํ ๊น์?
๋๋ฉ์ธ ๋ก์ง๋ค์ ์์๋ฅผ ๋ณด์ฅํ๋ฉด์, ์๋น์ค ํธ๋์ญ์
๊ด๋ฆฌ๋ฅผ ํ๋ค.
๊ฐ์ฒด๋ค์ ๋น์ง๋์ค ํ๋ก์ฐ๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
๋น์ง๋์ค ๋ก์ง์ ๋๋ฉ์ธ์ผ๋ก!
Pojo
์คํ๋ง์์ ์คํ๋ง ๋น์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ๊ฐ์ฒด
์คํ๋ง ์ค์ ์ด ๊ฐํด์ง๊ธฐ ์ ์ํ์ ๊ฐ์ฒด๋ฅผ POJO๋ผ๊ณ ํ๋ค.
ํฌ์กฐ๋ ์์ํ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์๋ฏธ
Java Bean :
์๋ฐ๋น์ ํฌ์กฐ๋ผ๊ณ ํ ์ ์์ง๋ง ํฌ์กฐ๋ ์๋ฐ๋น์ด๋ผ๊ณ ํ๊ธด ์ ๋งคํ๋ค.
๋ทฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ถ๋ฆฌํ๋ค๊ณ ๋ณด๋ฉด ๋จ ๊ทธ๋ฐ ์ฐจ์์์ ์๋ฏธ๊ฐ ์๋ฐ.
๋ง์์ config๊ฐ ์ฝ๋ ์์ด ์ข ๋ ์งง์ ๊ฑฐ ๊ฐ์์ ๋ ์ข์ ๊ฑฐ ๊ฐ์์ฌ! ์ด์ฐจํผ configuration์ ๋๋ถ๋ถ ๋ง๋ค์ด ๋์ผ๋ ๋ค๋ฅธ ํด๋์ค ์๋ง๋ค์ด๋ ๋๊ตฌ!