์Šคํ”„๋ง

๊ธฐ์ดˆ ์ง€์‹ - 1

KIMHYEYUN 2022. 9. 1. 15:43
๋ฐ˜์‘ํ˜•

์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ 

  • ์–ด๋–ค ํฌํ„ธ ์‚ฌ์ดํŠธ๋ฅผ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค๊ณ  ๊ฐ€์ •.
  • ์ฆ‰, ๋ธ”๋กœ๊ทธ, ์นดํŽ˜, ๋ฉ”์ผ ๋“ฑ์˜ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉ
  • ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด ์„œ๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ๋งˆ๋‹ค '์‚ฌ์ดํŠธ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค.' ํŒป๋ง์„ ๊ฑธ๊ณ  ์ž‘์—…ํ•ด์•ผํ•จ
  • ๊ทธ๋งŒํผ ๊ฐœ๋ฐœ์— ๋ณด์ˆ˜์ ์ธ ์ž…์žฅ์„ ์ทจํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ณ , ์„œ๋น„์Šค ์ž์ฒด์˜ ๊ทœ๋ชจ๋„ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋™ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋„ ๊ธธ์–ด์ง

โ†’ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA; Microservice Architecture)
โ†’ ์„œ๋น„์Šค ๊ทœ๋ชจ๋ฅผ ์ž‘๊ฒŒ ๋‚˜๋ˆ„์–ด ๊ตฌ์„ฑํ•œ ์•„ํ‚คํ…์ณ

  • ์•ž์„  ์˜ˆ๋กœ ๋“  ํฌํ„ธ ์‚ฌ์ดํŠธ์— ์ ์šฉํ•œ๋‹ค๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด ๊ฐœ๋ฐœํ•˜์ง€ ์•Š๊ณ  ๋ธ”๋กœ๊ทธ ํ”„๋กœ์ ํŠธ, ์นดํŽ˜ ํ”„๋กœ์ ํŠธ, ๋ฉ”์ผ ํ”„๋กœ์ ํŠธ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋จ

๋‹จ์ผ ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋œ A ํฌํ„ธ ์‚ฌ์ดํŠธ๋Š” ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋“ฑ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ์ž์›์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์„œ๋น„์Šค ๊ธฐ๋Šฅ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด์„œ B ํฌํ„ธ ์‚ฌ์ดํŠธ์™€ ๊ฐ™์ด ๋…๋ฆฝ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ ์„œ๋น„์Šค ๊ฐ„์— ํ†ต์‹ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•จ

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ธ”๋กœ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์ณ์•ผ๋งŒ ํ•˜๋Š” ์ƒํ™ฉ๋“ฑ์ด ์žˆ์Œ
์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ์˜ ํ†ต์‹ ์„ ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์ด๋ผ๊ณ  ํ•จ

โœ… ์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์€ ํ•œ ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ฒ„์— ํ†ต์‹ ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ํ•œ ๋Œ€๋Š” ์„œ๋ฒ„, ๋‹ค๋ฅธ ํ•œ ๋Œ€๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋˜๋Š” ๊ตฌ์กฐ

๋ช‡ ๊ฐ€์ง€ ํ”„๋กœํ† ์ฝœ์— ์˜ํ•ด ๋‹ค์–‘ํ•œ ํ†ต์‹  ๋ฐฉ์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์€ HTTP/HTTPS ๋ฐฉ์‹


์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ๋™์ž‘ ๋ฐฉ์‹

spring-boot-starter-web ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ฐ์บฃ(Tomcat)์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง MVC ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

์„œ๋ธ”๋ฆฟ(Servlet) : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ธ”๋ฆฟ์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ.
์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ : ์„œ๋ธ”๋ฆฟ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด
ํ†ฐ์บฃ์€ WAS์˜ ์—ญํ• ๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€ํ‘œ์  ์ปจํ…Œ์ด๋„ˆ

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ํŠน์ง•

  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ์ดˆ๊ธฐํ™”, ํ˜ธ์ถœ, ์ข…๋ฃŒํ•˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌ
  • ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ๊ด€๋ฆฌ๋จ
  • ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์„ ์ง€์›

์Šคํ”„๋ง์—์„œ๋Š” DispatcherServlet์ด ์„œ๋ธ”๋ฆฟ ์—ญํ• ์„ ์ˆ˜ํ–‰. ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง์€ ํ†ฐ์บฃ์„ ์ž„๋ฒ ๋“œํ•ด ์‚ฌ์šฉ
โ†’ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์™€ DispatcherServlet์€ ์ž๋™ ์„ค์ •๋œ web.xml์˜ ์„ค์ •๊ฐ’์„ ๊ณต์œ 

