๐Ÿ’ก WAS(Web Application Server)์™€ WS(Web Server)์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

WAS(Web Application Server)

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
  • Tomcat, PHP, ASP, .NET ๋“ฑ

WS(Web Server)

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋„ฃ์„ ์ˆ˜ ์—†์Œ
  • Nginx, Apache ๋“ฑ

๐Ÿ’ก Spring Framework์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค.

  • ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ๋กœ์„œ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌ

  • ๊ฐ๊ฐ์˜ ๊ฐ์ฒด ์ƒ์„ฑ, ์†Œ๋ฉธ๊ณผ ๊ฐ™์€ ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์Šคํ”„๋ง์œผ๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์ œ์–ด์˜ ์—ญ์ „(IoC)์ด๋ผ๋Š” ๊ธฐ์ˆ ์„ ํ†ตํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋„๋ชจ

  • ์ปจํŠธ๋กค์˜ ์ œ์–ด๊ถŒ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ์— ์žˆ์–ด์„œ ํ•„์š”์— ๋‹ค๋ผ ์Šคํ”„๋ง์—์„œ ์‚ฌ์šฉ์ž์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…(DI, Dependency Injection)์„ ์ง€์›

  • ๊ฐ๊ฐ์˜ ๊ณ„์ธต์ด๋‚˜ ์„œ๋น„์Šค๋“ค ๊ฐ„์— ์˜์กด์„ฑ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค.

๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP, Aspect-Oriented Programming)์„ ์ง€์›

  • ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋กœ๊น…, ๋ณด์•ˆ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ก MVC๋Š” ์–ด๋– ํ•œ ํ๋ฆ„์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • DispatcherServlet : ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์„ ๋ฐ›์•„ ์‘๋‹ต๊นŒ์ง€์˜ MVC ์ฒ˜๋ฆฌ๊ณผ์ •์„ ํ†ต์ œํ•œ๋‹ค.
  • HandlerMapping : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL์„ ์–ด๋–ค Controller๊ฐ€ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹คใ…ฃ๋‹ค.
  • HandlerAdapter : HandlerMapping์—์„œ ๊ฒฐ์ •๋œ ํ•ธ๋“ค๋Ÿฌ ์ •๋ณด๋กœ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • ViewResolver : Controller์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ(๋ฐ์ดํ„ฐ)๋ฅผ ์ƒ์„ฑํ•  view๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  1. ํด๋ผ์ด์–ธํŠธ๋Š” URL์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.
  2. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด ํ•ด๋‹น ์š”์ฒญ์ด ์–ด๋А ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์˜จ ์š”์ฒญ์ธ์ง€ ์ฐพ๋Š”๋‹ค.
  3. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ์—๊ฒŒ ์š”์ฒญ์˜ ์ „๋‹ฌ์„ ๋งก๊ธด๋‹ค.
  4. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋Š” ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์— ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.
  5. ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„์— ๋ฐ˜ํ™˜ํ•  ๋ทฐ์˜ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  6. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ํ•  ๋ทฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
  7. ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ์— ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  8. ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋œ ๋ทฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ’ก ์Šคํ”„๋ง์—์„œ ๋นˆ(Bean)์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งํ•ด๋ณด์„ธ์š”.

  • ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 2 ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ์šฐ์„  ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @Controller, @Service, @Repository๋Š” ๋ชจ๋‘ @Component๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๊ณ ,ํ•ด๋‹น ํด๋ž˜์Šค ์•ˆ์—์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด @Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ํ•ด๋‹น ํƒ€์ž…์˜ ๋นˆ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์Šคํ”„๋ง ๋นˆ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ๋จผ์ € ์Šคํ”„๋ง Bean์˜ LifeCycle์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ โ†’ ์Šคํ”„๋ง ๋นˆ ์ƒ์„ฑ โ†’ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… โ†’ ์ดˆ๊ธฐํ™” ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ โ†’ ์‚ฌ์šฉ โ†’ ์†Œ๋ฉธ ์ „ ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ โ†’ ์Šคํ”„๋ง ์ข…๋ฃŒ

์Šคํ”„๋ง์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋นˆ ์ƒ๋ช…์ฃผ๊ธฐ ์ฝœ๋ฐฑ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. ์ธํ„ฐํŽ˜์ด์Šค( InitializingBean, DisposableBean )
  2. ์„ค์ • ์ •๋ณด์— ์ดˆ๊ธฐํ™” ๋ฉ”์†Œ๋“œ, ์ข…๋ฃŒ ๋ฉ”์†Œ๋“œ ์ง€์ •
  3. @PostConstruct, @PreDestroy ์–ด๋…ธํ…Œ์ด์…˜ ์ง€์›

๐Ÿ’ก Spring Filter์™€ Interceptor์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ , ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ํ•„ํ„ฐ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฑฐ๋ฅธ๋’ค ์ •์ œํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ํ†ฐ์บฃ๊ณผ ๊ฐ™์€ ์›น ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๊ณ , ์Šคํ”„๋ง ๋ฒ”์œ„ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  1. Dispatcher Servlet์— ์š”์ฒญ์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „ / ํ›„์— url ํŒจํ„ด์— ๋งž๋Š” ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ๋ถ€๊ฐ€ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.์‚ฌ์šฉ ์‚ฌ๋ก€ :

๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ๊ด€๋ จ ์ž‘์—…
๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ๋กœ๊น… ๋˜๋Š” ๊ฒ€์‚ฌ
์ด๋ฏธ์ง€/๋ฐ์ดํ„ฐ ์••์ถ• ๋ฐ ๋ฌธ์ž์—ด ์ธ์ฝ”๋”ฉ
Spring๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ

  • ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ž‘์—… ์ „ / ํ›„๋กœ ๊ฐ€๋กœ์ฑ„ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.์›น ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” ํ•„ํ„ฐ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  1. Dispatcher Servlet์ด Controller๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ / ํ›„์— ์ธํ„ฐ์…‰ํ„ฐ๊ฐ€ ๋ผ์–ด๋“ค์–ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต์‚ฌ์šฉ ์‚ฌ๋ก€ :

์„ธ๋ถ€์ ์ธ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ/์ธ๊ฐ€ ๊ณตํ†ต ์ž‘์—…
API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ๋กœ๊น… ๋˜๋Š” ๊ฒ€์‚ฌ
Controller๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ์ •๋ณด(๋ฐ์ดํ„ฐ)์˜ ๊ฐ€๊ณต

์ถœ์ฒ˜: https://dev-coco.tistory.com/163 [์Šฌ๊ธฐ๋กœ์šด ๊ฐœ๋ฐœ์ƒํ™œ:ํ‹ฐ์Šคํ† ๋ฆฌ]

profile
๊ฐœ๋ฐœ์ž์™€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์•ˆ๋˜์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€