๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ ˆ๊ฑฐ์‹œ

2022.03.16์˜ ๊ธฐ๋ก

by GroovyArea 2022. 3. 16.

โ–ถ ์˜ค๋Š˜ ๊ณ„ํš

=>  ๊ณต๋ถ€ ๊ด€๋ จ

1) ์ˆ˜์—… ๋‚ด์šฉ ๋ณต์Šต

2) ์Šคํ”„๋ง PSA ์ˆ˜๊ฐ•

3) ์ธํ…”๋ฆฌ์ œ์ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…

4) ์ค‘๊ธ‰ ๊ฐ•์˜ ๊ฒฐ์ œ ๋ฐ 1,2๊ฐ•? ์ˆ˜๊ฐ•

์ด๋ฒˆ์ฃผ ์•ˆ์— ๋‹ค ๋ณธ๋‹ค.


โ–ถ ๋ฌธ์ œ ์ •๋ฆฌ

1. ๋นˆ ๋“ฑ๋ก ๋ฌธ์ œ

service, repository ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ฉ”์ธ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ ์—๋Ÿฌ ๋กœ๊ทธ

> ๋กœ๊ทธ๋Œ€๋กœ ์—๋„ˆํ…Œ์ด์…˜์œผ๋กœ ๋นˆ ๋“ฑ๋ก

์—๋„ˆํ…Œ์ด์…˜์œผ๋กœ ๋นˆ ๋“ฑ๋ก

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 ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์‘๋‹ต๋˜๋„๋ก ์„ค์ •
    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