DispatcherServlet ๋™์ž‘

  1. DispatcherServlet์œผ๋กœ ์š”์ฒญ(HttpServletRequest)์ด ๋“ค์–ด์˜ค๋ฉด DispatcherServlet์€ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘(Handler Mapping)์„ ํ†ตํ•ด ์š”์ฒญ URI์— ๋งคํ•‘๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํƒ์ƒ‰ ์—ฌ๊ธฐ์„œ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋ฅผ ์˜๋ฏธ
  2. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ(HandlerAdapter)๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœ
  3. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ์— ์ปจํŠธ๋กค๋Ÿฌ์˜ ์‘๋‹ต์ด ๋Œ์•„์˜ค๋ฉด ModelAndView๋กœ ์‘๋‹ต์„ ๊ฐ€๊ณตํ•ด ๋ฐ˜ํ™˜
  4. ๋ทฐ ํ˜•์‹์œผ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ทฐ ๋ฆฌ์กธ๋ฒ„(View Resolver)๋ฅผ ํ†ตํ•ด ๋ทฐ๋ฅผ ๋ฐ›์•„ ๋ฆฌํ„ด
  • ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘ : ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์„ ์ •ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค. ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์ง

ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋Œ€ํ‘œ์  ๊ตฌํ˜„ ํด๋ž˜์Šค

  • BeanNameUrlHandlerMapping
    • ๋นˆ ์ด๋ฆ„์„ URL๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋งคํ•‘ ์ „๋žต
    • ๋นˆ์„ ์ •์˜ํ•  ๋•Œ ์Šฌ๋ž˜์‹œ("/")๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋งคํ•‘ ๋Œ€์ƒ์ด ๋จ
    • ex. @Bean("/hello")
  • ControllerClassNameHandlerMapping
    • URL๊ณผ ์ผ์น˜ํ•˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋นˆ์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต
    • ์ด๋ฆ„ ์ค‘ Controller๋ฅผ ์ œ์™ธํ•˜๊ณ  ์•ž๋ถ€๋ถ„์— ์ž‘์„ฑ๋œ suffix๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋งคํ•‘
  • SimpleUrlHandlerMapping
    • URL ํŒจํ„ด์— ๋งคํ•‘๋œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ „๋žต
  • DefaultAnnotationHandlerMapping
    • ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ URL๊ณผ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ทฐ ๋ฆฌ์กธ๋ฒ„ : ๋ทฐ์˜ ๋ Œ๋”๋ง ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•จ


๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ณ (Layered Architecture)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ ์‚ฌ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ด์–ด๋ฅผ ๋ฌถ์–ด ์ˆ˜ํ‰์ ์œผ๋กœ ๊ตฌ์„ฑํ•œ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธ

Spring MVC๋Š” Model-View-Controller์˜ ๊ตฌ์กฐ๋กœ View์™€ Controller๋Š” ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต ์˜์—ญ์ด๋ฉฐ, Model์€ ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์˜ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Œ
๋‹ค๋งŒ, ์Šคํ”„๋ง MVC ๋ชจ๋ธ๋กœ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ญํ• ์„ ์„ธ๋ถ„ํ™”ํ•จ
๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์— ์„œ๋น„์Šค๋ฅผ ๋ฐฐ์น˜ํ•ด ์—”ํ‹ฐํ‹ฐ์™€ ๊ฐ™์€ ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์กฐํ•ฉํ•˜๋„๋ก ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์—๋Š” DAO (Spring Data JPA์—์„œ๋Š” Repository)๋ฅผ ๋ฐฐ์น˜ํ•ด ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•จ

์Šคํ”„๋ง ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ณ

  • ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต

    • ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค(UI; User Interface) ๊ณ„์ธต์ด๋ผ๊ณ ๋„ ํ•จ
    • ํด๋ผ์ด์–ธํŠธ์™€์˜ ์ ‘์ 
    • ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• 
  • ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต

    • ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„œ๋น„์Šค(Service) ๊ณ„์ธต์ด๋ผ๊ณ ๋„ ํ•จ
    • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์˜์—ญ
    • ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋‚˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋“ฑ์˜ ์ž‘์—…๋„ ์ˆ˜ํ–‰
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต

    • ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜์†(Persistence) ๊ณ„์ธต์ด๋ผ๊ณ ๋„ ํ•จ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
    • DAO๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ํ‘œํ˜„๋์ง€๋งŒ Spring Data JPA์—์„œ๋Š” DAO ์—ญํ• ์„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต ์˜์—ญ์ธ๋ฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์–ด๋””์„œ ๋‹ด๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
