IoC Container
POJO(Plain Old Java Object)
์ค๋๋ ๋ฐฉ์์ ๋จ์ ์๋ฐ ๊ฐ์ฒด, ํน์ ํ๋ ์์ํฌ์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋ ์ผ๋ฐ Java ๊ฐ์ฒด์ ๋๋ค.๊ฐ๋จํ๊ณ ๊ฐ๋ฒผ์ด ์๋ฐ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ ์ฌ์ฉ๋๋ ์ฉ์ด์ ๋๋ค.
POJO๋ ์์ฑ ๋ฐ ๋ฉ์๋์ ๋ํ ๋ช ๋ช ๊ท์น์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
JavaBeans
JavaBean์ ๋ณธ์ง์ ์ผ๋ก POJO์ด๋ฏ๋ก JavaBean์ ๋๋ถ๋ถ POJO์ ์ ์ฌํ๋ฉฐ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ๊ฐ์ง ์๊ฒฉํ ๊ท์น ์งํฉ์ด ์์ต๋๋ค.
๊ท์น์ ์ง๋ ฌํ ๊ฐ๋ฅํ๊ณ null ์์ฑ์๋ฅผ ๊ฐ์ง๋ฉฐ getX() ๋ฐ setX() ๊ท์น์ ๋ฐ๋ฅด๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์์ ๋ํ ์ก์ธ์ค๋ฅผ ํ์ฉํ๋๋ก ์ง์ ํฉ๋๋ค.
DTO Pattern
Data Transfer Object
DTO๋ ํ๋ก์ธ์ค ๋๋ ๋คํธ์ํฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ๊ฐ์ ์บก์ํํฉ๋๋ค.
ํธ์ถํ๋ ๋ฉ์๋ ์๋ฅผ ์ค์ด๊ณ ์ฌ๋ฌ ๋งค๊ฐ๋ณ์ ๋๋ ๊ฐ์ ํฌํจํจ์ผ๋ก์จ ์๊ฒฉ ์์ ์์ ๋คํธ์ํฌ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
VO
Value Object
equals()์ hashCode() ๋ฉ์๋๋ฅผ override
์ผ๋ฐ์ ์ผ๋ก ์ซ์, ๋ ์ง ,๋ฌธ์์ด ๋ฑ๊ณผ ๊ฐ์ ์์ ๊ฐ์ฒด๋ฅผ ์บก์ํํฉ๋๋ค.
๋ถ๋ณ์ ๋ง์ด ์ฌ์ฉํ๋ค.
์คํ๋ง ํ๋ ์์ํฌ์ ๊ฐ์ฅ ์ค์ํ ์์๊ฐ ์ด POJO๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ฏ๋ก ์คํ๋ง์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ IoC ์ปจํ ์ด๋ ์์์ POJO๋ฅผ ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌํ๋ ์ผ๊ณผ ์ฐ๊ด๋ผ ์์ต๋๋ค.
๋ฆฌํ๋์
ํ๋ก๊ทธ๋๋ฐ
์ฑ์ฐฐ์ ํ๋ก๊ทธ๋๋ฐ ๋๋ ์ฑ์ฐฐ์ ์์ฒด ๊ตฌ์กฐ์ ๋์์ ๊ฒ์ฌ, ์ฑ์ฐฐ ๋ฐ ์์ ํ๋ ํ๋ก์ธ์ค์ ๋ฅ๋ ฅ์ ๋๋ค.
Java์ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋จ์ ์ธ์ด์์ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ์๊ฐ์ ์ธํฐํ์ด์ค, ํ๋, ๋ฉ์๋ ์ด๋ฆ์ ๋ชฐ๋ผ๋ ๋ฐํ์์ ํด๋์ค,์ธํฐํ์ด์ค,ํ๋ ๋ฐ ๋ฉ์๋๋ฅผ ๊ฒ์ฌ ํ ์ ์์ต๋๋ค. ๋ํ ์ ๊ฐ์ฒด์ ์ธ์คํด์คํ ๋ฐ ๋ฉ์๋ ํธ์ถ์ ํ์ฉํฉ๋๋ค.
Java ๋ฆฌํ๋ ์ ์ ์ด๋ฆ๋ณ๋ก ํด๋์ค ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ์ ๋ณด์ ๋์ ๊ฒ์์ ์ง์ํ๊ณ ์คํ ์ค์ธ Java ํ๋ก๊ทธ๋จ ๋ด์์ ์กฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ฉํฉ๋๋ค.
๋ฆฌํ๋ ์ ์ Java ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ์คํ ์ค์ธ Java ํ๋ก๊ทธ๋จ์ด ์์ฒด์ ์ผ๋ก ๊ฒ์ฌํ๊ฑฐ๋ "๊ฒ์ฌ"ํ๊ณ ํ๋ก๊ทธ๋จ์ ๋ด๋ถ ์์ฑ์ ์กฐ์ํ ์ ์์ต๋๋ค.
Runtime vs. Compile Time
์ผ๋ฐ์ ์ผ๋ก ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์๋ ์ฌ๋ฌ ๋จ๊ณ์ ์ํํธ์จ์ด ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ด ์์ต๋๋ค.
Compile Time
Java์ ๊ฐ์ ๊ณ ๊ธ ์ธ์ด๋ก ์์ฑ๋ ๋ช ๋ น์ด๋ ์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ ์ฝ๋๋ก ๋ณํ๋์ฌ์ผ ํ๋ค. ์ปคํ์ผ ์๊ฐ ๋์ ์์ค ์ฝ๋๋ .java์์ .class๋ก์ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํ๋ฉ๋๋ค. ์ปคํ์ผ ์๊ฐ ๋์ ์ปดํ์ผ๋ฌ๋ ์ฝ๋์ ๊ตฌ๋ฌธ,์๋ฏธ ์ฒด๊ณ ๋ฐ ์ ํ์ ํ์ธํฉ๋๋ค.
๊ตฌ๋ฌธ๊ณผ ์๋ฏธ๋ฅผ ์ฒดํฌ(sytax and semantic)
ํ๋ก๊ทธ๋งด ์คํ์
Runtime
ํ๋ก๊ทธ๋จ์ ์๋ช ์ฃผ๊ธฐ๋ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ ๋ฐํ์ ๋๋ค.
ํ๋ก๊ทธ๋จ ์คํํ
๋ฆฌํ๋์ ์ ์ง์ํ๋ ์ธ์ด๋ ๋ฐํ์์ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค
๋ฌํ์์ ์์ค ์ฝ๋ ๊ตฌ์ฑ(์: ์ฝ๋ ๋ถ๋ก, ํด๋์ค ,๋ฉ์๋ ,ํ๋กํ ์ฝ ๋ฑ)์ 1๋ฑ๊ธ ๊ฐ์ฒด๋ก ๊ฒ์ํ๊ณ ์์ ํฉ๋๋ค.
ํด๋์ค ๋๋ ํจ์์ ๊ธฐํธ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ๋ฌธ์์ด์ ํด๋น ํด๋์ค ๋๋ ํจ์์ ๋ํ ์ฐธ์กฐ ๋๋ ํธ์ถ๋ก ๋ณํํฉ๋๋ค.
๋ฐํ์ ์ ์์ค ์ฝ๋ ๋ฌธ์ธ ๊ฒ์ฒ๋ผ ๋ฌธ์์ด์ ํ๊ฐํฉ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ๊ตฌ์กฐ์ ๋ํ ์๋ก์ด ์๋ฏธ๋ ๋ชฉ์ ์ ๋ถ์ฌํ๊ธฐ ์ํด ์ธ์ด์ ๋ฐ์ดํธ์ฝ๋์ ๋ํ ์ ์ธํฐํ๋ฆฌํฐ๋ฅผ ๋ง๋ญ๋๋ค.
IoC ์ปจํ
์ด๋๋ฅผ ์ด๊ธฐํํ์ฌ ์ ๋ํ
์ด์
์ค์บ๋ํ๊ธฐ
์ ๋ํ ์ด์ ์ ๋ถ์ธ ์๋ฐ ํด๋์ค๋ฅผ ์ค์บ๋ํ๋ ค๋ฉด ์ฐ์ IoC ์ปจํ ์ด๋๋ฅผ ์ธ์คํด์คํ(instantiation)ํด์ผ ํ๋ค.
๊ทธ๋์ผ ์คํ๋ง์ด @Configuration,@Bean์ ๋ฐ๊ฒฌํ๊ณ ๋์ค์ IoC ์ปจํ ์ด๋์์ ๋น ์ธ์คํฐ์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์คํ๋ง์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด์ธ ๋น ํฉํ ๋ฆฌ(bean factory)์ ์ด์ ํธํ๋๋ ๊ณ ๊ธ ๊ตฌํ์ฒด์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(application context), ๋๊ฐ์ง IoC ์ปจํ ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ถฉ์คํ๋ฉด์๋ ๋น ํฉํ ๋ฆฌ๋ณด๋ค (์คํ๋ง์ ์ ํ๋ฆฟ์ด๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์คํํ๋ ๋ฑ) ๋ฐ์ ๋ ๊ธฐ๋ฅ์ ์ง๋๊ณ ์์ผ๋ฏ๋ก ๋ฆฌ์์ค์ ์ ์ฝ์ ๋ฐ๋ ์ํฉ์ด ์๋๋ผ๋ฉด ๊ฐ๊ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ์ข์ต๋๋ค.
BeanFactory์ ApplicationContext๋ ๊ฐ๊ฐ ๋น ํฉํ ๋ฆฌ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ ๊ทผํ๋ ์ธํฐํ์ด์ค์ ๋๋ค.
ApplicationContext๋ BeanFactory์ ํ์ ์ธํฐํ์ด์ค์์ ํธํ์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค.
IoC ์ปจํ ์ด๋์์ POJO ์ธ์คํด์ค/๋น ๊ฐ์ ธ์ค๊ธฐ
๊ตฌ์ฑ ํด๋์ค์ ์ ์ธ๋ ๋น์ ๋น ํฉํ ๋ฆฌ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ ์ผํ ๋น ์ด๋ฆ์ getBean() ๋ฉ์๋์ ์ธ์๋ก ํธ์ถํฉ๋๋ค.
POJO ํด๋์ค @Component๋ฅผ ๋ถ์ฌ DAO ๋น ์์ฑํ๊ธฐ
์ฒ์์ ๋ ๊ตฌ์ฑ ํด๋์ค์์ ๊ฐ์ ํ๋์ฝ๋ฉํด ์คํ๋ง ๋น์ ์ธ์คํด์คํํ์ต๋๋ค.
์ค์ ๋ก POJO๋ ๋๋ถ๋ถ DB๋ ์ ์ ์ ๋ ฅ์ ํ์ฉํด ์ธ์คํด์ค๋ก ๋ง๋ญ๋๋ค.
Domain ํด๋์ค ๋ฐ DAO(Data Access Object) ๋ฐ์ดํฐ ์ก์ธ์ค ๊ฐ์ฒด) ๋ฅผ ์ด์ฉํด POJO๋ฅผ ์์ฑํฉ๋๋ค.
@Component
ํผ์์คํด์ค (persisitence) (์์ํ)
์๋น์ค (service)
ํ๋ ์ ํ ์ด์ (presentation) (ํํ)
์ธ ๋ ์ด์ด layer (๊ณ์ธต)
@Autowired
@Resource
@Inject
@Scope
singleton
IoC ์ปจํ ์ด๋๋น ๋น ์ธ์คํด์ค ํ๋๋ฅผ ์์ฑํฉ๋๋ค.
prototype
์์ฒญํ ๋๋ง๋ค ๋น ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ญ๋๋ค.
request
HTTP ์์ฒญ๋น ํ๋์ ๋น ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์๋ง ํด๋น๋ฉ๋๋ค.
session
HTTP ์ธ์ ๋น ๋น ์ธ์คํด์ค ํ๋๋ฅผ ์์ฑํฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์๋ง ํด๋น๋ฉ๋๋ค.
globalSession
์ ์ญ HTTP ์ธ์ ๋น ๋น ์ธ์คํด์ค ํ๋๋ฅผ ์์ฑํฉ๋๋ค. ํฌํธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์๋ง ํด๋น๋ฉ๋๋ค.
IoC
service locator pattern
๋น๋ฑ๋ก ๋ฐ ์์ฑ
dependency injection(์์กด์ฑ ์ฃผ์ )
Without dependency injection
Constructor injection
Interface injection
Assembly
contextualized lookup(์ํฉ์ ๋ง๋ ์กฐํ)
template method design pattern(ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด)
strategy design pattern(์ ๋ต ๋์์ธ ํจํด)
Spring ์ปจํ
์ด๋ Configuration Metadata
XML-based metadata
Annotation-based configuration
define beans using annotation-based configuration metadata
Java-based configuration
define beans external to your application classes by using Java rather than XML files.
Lifecycle Callbacks
@PostConstruct
๊ตฌ์ฑํ
@PreDestroy
์ฐ์ ํ๊ดด
Reference
Last updated
Was this helpful?