public @interface Component - 201211211yj/Spring-Boot-Start GitHub Wiki
public @interface Component
์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค๊ฐ "์ปดํฌ๋ํธ"์์ ๋ํ๋
๋๋ค. ์ด๋ฌํ ํด๋์ค๋ ์ฃผ์ ๊ธฐ๋ฐ ๊ตฌ์ฑ ๋ฐ ํด๋์ค ๊ฒฝ๋ก ๊ฒ์์ ์ฌ์ฉํ ๋ ์๋ ๊ฐ์ง์ ํ๋ณด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ค๋ฅธ ํด๋์ค ์์ค ์ฃผ์์ ๊ตฌ์ฑ ์์๋ฅผ ์๋ณํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ ๋ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ํน์ํ ๊ตฌ์ฑ ์์์
๋๋ค. (@Repository ์ฃผ์ ๋๋ AspectJ์ @Aspect ์ฃผ์.)
public @interface Repository
์ด๋
ธํ
์ด์
์ด์๋ ํด๋์ค๋ ์๋ ๋๋ฉ์ธ ๊ธฐ๋ฐ ์ค๊ณ (Evans, 2003)์ ์ํด "๊ฐ์ฒด ์ฝ๋ ์
์ ์๋ฎฌ๋ ์ดํธํ๋ ์คํ ๋ฆฌ์ง, ๊ฒ์ ๋ฐ ๊ฒ์ ๋์์ ์บก์ํํ๋ ๋ฉ์ปค๋์ฆ"์ผ๋ก ์ ์ ๋ "Repository"์์ ๋ํ๋
๋๋ค.
"Data Access Object"์ ๊ฐ์ ์ ํต์ ์ธ Java EE ํจํด์ ๊ตฌํํ๋ ํ๋ ์ด ์คํ
๋ ์ค ํ์
์ DAO ํด๋์ค์ ์ ์ฉ ํ ์ ์์ง๋ง, ๊ทธ๋ ๊ฒํ๊ธฐ ์ ์ Data Access Object์ DDD ์คํ์ผ repository์ ์ฐจ์ด์ ์ ์ดํดํ๋๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผํฉ๋๋ค. ์ด ์ฃผ์์ ๋ฒ์ฉ ๊ณ ์ stereotype์ด๋ฉฐ ํ์ ์๋ฏธ๋ฅผ ์ขํ๊ณ ์ ์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค๋ PersistenceExceptionTranslationPostProcessor์ ํจ๊ป ์ฌ์ฉ๋ ๋ Spring DataAccessException ๋ณํ์ ์ ํฉํฉ๋๋ค. ์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค๋ tooling, aspects ๋ฑ์ ๋ชฉ์ ์ผ๋ก ์ ์ฒด ์์ฉ ํ๋ก๊ทธ๋จ ์ํคํ
์ฒ์์์ ์ญํ ์ ๋ํด์๋ ๋ช
ํํฉ๋๋ค.
Spring 2.5๋ถํฐ ์ด ์ด๋
ธํ
์ด์
์ @Component์ ํน์ ์ญํ ์ํ์ฌ ํด๋์ค ๊ฒฝ๋ก ์ค์บ์ ํตํด ๊ตฌํ ํด๋์ค๋ฅผ ์๋ ๊ฐ์ง ํ ์ ์์ต๋๋ค.
-
public class PersistenceExceptionTranslationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor
์ง์์ ์ธ ์์ธ ๋ณํ์ Spring์ @Repository ์ด๋ ธํ ์ด์ ์ผ๋ก ํ์๋ Bean์ ์๋์ผ๋ก ์ ์ฉํ์ฌ ๋ ธ์ถ ๋ ํ๋ก์ (๊ธฐ์กด AOP ํ๋ก์ ๋๋ ๋ชจ๋ ๋์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์๋ก ์์ฑ ๋ ํ๋ก์)์ ํด๋น PersistenceExceptionTranslationAdvisor๋ฅผ ์ถ๊ฐํ๋ Bean ํฌ์คํธ ํ๋ก์ธ์. ๋ค์ดํฐ๋ธ ๋ฆฌ์์ค ์์ธ๋ฅผ Spring์ DataAccessException ๊ณ์ธต์ผ๋ก ๋ณํํฉ๋๋ค. PersistenceExceptionTranslator ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ Bean์ ์๋ ๊ฐ์งํ๋ฉฐ, ์ดํ ํ๋ณด ์์ธ๋ฅผ ๋ณํํ๋๋ก ์์ฒญ๋ฉ๋๋ค.
๋ชจ๋ Spring์ ์ ์ฉ ๊ฐ๋ฅํ ์์ ํฉํ ๋ฆฌ (์ : LocalContainerEntityManagerFactoryBean)๋ PersistenceExceptionTranslator ์ธํฐํ์ด์ค๋ฅผ ์ฆ์ ๊ตฌํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก, ์๋ ์์ธ ๋ณํ์ ๊ฐ๋ฅํ๊ฒํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ๊ฒ์ @Repository ์ด๋ ธํ ์ด์ ์ผ๋ก ์ํฅ์๋ฐ๋ ๋ชจ๋ Bean (์ : Repositories ๋๋ DAO)์ ํ์ํ๊ณ ์ด ํฌ์คํธ ํ๋ก์ธ์๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์์ Bean์ผ๋ก ์ ์ํ๋ ๊ฒ์ ๋๋ค. -
public abstract class DataAccessException extends NestedRuntimeException
Expert One-On-One J2EE ์ค๊ณ ๋ฐ ๊ฐ๋ฐ(์ฑ ์ด๋ฆ)์์ ๋ ผ์ ๋ ๋ฐ์ดํฐ ์ก์ธ์ค ์์ธ ๊ณ์ธต ๊ตฌ์กฐ์ ๊ทผ๋ณธ. (์ด ํจํค์ง์ ๋๊ธฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํด๋น ์ฑ ์ 9 ์ฅ์ ์ฐธ์กฐํ์ญ์์ค.) ์ด ์์ธ ๊ณ์ธต์ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์ฌ์ฉ์ค์ธ ํน์ ๋ฐ์ดํฐ ์ก์ธ์ค API (์ : JDBC)์ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ชฐ๋ผ๋ ๋ฐ์ํ๋ ์ค๋ฅ ์ข ๋ฅ๋ฅผ ์ฐพ์์ ์ฒ๋ฆฌํ๋๋กํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ JDBC๊ฐ ์ฌ์ฉ๋๊ณ ์๋ค๋ ๊ฒ์ ๋ชฐ๋ผ๋ Optimistic Locking ์คํจ์ ๋์ํ ์ ์์ต๋๋ค.
์ด ํด๋์ค๋ ๋ฐํ์ ์์ธ์ด๋ฏ๋ก ์ค๋ฅ๊ฐ ์น๋ช ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ๊ฒฝ์ฐ (์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ) ์ฌ์ฉ์ ์ฝ๋๊ฐ ํด๋์ค ๋๋ ์๋ธ ํด๋์ค๋ฅผ ์ก์ ํ์๊ฐ ์์ต๋๋ค.
public @interface Service
์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค๋ "Service"์ด๋ฉฐ ์๋ DDD(๋๋ฉ์ธ ๊ธฐ๋ฐ ๋์์ธ (Evans, 2003))์ ์ํด "์บก์ํ ๋ ์ํ๊ฐ์๋ ๋ชจ๋ธ์์ ๋
๋ฆฝ๋ ์ธํฐํ์ด์ค๋ก ์ ๊ณต๋๋ ์์
"์ผ๋ก ์ ์๋ฉ๋๋ค.
ํด๋์ค๊ฐ "๋น์ฆ๋์ค ์๋น์ค ์ธ๊ด"(ํต์ฌ J2EE ํจํด ์๋ฏธ) ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์์ ๋ํ๋ผ ์๋ ์์ต๋๋ค. ์ด ์ฃผ์์ ๋ฒ์ฉ ๊ณ ์ ๊ด๋
์ด๋ฉฐ ๊ฐ๋ณ ํ์ ์๋ฏธ๋ฅผ ์ขํ๊ณ ์ ์ ํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ฃผ์์ @Component์ ์ ๋ฌธํ ์ญํ ์ํ์ฌ ํด๋์ค ๊ฒฝ๋ก ์ค์บ์ ํตํด ๊ตฌํ ํด๋์ค๋ฅผ ์๋ ๊ฐ์ง ํ ์ ์์ต๋๋ค.
public @interface Controller
์ฃผ์์ด ๋ฌ๋ฆฐ ํด๋์ค๊ฐ "์ปจํธ๋กค๋ฌ"(์ : ์น ์ปจํธ๋กค๋ฌ)์์ ๋ํ๋
๋๋ค.
์ด ์ฃผ์์ @Component์ ์ ๋ฌธํ ์ญํ ์ํ์ฌ ํด๋์ค ๊ฒฝ๋ก ์ค์บ์ ํตํด ๊ตฌํ ํด๋์ค๋ฅผ ์๋ ๊ฐ์ง ํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก RequestMapping ์ฃผ์์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋
ธํ
์ด์
์ด์๋ ํธ๋ค๋ฌ ๋ฉ์๋์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.