์Šคํ”„๋ง์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด @Entity๋ฅผ ์ •์˜ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋„๋ฉ”์ธ ๊ฐ์ฒด๊ฐ€ ๋˜๋ฉฐ, ์ด๊ณณ์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์„ค๊ณ„ํ•˜๋ฉด ์ข‹์Œ


๋””์ž์ธ ํŒจํ„ด

์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ํ•ด๊ฒฐ์ฑ…
'ํŒจํ„ด'์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋Š” ์œ ์‚ฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ  ํ•ด๊ฒฐ์ฑ…๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‚ดํฌ
๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ฌธ์ œ์˜ ์ •๋‹ต์€ ์•„๋‹ˆ๋ฉฐ ์ƒํ™ฉ์— ๋งž๋Š” ์ตœ์  ํŒจํ„ด์„ ๊ฒฐ์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์ง

์ข…๋ฅ˜

GoF ๋””์ž์ธ ํŒจํ„ด : ๋””์ž์ธ ํŒจํ„ด์„ ๊ตฌ์ฒดํ™”ํ•ด์„œ ์ •๋ฆฌํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ถ„๋ฅ˜ ๋ฐฉ์‹

์ƒ์„ฑ(Creational) ํŒจํ„ด ๊ตฌ์กฐ(Structural) ํŒจํ„ด ํ–‰์œ„(Behavioral) ํŒจํ„ด
์ถ”์ƒ ํŒฉํ† ๋ฆฌ ์–ด๋Œ‘ํ„ฐ ์ฑ…์ž„ ์—ฐ์‡„
๋นŒ๋” ๋ธŒ๋ฆฌ์ง€ ์ปค๋งจ๋“œ
ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์ปดํฌ์ง€ํŠธ ์ธํ„ฐํ”„๋ฆฌํ„ฐ
ํ”„๋กœํ† ํƒ€์ž… ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ดํ„ฐ๋ ˆ์ดํ„ฐ
์‹ฑ๊ธ€ํ†ค ํผ์‚ฌ๋“œ ๋ฏธ๋””์—์ดํ„ฐ
ํ”Œ๋ผ์ด์›จ์ดํŠธ ๋ฉ”๋ฉ˜ํ† 
ํ”„๋ฝ์‹œ ์˜ต์ €๋ฒ„
์Šคํ…Œ์ดํŠธ
์ŠคํŠธ๋ ˆํ‹ฐ์ง€
ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ
๋น„์ง€ํ„ฐ

GoF ๋””์ž์ธ ํŒจํ„ด์€ ์ƒ์„ฑ ํŒจํ„ด, ๊ตฌ์กฐ ํŒจํ„ด, ํ–‰์œ„ ํŒจํ„ด ์ด ์„ธ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋จ

  • ์ƒ์„ฑ ํŒจํ„ด

    • ๊ฐ์ฒด ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์œผ๋กœ, ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•ด๋„ ํ˜ธ์ถœ๋ถ€๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ํ•จ
  • ๊ตฌ์กฐ ํŒจํ„ด

    • ๊ฐ์ฒด๋ฅผ ์กฐํ•ฉํ•ด๋„ ๋” ํฐ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ํŒจํ„ด
  • ํ–‰์œ„ ํŒจํ„ด

    • ๊ฐ์ฒด ๊ฐ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์ฑ…์ž„ ๋ถ„๋ฐฐ์— ๊ด€ํ•œ ํŒจํ„ด
    • ๊ฐ์ฒด ํ•˜๋‚˜๋กœ๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ์ž‘์—…์„ ๋ถ„๋ฐฐํ•จ. ๊ฒฐํ•ฉ๋„ ์ตœ์†Œํ™”๋ฅผ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ

์ƒ์„ฑ ํŒจํ„ด

  • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ : ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ƒํ™ฉ์— ๋งž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด
  • ๋นŒ๋” : ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ํ‘œํ˜„์„ ๋ถ„๋ฆฌํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒจํ„ด
  • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ : ๊ฐ์ฒด ์ƒ์„ฑ์„ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์œ„์ž„ํ•˜๋Š” ํŒจํ„ด
  • ํ”„๋กœํ† ํƒ€์ž… : ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํŒจํ„ด
  • ์‹ฑ๊ธ€ํ†ค : ํ•œ ํด๋ž˜์Šค๋งˆ๋‹ค ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜์ž„์„ ๋ณด์žฅํ•˜๊ณ  ์–ด๋А ๊ณณ์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์ด์Ž„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด

