๐ก Spring Boot์ Spring Framework์ ์ฐจ์ด์ ์ ์ค๋ช ํด ์ฃผ์ธ์.
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ Auto Configuration์ ๋๋ค.
Spring์ ํ๋ก์ ํธ ์ด๊ธฐ์ ๋ค์ํ ํ๊ฒฝ ์ค์ ์ด ํ์ํ์ง๋ง, Spring Boot๋ ์ค์ ์ ๋ง์ ๋ถ๋ถ์ ์๋ํํ์ฌ ์ฌ์ฉ์๊ฐ ํธํ๊ฒ ์คํ๋ง์ ํ์ฉํ ์ ์๋๋ก ๋์ต๋๋ค.
spring boot starter dependency๋ฅผ ํตํด ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ๊ฐํธํ๊ฒ ํ๊ณ , ๋ด์ฅ๋ ์๋ฒ๊ฐ ์์ด ๋ณ๋์ ์๋ฒ ๊ตฌ์ฑ์ด ํ์ํ์ง ์์ต๋๋ค.
๐ Spring Framework์ ํน์ง์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- IoC / DI
- AOP
- PSA
๐ก DAO, DTO, VO์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- DAO(Data Access Object)๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ๊ทผ์ ์ํ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค. (Repository, Mapper)
- DTO(Data Transfer Object)๋ ๊ฐ ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค. ๋ก์ง์ ๊ฐ์ง ์๋ ์์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ก getter, setter๋ง ํฌํจํฉ๋๋ค. (์ฌ๊ธฐ์ ๋งํ๋ ๊ณ์ธต์ Controller, View, Business Layer, Persistent Layer)
- VO(Value Object)๋ ๊ฐ ์์ฒด๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด์ ๋๋ค. ์ฃผ๋ก ๋ถ๋ณ ๊ฐ์ฒด๋ก ๊ตฌํ๋๋ฉฐ, ์ฝ๊ธฐ ์ ์ฉ(readonly)์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
๐ก ์คํ๋ง ํด๋ผ์ด์ธํธ ์์ฒญ ์ ์ฒด ํ๋ฆ์ ์ค๋ช ํด ์ฃผ์ธ์.
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด DispatcherServlet์ ํธ๋ค๋ฌ ๋งคํ(Handler Mapping)์ ํตํด ์์ฒญ URI์ ๋งคํ๋ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ํ์ํฉ๋๋ค.
- ํธ๋ค๋ฌ ์ด๋ํฐ(Handler Adapter)๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํฉ๋๋ค.
- ํธ๋ค๋ฌ ์ด๋ํฐ์ ์ปจํธ๋กค๋ฌ์ ์๋ต์ด ๋์์ค๋ฉด ModelAndView๋ก ์๋ต์ ๊ฐ๊ณตํด ๋ฐํํฉ๋๋ค.
- ๋ทฐ ํ์์ผ๋ก ๋ฆฌํดํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ ๋๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ(View Resolver)๋ฅผ ํตํด ๋ทฐ๋ฅผ ๋ฐ์ ๋ฆฌํดํฉ๋๋ค. (๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํ)
- ๋ทฐ๊ฐ ์๋ REST ํ์์ @ResponseBody๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ํธ์ถํ์ง ์๊ณ , MessageConverter๋ฅผ ๊ฑฐ์ณ JSON ํ์์ผ๋ก ๋ณํํด์ ์๋ตํฉ๋๋ค. (MessageConverter๋ ์์ฒญ๊ณผ ์๋ต์ ๋ํด Body ๊ฐ์ ๋ณํํ๋ ์ญํ ์ ์ํ)
๐ก @Controller์ @RestController์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
@Controller์ ์ญํ ์ Model ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ View๋ฅผ ์ฐพ๋ ๊ฒ์ด์ง๋ง,
@RestController๋ ๋จ์ํ ๊ฐ์ฒด๋ง์ ๋ฐํํ๊ณ , ๊ฐ์ฒด ๋ฐ์ดํฐ๋ JSON ๋๋ XML ํ์์ผ๋ก HTTP ์๋ต์ ๋ด์์ ์ ์กํฉ๋๋ค.
๐ @RestController๋ ๋ด๋ถ์ ์ผ๋ก ๋ฌด์์ ํฌํจํ๊ณ ์๋?
@RestController๋ @Controller์ @ResponseBody์ ์กฐํฉ์ ๋๋ค.
Spring ํ๋ ์์ํฌ์์ RESTful ์น ์๋น์ค๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์๋๋ก Spring 4.0์์ ์ถ๊ฐ๋์์ต๋๋ค.
@ResponseBody : ๋ฉ์๋๊ฐ ๋ฐํํ๋ ๊ฐ์ด HTTP ์๋ต ๋ณธ๋ฌธ์ ์ง์ ์ฐ์ด๋๋ก ํ๋ ์ด๋ ธํ ์ด์ , ๊ธฐ๋ณธ์ ์ผ๋ก JSON, XML ๋ฑ์ ํํ๋ก ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ฐํ
๐ก IoC / DI์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
IoC (Inversion of Control)
IoC๋ ์ ์ด์ ์ญ์ ์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฒด ์์ฑ, ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๋ฐ์๊ฐ ์๋ IoC ์ปจํ ์ด๋์๊ฒ ๋๊ธด ๊ฒ์ ๋งํฉ๋๋ค. ์คํ๋ง IoC ์ปจํ ์ด๋๋ ๊ฐ์ฒด๋ค์ ์์ฑํ๋ฉด ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ ์ฃผ์ (DI) ํ๋ ์ญํ ์ ํ๊ณ , ์ปจํ ์ด๋์ ๋ฑ๋กํ ๊ฐ์ฒด๋ค์ ๋น์ด๋ผ๊ณ ํฉ๋๋ค.
DI (Dependency Injection) ์์กด์ฑ ์ฃผ์ ์ ํ์ํ ๊ฐ์ฒด๋ค์ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋ ์ธ๋ถ๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๊ณ , ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๐ DI ๋ฐฉ๋ฒ?
์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ฑ์ ์ฃผ์ , ํ๋ ์ฃผ์ , ์ธํฐ ์ฃผ์ 3๊ฐ์ง๊ฐ ์์ต๋๋ค.
์คํ๋ง ๊ณต์ ๋ฌธ์์์ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ์์ฑ์๋ฅผ ํตํ ์ฃผ์ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ทธ ์ด์ ๋ ๋ถ๋ณ์ฑ์ ์ ์งํ๊ณ , ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํ์ํ ์์กด์ฑ์ด ๋ชจ๋ ์ฃผ์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด์ ์ผ๊ด์ฑ์ ๋ณด๋ค ์ฝ๊ฒ ์ ์งํ ์ ์์ต๋๋ค. ๋ํ, ์์กด์ฑ ์ฃผ์ ์ ๊ฐ์ ํํ์ฌ ์ปดํ์ผ ์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ก AOP(Aspect Oriented Programming)์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์ธ์ฆ, ๋ก๊น , ํธ๋์ญ์ ๊ณผ ๊ฐ์ด ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ ๋งํฉ๋๋ค.
AOP์ ๊ฐ์ฅ ํฐ ํน์ง์ด์ ์ฅ์ ์ ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ, ์ฌํ์ฉ์ฑ์ ๊ทน๋ํ, ๋ณํ ์์ฉ์ ์ฉ์ด์ฑ์ ๋๋ค.
๐ AOP์์ Proxy ?
AOP์์๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํฉ๋๋ค.
(์ด๋๋ฐ์ด์ค๋ ๋ก๊น , ํธ๋์ญ์ , ๋ณด์ ๋ฑ์ ๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๊ตฌํํ๋ ์ฝ๋ ์กฐ๊ฐ์ผ๋ก ํน์ ์ง์ ์์ ์คํ๋๋ค.)
ํ๋ก์๋ ์ค์ ํ๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๊ณ , ํ๊ฒ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ํ์ ์ด๋๋ฐ์ด์ค๋ฅผ ์คํํฉ๋๋ค.
์ฆ, ํ๋ก์๋ ํ๊ฒ ๊ฐ์ฒด์ ๋ํ ๋ชจ๋ ํธ์ถ์ ๊ฐ๋ก์ฑ๊ณ , ์ด๋๋ฐ์ด์ค๋ฅผ ์คํํ ํ ์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํฉ๋๋ค.
๐ก PSA (Portable Service Abstraction)์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์๋น์ค๊ฐ ํน์ ํ๋ซํผ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ , ๋ค์ํ ํ๊ฒฝ์์๋ ์ผ๊ด๋๊ฒ ๋์ํ ์ ์๋๋ก ์ค๊ณํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋งํฉ๋๋ค.
๋ํ์ ์ธ ์๋ก๋ JDBC๊ฐ ์๋๋ฐ, JDBC๋ ์ด๋ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ผ๊ณ ์ผ๊ด์ฑ ์๋ ๋ฐฉ์์ผ๋ก ์ ์ดํ ์ ์๋๋ก ๊ณตํต๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ฌํ ์ถ์ํ๋ ์๋น์ค์ ์ด์์ฑ์ ๋์ด๊ณ , ์์คํ ๊ฐ์ ํธํ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
๐ Spring์์ ์ ๊ณตํ๋ PSA ?
- Spring Web MVC
- Spring Transaction
- Spring Date
๐ก @SpringBootApplication ์ด๋ ธํ ์ด์ ์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ๊ฒ์ ํฌํจํ๋์ง ์ค๋ช ํด ์ฃผ์ธ์.
@SpringBootApplication ์ด๋ ธํ ์ด์ ์ ๋ด๋ถ์ ์ผ๋ก @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan์ ํฌํจํฉ๋๋ค.
- @SpringBootConfiguration ์ด๋
ธํ
์ด์
์ ์คํ๋ง ๋ถํธ์ ๋ํ ์ค์ ์ ๋ณด๊ฐ ๋ด๊ธด ํด๋์ค๋ฅผ ์ธ์ํ๊ณ ,
ํด๋น ํด๋์ค ๋ด๋ถ์ @Bean ์ด๋ ธํ ์ด์ ์ด ๋ด๊ธด ๋ฉ์๋๋ฅผ ์ฐพ์ ๋น์ ๋ฑ๋กํ๊ณ ์์ฑํด ์ฃผ๋ฉฐ, ์ฑ๊ธํค ํจํด์ ์ ์งํ ์ ์๋๋ก ๋๋ ์ญํ ์ ํฉ๋๋ค. - @EnableAutoConfiguration ์ด๋ ธํ ์ด์ ์ ์คํ๋ง ๋ถํธ์ auto-configuration์ ๊ฐ๋ฅํ๋๋ก ํ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก, Classpath์ ์กด์ฌํ๋ Jar ํ์ผ์ ์๋์ผ๋ก configuration ํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
- @ComponentScan ์ด๋ ธํ ์ด์ ์ @Component, @Service, @Repository, @Controller์ ๊ฐ์ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ์๋์ผ๋ก ์ค์บํ์ฌ application context์ ๋น์ผ๋ก ๋ฑ๋กํด ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๐ก Filter์ Interceptor์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
ํํฐ๋ ๋ง ๊ทธ๋๋ก ์์ฒญ๊ณผ ์๋ต์ ๊ฑฐ๋ฅธ ๋ค ์ ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋๊ฐ ์๋ ํฐ์บฃ๊ณผ ๊ฐ์ ์น ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, ์คํ๋ง ๋ฒ์ ๋ฐ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
Dispatcher Servlet ์์ฒญ์ด ์ ๋ฌ๋๊ธฐ ์ /ํ์ url ํจํด์ ๋ง๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ถ๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณตํต์ ์ธ ๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ด๋ จ ์์
- ๋ชจ๋ ์์ฒญ์ ๋ํ ๋ก๊น ๋๋ ๊ฒ์ฌ
- ์ด๋ฏธ์ง/๋ฐ์ดํฐ ์์ถ ๋ฐ ๋ฌธ์์ด ์ธ์ฝ๋ฉ
- Spring๊ณผ ๋ถ๋ฆฌ๋์ด์ผ ํ๋ ๊ธฐ๋ฅ
์ธํฐ์ ํฐ๋ ์์ฒญ์ ๋ํ ์์ ์ /ํ๋ก ๊ฐ๋ก์ฑ ์์ฒญ๊ณผ ์๋ต์ ์ฐธ์กฐํ๊ฑฐ๋ ๊ฐ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌํ๋ฉฐ, ์คํ๋ง ์ปจํ ์คํธ์์ ๋์ํฉ๋๋ค.
Dispatcher Servlet์ด Controller๋ฅผ ํธ์ถํ๊ธฐ ์ /ํ์ ์ธํฐ์ ํฐ๊ฐ ๋ผ์ด๋ค์ด ์์ฒญ๊ณผ ์๋ต์ ์ฐธ์กฐํ๊ฑฐ๋ ๊ฐ๊ณตํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ธ๋ถ์ ์ธ ๋ณด์ ๋ฐ ์ธ์ฆ/์ธ๊ฐ ๊ด๋ จ ์์
- API ํธ์ถ์ ๋ํ ๋ก๊น ๋๋ ๊ฒ์ฌ
- Controller๋ก ๋๊ฒจ์ฃผ๋ ๋ฐ์ดํฐ ๊ฐ๊ณต
๐ก ์๋ธ๋ฆฟ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ๋๋ค.
๐ ์๋ธ๋ฆฟ๊ณผ JSP์ ์ฐจ์ด์ ?
์๋ธ๋ฆฟ
- ์๋ฐ ์ฝ๋ ๋ด์ html ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ์
- ๊ฐ๋ ์ฑ์ด ์ข์ง ์๊ณ , ์ ์ง๋ณด์๊ฐ ํ๋ฆ
- ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ๋์ ์ผ๋ก ์คํ๋๋ฉฐ, ์ฑ๋ฅ์ด ์ฐ์
JSP
- html ์ฝ๋ ๋ด์ ์๋ฐ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ์
- html ์ฝ๋์ ์๋ฐ ์ฝ๋๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด ๊ฐ๋ ์ฑ์ด ์ข๊ณ , ์ ์ง๋ณด์๊ฐ ์ฉ์ด
- ์คํ ์ ๋ด๋ถ์ ์ผ๋ก ์๋ธ๋ฆฟ์ผ๋ก ๋ณํํ์ฌ ์คํ
๐ก Dispatcher Servlet์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
Dispatcher Servlet์ HTTP ํ๋กํ ์ฝ์ ๋ค์ด์ค๋ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํด ์ฃผ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ์ ๋๋ค.
๊ณผ๊ฑฐ์๋ ๋ชจ๋ ์๋ธ๋ฆฟ์ URL ๋งคํ์ ์ํด web.xml ๋ฑ๋กํด ์ฃผ์ด์ผ ํ์ง๋ง,
Dispatcher Servlet์ด ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํธ๋ค๋งํ๊ณ , ๊ณตํต ์์ ์ ์ฒ๋ฆฌํ๋ฉด์ ํธํ๊ฒ ์ด์ฉํ ์ ์์ต๋๋ค.
๐ก BeanFactory์ ApplicationContext์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
BeanFactory์ ApplicationContext ๋ชจ๋ ์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ์ฃผ์ IoC ์ปจํ ์ด๋(์คํ๋ง ์ปจํ ์ด๋)์ด๋ฉฐ, Bean์ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
BeanFactory๋ Bean์ ์์ฑ, ๊ด๋ฆฌ, ์์กด์ฑ ์ฃผ์ ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ,
ApplicationContext์ BeanFactory์ ํ์ฅ๋ ๋ฒ์ ์ผ๋ก ๋ฉ์์ง ๋ฆฌ์์ค ์ฒ๋ฆฌ, ์ด๋ฒคํธ ๋ฐํ, AOP ์ง์ ๋ฑ์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๊ณผ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
BeanFactory๋ ์ง์ฐ ๋ก๋ฉ(lazy loading)์ ์ง์ํ๋ฉฐ, ApplicationContext์ ์ฆ์ ๋ก๋ฉ(eager loading)์ ์ง์ํฉ๋๋ค.
BeanFactory๋ ์คํ๋ง ์ปจํ
์ด๋์ ์ต์์ ์ธํฐํ์ด์ค์ด๋ฉฐ, BeanFactory ์์๋ฐ์ ํ์ฅํ ๊ฒ์ด ApplicationContext์
๋๋ค.
๐ก ์คํ๋ง ์ฑ๊ธํค์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
Spring์์๋ @Component, @Service, @Repository, @Controller ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋น์ ์ ์ํ ๋, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค ์ค์ฝํ(๋ฒ์)๋ก ๋น์ ๊ด๋ฆฌํฉ๋๋ค.
์คํ๋ง ์ฑ๊ธํค์ ๋์ ๊ณผ์ ์
์คํ๋ง ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ๋ชจ๋ ๋น์ ์ด๊ธฐํํ๊ณ , ๋น ์ ์์ ๋ฐ๋ผ ์ฑ๊ธํค์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํฉ๋๋ค.
์์ฑ๋ ์ฑ๊ธํค ์ธ์คํด์ค๋ ์ปจํ ์ด๋ ๋ด๋ถ ์บ์์ ์ ์ฅ๋๋ฉฐ, ์ดํ ํด๋น ๋น์ ์์ฒญํ ๋๋ง๋ค ๋์ผํ ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
๐ก ๊ฒฐํฉ๋์ ์์ง๋์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
๊ฒฐํฉ๋๋ ๋ชจ๋ ๊ฐ์ ์ํธ ์์กด์ฑ์ ๋ํ๋ ๋๋ค.
๊ฒฐํฉ๋๊ฐ ๋์ผ๋ฉด ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ด ๊ฐํด์ ํ๋์ ๋ชจ๋์ด ๋ณ๊ฒฝ๋๋ฉด ๋ค๋ฅธ ๋ชจ๋์ ๋ง์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์ด๋ก ์ธํด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๊ณ ์ฝ๋์ ๋ณ๊ฒฝ์ด ๋ณต์กํด์ง๋๋ค.
๊ฒฐํฉ๋๊ฐ ๋ฎ์ผ๋ฉด ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ด ์ฝํ๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ชจ๋์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋ชจ๋์ ๋ฏธ์น๋ ์ํฅ์ ์ค์ผ ์ ์์ต๋๋ค.
์์ง๋๋ ํ๋์ ๋ชจ๋ ๋ด์์ ์์๋ค์ด ์ผ๋ง๋ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
์์ง๋๊ฐ ๋์ผ๋ฉด ๋ด๋ถ์ ์์๋ค์ด ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ด ๋จ์ผ ์ฑ ์์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๊ฒ ๋ฉ๋๋ค. ์์ง๋๊ฐ ๋ฎ์ผ๋ฉด ์์๋ค์ด ์๋ก ๋์จํ๊ฒ ์ฐ๊ด๋์ด ์์ด ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด ์ฌ์ฌ์ฉ์ฑ, ์ ์ง๋ณด์์ฑ์ด ๋ฎ์์ง๊ฒ ๋ฉ๋๋ค.
๋ชจ๋์ ์ค๊ณํ ๋, ๊ฒฐํฉ๋๋ ๋ฎ๊ณ ์์ง๋๋ ๋์์ง๊ฒ ์ค๊ณํ๋ฉด ์ฝ๋์ ํ์ง๊ณผ ์์คํ ์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
๐ก Lombok์ด ๊ฐ๋ฅํ ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
๋กฌ๋ณต์ ์ปดํ์ผ ํ์์ ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
๋กฌ๋ณต์์ ์์ฑ๋ ์ฝ๋๋ ๋ฆฌํ๋ ์ ์ ํตํด ์ ๊ทผํ๊ณ ์กฐ์๋ ์ ์์ต๋๋ค.
๋ฆฌํ๋ ์ ์ ๋ฐํ์์ ๊ฐ์ฒด์ ๋ฉํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ๋์ ์ผ๋ก ์กฐ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก, ๋กฌ๋ณต์ ์๋ ์์ฑ๋ ์ฝ๋์ ํจ๊ป ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, ๋ฐํ์์์ ๋ฆฌํ๋ ์ ์ ํตํด ๋กฌ๋ณต์ด ์์ฑํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
'Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java (0) | 2024.08.30 |
---|