โถ ์ค๋ ๊ณํ
=> ๊ณต๋ถ ๊ด๋ จ
1) ์์ ๋ด์ฉ ๋ณต์ต
2) ์คํ๋ง PSA ์๊ฐ
3) ์ธํ ๋ฆฌ์ ์ด ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ
4) ์ค๊ธ ๊ฐ์ ๊ฒฐ์ ๋ฐ 1,2๊ฐ? ์๊ฐ
โถ ๋ฌธ์ ์ ๋ฆฌ
1. ๋น ๋ฑ๋ก ๋ฌธ์
> ๋ก๊ทธ๋๋ก ์๋ํ ์ด์ ์ผ๋ก ๋น ๋ฑ๋ก
2. ์ปดํฌ๋ํธ ์ค์บ์์ ๋ค๋ฅธ ํจํค์ง์ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋ก ๋ฌธ์
@SpringBootApplication
public class Demospring51Application {
@Autowired
MyService myService;
public static void main(String[] args) {
var app = new SpringApplication(Demospring51Application.class);
app.addInitializers((ApplicationContextInitializer<GenericApplicationContext>) ctx -> ctx.registerBean(MyService.class));
app.run(args);
}
}
> ํ์ ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋๋ค๋ก ๋น ๋ฑ๋ก ๊ฐ๋ฅ.
3. ๊ธฐ๋ณธ... ์ฝ์ ์ถ๋ ฅ ๋ฌธ์
> Component ์๋ํ ์ด์ ์ถ๊ฐ๋ก ํด๊ฒฐ..^^;;
โถ ๊ฐ์ธ ๊ณต๋ถ
IoC ์ปจํ ์ด๋
์คํ๋ง IoC ์ปจํ ์ด๋์ ๋น
Inversion of Control: ์์กด ๊ด๊ณ ์ฃผ์ (Dependency Injection)์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ์์กด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ๋๊ฒ ์๋๋ผ, ์ฃผ์ ๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ง ํจ.
์คํ๋ง IoC ์ปจํ ์ด๋
โ BeanFactory
โ ์ ํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ์ ์ค์ ์ ์ฅ์.
โ ๋น ์ค์ ์์ค๋ก ๋ถํฐ ๋น ์ ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ , ๋น์ ๊ตฌ์ฑํ๊ณ ์ ๊ณตํ๋ค.
๋น
โ ์คํ๋ง IoC ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌ ํ๋ ๊ฐ์ฒด.
โ ์ฅ์
โ ์์กด์ฑ ๊ด๋ฆฌ
โ ์ค์ฝํ โ ์ฑ๊ธํค: ํ๋ โ ํ๋กํฌํ ํ์ : ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด
โ ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค
ApplicationContext
โ BeanFactory
โ ๋ฉ์์ง ์์ค ์ฒ๋ฆฌ ๊ธฐ๋ฅ (i18n)
โ ์ด๋ฒคํธ ๋ฐํ ๊ธฐ๋ฅ
โ ๋ฆฌ์์ค ๋ก๋ฉ ๊ธฐ๋ฅ
ApplicationContext์ ๋ค์ํ ๋น ์ค์ ๋ฐฉ๋ฒ
์คํ๋ง IoC ์ปจํ ์ด๋์ ์ญํ
โ ๋น ์ธ์คํด์ค ์์ฑ
โ ์์กด ๊ด๊ณ ์ค์
โ ๋น ์ ๊ณต
AppcliationContext
โ ClassPathXmlApplicationContext (XML)
โ AnnotationConfigApplicationContext (Java)
๋น ์ค์
โ ๋น ๋ช ์ธ์
โ ๋น์ ๋ํ ์ ์๋ฅผ ๋ด๊ณ ์๋ค.
โ ์ด๋ฆ โ ํด๋์ค โ ์ค์ฝํ โ ์์ฑ์ ์๊ท๋จผํธ (constructor) โ ํ๋กํผํธ (setter) โ ..
์ปดํฌ๋ํธ ์ค์บ
โ ์ค์ ๋ฐฉ๋ฒ
โ XML ์ค์ ์์๋ context:component-scan โ ์๋ฐ ์ค์ ์์ @ComponentScan
โ ํน์ ํจํค์ง ์ดํ์ ๋ชจ๋ ํด๋์ค ์ค์ @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ ํด๋์ค๋ฅผ ๋น์ผ๋ก ์๋์ผ๋ก ๋ฑ๋ก ํด ์ค.
@Autowire
ํ์ํ ์์กด ๊ฐ์ฒด์ “ํ์ "์ ํด๋นํ๋ ๋น์ ์ฐพ์ ์ฃผ์ ํ๋ค.
@Autowired
โ required: ๊ธฐ๋ณธ๊ฐ์ true (๋ฐ๋ผ์ ๋ชป ์ฐพ์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ๋ ์คํจ)
์ฌ์ฉํ ์ ์๋ ์์น
โ ์์ฑ์ (์คํ๋ง 4.3 ๋ถํฐ๋ ์๋ต ๊ฐ๋ฅ) โ ์ธํฐ โ ํ๋
๊ฒฝ์ฐ์ ์
โ ํด๋น ํ์ ์ ๋น์ด ์๋ ๊ฒฝ์ฐ
โ ํด๋น ํ์ ์ ๋น์ด ํ ๊ฐ์ธ ๊ฒฝ์ฐ
โ ํด๋น ํ์ ์ ๋น์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ
โ ๋น ์ด๋ฆ์ผ๋ก ์๋,
โ ๊ฐ์ ์ด๋ฆ์ ๋น ์ฐพ์ผ๋ฉด ํด๋น ๋น ์ฌ์ฉ โ ๊ฐ์ ์ด๋ฆ ๋ชป ์ฐพ์ผ๋ฉด ์คํจ
๊ฐ์ ํ์ ์ ๋น์ด ์ฌ๋ฌ๊ฐ ์ผ ๋
โ @Primary
โ ํด๋น ํ์ ์ ๋น ๋ชจ๋ ์ฃผ์ ๋ฐ๊ธฐ
โ @Qualifier (๋น ์ด๋ฆ์ผ๋ก ์ฃผ์ )
๋์ ์๋ฆฌ
โ ๋น ๋ผ์ดํ ์ฌ์ดํด
โ BeanPostProcessor
โ ์๋ก ๋ง๋ ๋น ์ธ์คํด์ค๋ฅผ ์์ ํ ์ ์๋ ๋ผ์ดํ ์ฌ์ดํด ์ธํฐํ์ด์ค
โ AutowiredAnnotationBeanPostProcessor extends BeanPostProcessor
โ ์คํ๋ง์ด ์ ๊ณตํ๋ @Autowired์ @Value ์ ๋ ธํ ์ด์ ๊ทธ๋ฆฌ๊ณ JSR-330์ @Inject ์ ๋ ธํ ์ด์ ์ ์ง์ํ๋ ์ ๋ ธํ ์ด์ ์ฒ๋ฆฌ๊ธฐ.
@Component์ ์ปดํฌ๋ํธ ์ค์บ
์ปจํฌ๋ํธ ์ค์บ ์ฃผ์ ๊ธฐ๋ฅ
โ ์ค์บ ์์น ์ค์
โ ํํฐ: ์ด๋ค ์ ๋ ธํ ์ด์ ์ ์ค์บ ํ ์ง ๋๋ ํ์ง ์์์ง
@Component โ @Repository โ @Service โ @Controller โ @Configuration
๋์ ์๋ฆฌ
โ @ComponentScan์ ์ค์บํ ํจํค์ง์ ์ ๋ ธํ ์ด์ ์ ๋ํ ์ ๋ณด
โ ์ค์ ์ค์บ๋์ ConfigurationClassPostProcessor๋ผ๋ BeanFactoryPostProcessor์ ์ํด ์ฒ๋ฆฌ ๋จ.
ํ์
์ ์ฌ์ฉํ ๋น ๋ฑ๋ก
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(Demospring51Application.class)
.initializers((ApplicationContextInitializer<GenericApplicationContext>)
applicationContext -> {
applicationContext.registerBean(MyBean.class);
})
.run(args);
}
๋น์ ์ค์ฝํ
์ค์ฝํ
โ ์ฑ๊ธํค
โ ํ๋กํ ํ์
โ Request โ Session โ WebSocket โ ...
ํ๋กํ ํ์ ๋น์ด ์ฑ๊ธํค ๋น์ ์ฐธ์กฐํ๋ฉด?
โ ์๋ฌด ๋ฌธ์ ์์.
์ฑ๊ธํค ๋น์ด ํ๋กํ ํ์ ๋น์ ์ฐธ์กฐํ๋ฉด?
โ ํ๋กํ ํ์ ๋น์ด ์ ๋ฐ์ดํธ๊ฐ ์๋๋ค?
โ ์ ๋ฐ์ดํธ ํ๋ ค๋ฉด
โ scoped-proxy โ Object-Provider โ Provider (ํ์ค)
ํ๋ก์ (https://en.wikipedia.org/wiki/Proxy_pattern)
⇒ ํ๋ก์๋ฅผ ํตํด ๊ฐ์ธ์ค๋ค. ๋ณ๊ฒฝ์ฌํญ์ด ์๊ธธ ๊ฒฝ์ฐ ์์ํด์ง
⇒ ํ๋ก์๋ ๊ธฐ์กด ํด๋์ค๋ฅผ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ์์ํด๋์คํ์ ๊ณผ ๊ฐ๋ค. (์ฃผ์ ๊ฐ๋ฅ)
์ฑ๊ธํค ๊ฐ์ฒด ์ฌ์ฉ์ ์ฃผ์ํ ์
โ ํ๋กํผํฐ๊ฐ ๊ณต์ .
โ ApplicationContext ์ด๊ธฐ ๊ตฌ๋์ ์ธ์คํด์ค ์์ฑ
โถ ์์ ๋ด์ฉ
Spring MVC
Annotation
@ModelAttribute
- ๋ทฐํ์ด์ง(JSP)์์ ์ฌ์ฉํ๊ธฐ ์ํ ์์ฑ๊ฐ(๊ฐ์ฒด)์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์
- => @ModelAttribute ์ด๋ ธํ ์ด์ ์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ์ ์ธ ๊ฐ๋ฅ
- @ModelAttribute ์ด๋ ธํ ์ด์ ์ ๋งค๊ฐ๋ณ์์ ์ ์ธํ๋ฉด ๋งค๊ฐ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์์ฒญ ์ฒ๋ฆฌ
- ๋ฉ์๋์ ๋ทฐํ์ด์ง์๊ฒ ์์ฑ๊ฐ์ผ๋ก ์ ๊ณต - ๋งค๊ฐ๋ณ์์ ์ ์ฅ๋ ์ ๋ฌ๊ฐ์ ๋ทฐํ์ด์ง์๊ฒ ์ ๊ณต
- => ๋งค๊ฐ๋ณ์์ ์ด๋ฆ๊ณผ ์ ๋ฌ๊ฐ์ ์ด๋ฆ์ด ๊ฐ์ง ์์๋ 400 ์๋ฌ ๋ฏธ๋ฐ์
- => ๋งค๊ฐ๋ณ์์ ์๋ฃํ์ด ๊ธฐ๋ณธํ(Wrapper ํด๋์ค)์ด๋ String ํด๋์ค์ธ ๊ฒฝ์ฐ ๋ฐ๋์ value ์์ฑ์ ์ค์
- value ์์ฑ : ๋ทฐํ์ด์ง์ ์ ๊ณตํ๊ธฐ ์ํ ์์ฑ๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- => ๋ค๋ฅธ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ๋ง ์ค์ ๊ฐ๋ฅ
@SessionAttributes
- Model ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋ทฐํ์ด์ง์๊ฒ๋ง ์ ๊ณตํ์ง ์๊ณ ์์ฑ๊ฐ(๊ฐ์ฒด)์ Controller ํด๋์ค์ ๋ชจ๋ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋ทฐํ์ด์ง์๊ฒ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์
- ⇒ Model ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅ๋ ์์ฑ๊ฐ์ด Request Scope๊ฐ ์๋ ์ ํ์ ์ธ Session Scope ์ญํ
- ⇒ ๋ณ๊ฒฝ ์ฒ๋ฆฌ ์ ๋ค๋ฅธ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์์ ํ์ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ๊ฒ์ํ๋ ์์ ์ ์๋ตํ๊ธฐ ์ํด ์ฌ์ฉ
- value ์์ฑ : ์ ํ์ ์ธ Session Scope๋ก ์ฒ๋ฆฌ๋๊ธฐ ์ํ ์์ฑ๋ช ์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ ๋ค๋ฅธ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ๋ง ์ค์ ๊ฐ๋ฅ
JavaBean ํด๋์ค
- ์นํ๋ก๊ทธ๋จ ์์ฒญ ์ ์ ๋ฌ๋ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ํด๋์ค
- ⇒ DAO ํด๋์ค์์ ์ฌ์ฉํ ๊ฒฝ์ฐ DTO ํด๋์ค์ ๊ธฐ๋ฅ ์ํ
- ์ ๋ฌ๊ฐ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ ํ๋๋ฅผ ์ ์ธํ๋ฉด ์ ๋ฌ๊ฐ์ด ํ๋์ ์๋์ผ๋ก ์ ์ฅ๋๋๋ก ์ ๊ณต (Front Controller ๊ฐ ํด์ค)
Controller ํด๋์ค
์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ์๋ฃํ์ Javabeanํด๋์ค(DTO ํด๋์ค)๋ก ์ ์ธํ๋ฉด FrontController๊ฐ JavaBean ๊ฐ์ฒด (Command ๊ฐ์ฒด)๋ฅผ ์์ฑํ์ฌ ์ ๋ฌ๊ฐ์ ํ๋์ ์ ์ฅํ์ฌ ์ ๊ณตํจ
Command ๊ฐ์ฒด
- ์ ๋ฌ๊ฐ์ด ํ๋์ ์ ์ฅ๋ ๊ฐ์ฒด๋ก ์์ฒญ์ฒ๋ฆฌ ๋ฉ์๋์ ๋ทฐํ์ด์ง์์ ์ฌ์ฉ๋์ด
- ⇒ ์ ๋ฌ๊ฐ์ ๊ฐ์ ์ด๋ฆ์ ํ๋์ ์ ์ฅ
- ⇒ ๋ทฐํ์ด์ง์์ ์ฌ์ฉ๋๋๋ก @ModelAttribute ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ ์ธ
- → ์๋ต ๊ฐ๋ฅํจ ์๋ ์ฒ๋ฆฌ ๋จ
- value ์์ฑ์ผ๋ก ๋ทฐํ์ด์ง์ ์ ๊ณต๋๋ ์์ฑ๋ช ์ ์ค์ ํ ์ ์์ง๋ง vaue ์์ฑ์ด ์๋ต๋ ๊ฒฝ์ฐ ํด๋์ค๋ช ์ ์์ฑ๋ช ์ผ๋ก ์๋ ์ค์ - ์ฒซ๋ฌธ์๋ ์๋ฌธ์๋ก ๋ณํ
์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ฅผ HttpSession ์๋ฃํ์ผ๋ก ์ ์ธํ๋ฉด Front Controller์ ์ํด ๋ฐ์ธ๋ฉ๋ ์ธ์ ์ ๋งค๊ฐ๋ณ์์ ์ ๋ฌํ์ฌ ์ ๊ณต
Session Scope
- ๋์ผํ ์ธ์ ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋ทฐํ์ด์ง์์ ์์ฑ๊ฐ์ผ๋ก ์ฌ์ฉ
Model.addAttribute(Object attributeValue)
- ๋ทฐํ์ด์ง์๊ฒ ์์ฑ๊ฐ์ ์ ๊ณตํ๋ ๋ฉ์๋
- ⇒ ์์ฑ๋ช ์ด ์๋ต๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ(๊นฉ์ฒด)์ ํด๋์ค๋ช ์ ์์ฑ๋ช ์ผ๋ก ์๋ ์ค์ - ์ฒซ๋ฌธ์ ์๋ฌธ์
- ⇒ ์์ฑ๊ฐ์ ์๋ฃํ์ด ๊ธฐ๋ณธํ(Wrapper)์ด๊ฑฐ๋ String ํด๋์ค์ธ ๊ฒฝ์ฐ ํธ์ถ ๋ถ๊ฐ
SessionStatus
- @SessionAttributes ์ด๋ ธํ ์ด์ ์ ์ํด ์ ๊ณต๋ ์์ฑ๊ฐ(๊ฐ์ฒด)์ ์ํ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด
- SessionStatussetComplete() : @SessionAttributes ์ด๋ ธํ ์ด์ ์ ์ํด ์ ํ์ ์ธ Session Scope๋ก ์ ๊ณต๋ ๊ฐ์ฒด๋ฅผ Request Scope๋ก ์ ๊ณต๋ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌ๋๋๋ก ๋ณ๊ฒฝํ๋ ๋ฉ์๋
๋ฆฌ์์ค ํ์ผ
- JSP ๋ฌธ์์์ ์ฌ์ฉํ๋ ๋ฉํฐ๋ฏธ๋์ด ํ์ผ, CSS, JS ๋ฑ๋ฑ
- ๋ฌธ์ ์ ) HTML ํ๊ทธ๋ก ๋ฆฌ์์ค ํ์ผ์ ์์ฒญํ ๊ฒฝ์ฐ ๋ฆฌ์์ค ํ์ผ๋ Front Controller์๊ฒ ์์ฒญ๋๋ฏ๋ก ๋งคํ๋ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๊ฐ ์์ด 404 ์๋ฌ ์ฝ๋ ๋ฐ์
- ํด๊ฒฐ๋ฒ ) HTML ํ๊ทธ๋ก ๋ฆฌ์์ค ํ์ผ์ ์์ฒญํ ๊ฒฝ์ฐ Front Controller๋ฅผ ์ด์ฉํ์ง ์๊ณ ์ง์ ์๋ต๋๋๋ก ์ฒ๋ฆฌ
- ⇒ Front Controller์ Bean Configuration File(Servlet - context.xml)์์ resources ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์๋ต๋๋๋ก ์ค์
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํด Front Controller๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์๋ต๋๋๋ก ์ค์ ํ๋ ์๋ฆฌ๋จผํธ
- ⇒ ๋ฆฌ์์ค ํ์ผ์ ํด๋ผ์ด์ธํธ์๊ฒ ์ง์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ
- mapping ์์ฑ : ๋ฆฌ์์ค ํ์ผ์ ์์ฒญํ ์ ์๋ URL ์ฃผ์์ ํจํด์ ์์ฑ๊ฐ์ผ๋ก ์ค์
- ⇒ [**] ๊ธฐํธ๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ ํด๋๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฆฌ์์ค ํ์ผ์ ๋ํ URL ์ฃผ์๋ฅผ ํํ
- location ์์ฑ : ๋ฆฌ์์ค ํ์ผ์ด ์ ์ฅ๋ ํด๋ ๊ฒฝ๋ก๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
- SpringMVC์์๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ Front Controller์ ์ํด ์ฒ๋ฆฌ
'๋ ๊ฑฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2022.03.18~03.20์ ๊ธฐ๋ก (2) | 2022.03.19 |
---|---|
2022.03.17์ ๊ธฐ๋ก (2) | 2022.03.17 |
2022.03.15์ ๊ธฐ๋ก (0) | 2022.03.15 |
2022.03.14์ ๊ธฐ๋ก (0) | 2022.03.14 |
2022.03.11~03.13์ ๊ธฐ๋ก (2) | 2022.03.12 |