๊ตฌ์กฐ ํŒจํ„ด

  • ์–ด๋Œ‘ํ„ฐ : ํด๋ž˜์Šค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒจํ„ด
  • ๋ธŒ๋ฆฌ์ง€ : ์ถ”์ƒํ™”์™€ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐ๊ฐ ๋…๋ฆฝ์ฉ์œผ๋กœ ๋ณ€ํ˜•์ผ€ ํ•˜๋Š” ํŒจํ„ด
  • ์ปดํฌ์ง€ํŠธ : ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ ๋ณตํ•ฉ ๊ฐ์ฒด์™€ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์–ด๋А์—์„œ ๊ตฌ๋ณ„ ์—†์ด ๋‹ค๋ฃจ๋Š” ํŒจํ„ด
  • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ : ๊ฐ์ฒด์˜ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํŒจํ„ด
  • ํผ์‚ฌ๋“œ : ์„œ๋ธŒ์‹œ์Šคํ…œ์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ง‘ํ•ฉ๋“ค์— ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด
  • ํ”Œ๋ผ์ด์›จ์ดํŠธ : ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ํ•œ ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ '๊ฐ€์ƒ ์ธ์Šคํ„ด์Šค'๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด
  • ํ”„๋ฝ์‹œ : ํŠน์ • ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋Œ€ํ–‰(ํ”„๋ฝ์‹œ)ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ํŒจํ„ด

ํ–‰์œ„ ํŒจํ„ด

  • ์ฑ…์ž„ ์—ฐ์‡„ : ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด ๊ฒฐํ•ฉ์„ ๋А์Šจํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด
  • ์ปค๋งจ๋“œ : ์‹คํ–‰๋  ๊ธฐ๋Šฅ์„ ์บก์Аํ™”ํ•ด์„œ ์ฃผ์–ด์ง„ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•˜๋„๋ก ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ํŒจํ„ด
  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ : ์ฃผ์–ด์ง„ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ์œ„ํ•œ ํ‘œํ˜„ ์ˆ˜๋‹จ์„ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ์–ธ์–ด๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์žฅ์„ ํ•ด์„ํ•˜๋Š” ํŒจํ„ด
  • ์ดํ„ฐ๋ ˆ์ดํ„ฐ : ๋‚ด๋ถ€ ๊ตฌ์กฐ ๋…ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ง‘ํ•ฉ ์›์†Œ์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ํŒจํ„ด
  • ๋ฏธ๋””์—์ดํ„ฐ : ํ•œ ์ง‘ํ•ฉ์— ์†ํ•œ ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์บก์Аํ™”ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•œ ํŒจํ„ด
  • ๋ฉ”๋ฉ˜ํ†  : ๊ฐ์ฒด์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•„์š”ํ—ค ๋”ฐ๋ผ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ํŒจํ„ด
  • ์˜ต์ €๋ฒ„ : ๊ฐ์ฒด์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ๊ด€์ฐฐ์ž๋“ค, ์ฆ‰ ์˜ต์ €๋ฒ„ ๋ชฉ๋ก์„ ๊ฐ์ฒด์— ๋“ฑ๋กํ•ด ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋“ฑ์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ์˜ต์ €๋ฒ„์—๊ฒŒ ํ†ต์ง€ํ•˜๊ฒŒ ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด
  • ์Šคํ…Œ์ดํŠธ : ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ์ฒด๊ฐ€ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ํ•˜๋Š” ํŒจํ„ด
  • ์ŠคํŠธ๋ž˜ํ‹ฐ์ง€ : ํ–‰๋™์„ ํด๋ž˜์Šค๋กœ ์บก์Аํ™”ํ•ด์„œ ๋™์ ์œผ๋กœ ํ–‰๋™์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํŒจํ„ด
  • ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ : ์ผ์ • ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์„ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ์บก์Аํ™”ํ•ด์„œ ์ „์ฒด ์ˆ˜ํ–‰ ๊ตฌ์กฐ๋Š” ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด์„œ ํŠน์ • ๋‹จ๊ณ„๋งŒ ๋ณ€๊ฒฝํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒจํ„ด
  • ๋น„์ง€ํ„ฐ : ์‹ค์ œ ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด(visitor)๊ฐ€ ๋กœ์ง์„ ์ ์šฉํ•  ๊ฐ์ฒด(element)๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ํŒจํ„ด
728x90
๋ฐ˜์‘ํ˜•