day33_Spring Framework ๊ธฐ๋ณธ1

์ดˆ๋ก๊ผฌ๋งˆยท2022๋…„ 10์›” 11์ผ
0

bootcamp_Learning

๋ชฉ๋ก ๋ณด๊ธฐ
34/35

๐Ÿ“— ์˜ค๋Š˜์˜ ํ•™์Šต topics

  • Spring Framework ์‹ค์Šต ํ™˜๊ฒฝ ์„ค์ •
  • Spring Framework ์†Œ๊ฐœ
  • Spring Framework ํŠน์ง•

๐ŸŒฟ Spring Framework ์‹ค์Šต ํ™˜๊ฒฝ ์„ค์ •


๐ŸŒฟ Spring Framework ์†Œ๊ฐœ

  • framework vs library
  • Spring Framework vs ๊ธฐ์กด ๋‹ค๋ฅธ ๊ธฐ์ˆ ๋“ค

Spring Framework๋ฅผ ์™œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š”๊ฐ€?


๐ŸŒฟ Spring Framework ํŠน์ง•

1. Plain Old Java Object

2. IoC/DI

a. Inversion of Control

b. Dependency Injection

3. Aspect-Oriented Programming

๐ŸŒฑ aspect = ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ด€์‹ฌ/๊ด€์  โ†’ ๊ณตํ†ต/ํšก๋‹จ(cross-cutting)/๋ถ€๊ฐ€์  vs ํ•ต์‹ฌ(core) ๊ธฐ๋Šฅ/๊ด€์‹ฌ์‚ฌํ•ญ(concerns) ๋ถ„๋ฆฌ + ๋ถ„๋ฆฌํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ(advice) ๋ฐ ๊ทธ ๊ธฐ๋Šฅ๋“ค์„ ์–ด๋””์— ์ ์šฉํ• ์ง€ ์„ ํƒ/์ •์˜/๊ฒฐ์ •(PointCut)ํ•ด์„œ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ฆ -> ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐ”๋ผ๋ณด๋Š” ํ•˜๋‚˜์˜ ๊ด€์  = ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ

  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ = ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ(์—…๋ฌด ๋กœ์ง ๋“ฑ ํฌํ•จ), ์—…๋ฌด ๊ด€๋ จ ์ฝ”๋“œ
  • ๊ณตํ†ต/ํšก๋‹จ/๋ถ€๊ฐ€์  ๊ธฐ๋Šฅ = ์—…๋ฌด์™€๋Š” ๊ด€๋ จ ์—†์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์ˆ˜์ ์ธ/ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋„์™€์ฃผ๋Š”/๋ณด์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋˜๋Š” ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ โ†’ ๋‹จ๋…์œผ๋กœ(x) ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜(o) + ๋ณดํ†ต ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ๊ฑธ์ณ์„œ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ e.g. ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ, ๋กœ๊น…(๋กœ๊ทธ ์ถ”์ ) ๋“ฑ

๐ŸŒฑ ๋ชฉ์ , ํ•„์š”ํ•œ ์ด์œ  = ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์œผ๋กœ๋ถ€ํ„ฐ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌ/์ฒ˜๋ฆฌ, OOP์˜ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ โ†’ OOP์˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„ ๋ณด์กฐ โ†’ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค/๊ฐ์ฒด ๊ฐ„์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ/๊ธฐ๋Šฅ(e.g. ํŠธ๋žœ์žญ์…˜)์˜ ๋ชจ๋“ˆํ™” โ†’ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์— ์ ์šฉ โ†’ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณ€๊ฒฝ ์ง€์  ๋‹จ์ผํ™”

OOP์˜ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„
1. ๋น„์ฆˆ๋‹ˆ์Šค/service ํด๋ž˜์Šค์— ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ๊ณต์กด โ†’ ๋ฉ”์„œ๋“œ์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€ โ†’ ๋น„์ฆˆ๋‹ˆ์Šค ์ฝ”๋“œ ํŒŒ์•…์ด ์–ด๋ ค์›€
2. ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถˆํŠน์ • ๋‹ค์ˆ˜ ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ์—์„œ (๋ถˆํ•„์š”ํ•˜๊ฒŒ) ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌํ˜„/์ ์šฉ = ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์ค‘๋ณต ์ฝ”๋“œ ๋ฐœ์ƒ โ†’ ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ๋ชจ๋“ˆํ™”๊ฐ€ ์–ด๋ ค์›€ + ๊ณตํ†ต ๊ธฐ๋Šฅ ์ˆ˜์ • ํ•„์š” ์‹œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ผ์ผ์ด ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•จ

๋ชจ๋“ˆํ™”์˜ ํ•ต์‹ฌ ๋‹จ์œ„ = OOP์—์„œ๋Š” ํด๋ž˜์Šค vs AOP์—์„œ๋Š” ๊ด€์ /aspect

4. Portable Service Abstraction


๐Ÿ’ก ์ƒ๊ฐํ•ด๋ณด๊ธฐ

  1. Java Servlet
  2. Servlet Container
  3. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ SOLID
  4. ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ ๊ทธ๋ ค๋ณด๊ธฐ
  5. AOP๋กœ ์ ์šฉ ํ• ๋งŒํ•œ ๊ณตํ†ต ๊ธฐ๋Šฅ์—๋Š” ๋ญ๊ฐ€ ์žˆ์„๊นŒ?
  6. Child ์ถ”์ƒ ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”, ์ผ๋ฐ˜์ ์ธ ์†์„ฑ/๋™์ž‘ ์ถ”๊ฐ€ํ•ด๋ณด๊ธฐ

๐Ÿ€ ์˜ค๋Š˜์˜ ์†Œ๊ฐ

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