[Spring][๊ฐœ๋…]๐Ÿ”ฅ Spring Framework๋กœ ๋์žฅ๋‚ด๊ธฐ: ๊ฐ์ฒด ์ œ์–ด๋ถ€ํ„ฐ ํŠธ๋žœ์žญ์…˜๊นŒ์ง€ ์™„๋ฒฝ ๋งˆ์Šคํ„ฐ!

๊น€์ƒ์šฑยท2024๋…„ 10์›” 15์ผ
post-thumbnail

๐ŸŽฏ Framework? ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿ’ก ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
๐Ÿ‘‰ ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ฝ”๋“œ์˜ ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ›  ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • ํด๋ž˜์Šค(Class)์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์˜ ๋ชจ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์–ด ์ค‘๋ณต ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.


๐ŸŽจ GUI ์ง€์›์˜ ํŽธ๋ฆฌํ•จ

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(GUI) ๊ตฌํ˜„์„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํŠผ, ์ž…๋ ฅ์ฐฝ, ๋ฉ”๋‰ด ๊ฐ™์€ GUI ์š”์†Œ๋“ค์„ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ‘œ์ค€ํ™”๋œ GUI ํˆด์„ ํ™œ์šฉํ•ด ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿงฑ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ด€๊ณ„

  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ์กด ํด๋ž˜์Šค๋“ค์„ ์ƒ์†ํ•˜์—ฌ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœจ ๋•๋ถ„์— ์ฝ”๋“œ์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๊ทน๋Œ€ํ™”๋ฉ๋‹ˆ๋‹ค.


โšก ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ๊ณผ ์ž๋™ํ™”

  • ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ด๊ณ , ์ž๋™ํ™”๋œ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐ŸŒฑ Spring Framework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ


1๏ธโƒฃ Spring Framework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (1/5)

  • EJB๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž‘์„ฑ์ด ์šฉ์ดํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
    • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋”ฉ, ๋ฆฌ์†Œ์Šค ํ’€๋ง ๊ฐ™์€ ๋ณต์žกํ•œ ์ž‘์—…๋„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ–ˆ์ฃ .
    • Low-Level API๋ฅผ ๋ชฐ๋ผ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“˜ ๊ทธ๋Ÿฌ๋‚˜: ์ ์ฐจ EJB์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ํšจ์œจ์„ฑ์ด ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.


2๏ธโƒฃ Spring Framework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (2/5)

  • EJB์˜ ๋‹จ์ 
    • ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ˜์˜์ด ๋А๋ฆผ: ๊ธฐ๋Šฅ์€ ๊ฐ•๋ ฅํ–ˆ์ง€๋งŒ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
    • ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด EJB ์„œ๋ฒ„๊ฐ€ ํ•„์ˆ˜๋ผ ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ๋ฒˆ๊ฑฐ๋กœ์› ์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ Spring Framework ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ (3/5)

  • ์›น์‚ฌ์ดํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์š”๊ตฌ๊ฐ€ ๋Š˜์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.
    • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ์„ธ์…˜ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ ๊ฐ™์€ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ EJB7์˜ ๋ฌด๊ฑฐ์šด ๊ตฌ์กฐ๊ฐ€ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
    • ๋ฐฐํฌ ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ณ  ์„ค์ •ํ•  ํ•ญ๋ชฉ์ด ๋งŽ์•„ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋А๋ ค์กŒ์Šต๋‹ˆ๋‹ค.
    • RMI ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌด๊ฒ๊ณ  ์„ค์ •์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

๐Ÿ“— ๋Œ€์•ˆ: Rod Johnson์€ EJB ์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•˜๋ฉฐ Spring Framework๊ฐ€ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

  • AOP, DI๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆํ™”์™€ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๊ทน๋Œ€ํ™”
  • POJO ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ ๋„์ž…

4๏ธโƒฃ POJO์™€ ๊ฒฝ๋Ÿ‰ ํ”„๋ ˆ์ž„์›Œํฌ (4/5)

  • POJO (Plain Old Java Object)

    • Plain: ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ component interface์— ์˜์กดํ•˜์ง€ ์•Š์Œ
    • Old: EJB ์ด์ „์˜ Java ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธ
  • POJO ๋•๋ถ„์— ์ฝ”๋“œ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ๋…๋ฆฝ์ ์ด์–ด์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ๊ฒฝ๋Ÿ‰ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋“ฑ์žฅ

    • EJB์™€ ์œ ์‚ฌํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ ๋” ๊ฐ€๋ฒผ์šด ํ”„๋ ˆ์ž„์›Œํฌ:
      • Hibernate, JDO, MyBatis, Spring

5๏ธโƒฃ Spring Framework์˜ ๊ฐ•์  (5/5)

  • POJO + Framework ์กฐํ•ฉ์˜ ๊ฐ•์ 
    • EJB ์„œ๋ฒ„์™€ ๊ฐ™์€ ๋ฌด๊ฑฐ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•„์š” ์—†์Œ
    • ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋ฌด๋ฃŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์œผ๋กœ ๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ
    • ์›น๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿš€ Spring Framework: JEE๋ฅผ ๋„˜์–ด์„œ ๊ฒฝ๋Ÿ‰ํ™”๋œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ์˜ ํ•ด๋ฒ•


๐ŸŒฑ Spring Framework๋ž€?


1๏ธโƒฃ JEE(Java Enterprise Edition)์™€์˜ ๊ด€๊ณ„

  • JEE๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๋ณต์žกํ•œ ์„ค์ •๊ณผ ์‚ฌ์šฉ์ƒ์˜ ๋ถˆํŽธํ•จ์ด ์žˆ์–ด, Spring Framework๊ฐ€ ๋Œ€์•ˆ์œผ๋กœ ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค.

Spring์˜ ์ฃผ์š” ํŠน์ง•:

  • DI (Dependency Injection): ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์—ฌ ์œ ์—ฐ์„ฑ์„ ๋†’์ž„
  • AOP (Aspect-Oriented Programming): ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ–ฅ์ƒ

๐Ÿ’ก ํ•ต์‹ฌ: Spring์€ JEE์˜ ๋ณต์žก์„ฑ์„ ๊ทน๋ณตํ•˜๋ฉฐ ํšจ์œจ์ ์ด๊ณ  ๊ฐ„๋‹จํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


2๏ธโƒฃ Spring์˜ ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ธํ”„๋ผ ์ œ๊ณต

  • Spring์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํฌ๊ด„์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์„ค์ •(Configuration) ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋ฉด์„œ๋„ Application ์ˆ˜์ค€์˜ ์ธํ”„๋ผ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Low-Level API์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

โœจ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ์— ์ „๋…ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ตฌ์กฐ๊ฐ€ Spring์˜ ๊ฐ€์žฅ ํฐ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค.


3๏ธโƒฃ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ์˜ ํ™œ์šฉ

Spring์€ ๊ธฐ์—…์˜ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ํญ๋„“๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ๋ณด์•ˆ๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โœ๏ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์ด๋ž€?
๊ธฐ์—…์˜ ๋‹ค์–‘ํ•œ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ธํ”„๋ผ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


4๏ธโƒฃ Spring์ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ

  • Low-Level ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ์—ฐ๋™๋˜์–ด ํญ๋„“์€ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Spring Framework์˜ ๊ตฌ์กฐ: ๊ฒฝ๋Ÿ‰ํ™”๋œ ๊ฐœ๋ฐœ ์ฒ ํ•™์˜ ํ•ต์‹ฌ


1๏ธโƒฃ Spring ์‚ผ๊ฐํ˜• ๊ตฌ์กฐ

Spring Framework๋Š” Enterprise Application ๊ฐœ๋ฐœ ์‹œ ๋ณต์žก์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 4๊ฐ€์ง€ ์ฃผ์š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

  1. POJO (Plain Old Java Object)
  2. PSA (Portable Service Abstraction)
  3. IoC/DI (Inversion of Control / Dependency Injection)
  4. AOP (Aspect-Oriented Programming)

๐ŸŒฑ 1. POJO (Plain Old Java Object)

POJO๋Š” ๊ธฐ์ˆ ์ด๋‚˜ ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š์€ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด ์ง€ํ–ฅ ์›์น™์„ ์ถฉ์‹คํžˆ ๋”ฐ๋ฅด๋ฉฐ, ๋‹จ์ˆœํ•œ Java ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
  • Spring์—์„œ๋Š” POJO๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ธฐ์ˆ  ์Šคํƒ์˜ ๋ถ„๋ฆฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

POJO์˜ ํŠน์ง•

  • ์œ ์—ฐํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ, ์ž์œ ๋กญ๊ฒŒ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์šฉ์ดํ•˜๋ฉฐ, ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: Spring์€ POJO๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ์กด ๋ฌด๊ฑฐ์šด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ตฌ์กฐ์˜ ์˜์กด์„ฑ์„ ์—†์• ๊ณ  ๊ฒฝ๋Ÿ‰ํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


โš™๏ธ 2. PSA (Portable Service Abstraction)

PSA๋Š” ๊ธฐ์ˆ ์˜ ๋ณ€๊ฒฝ์—๋„ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋™์ž‘ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์„ค๊ณ„ ์›์น™์ž…๋‹ˆ๋‹ค.

PSA์˜ ์—ญํ• ๊ณผ ํŠน์ง•

  • ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”, OXM ์ถ”์ƒํ™”, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค์™€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ์ˆ ์  ๋ณต์žก์„ฑ์„ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • Low-Level์˜ ๋ณต์žกํ•œ ๊ตฌํ˜„๋ถ€๋ฅผ PSA๊ฐ€ ๊ฐ์ถ”๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํŠน์ • ๊ธฐ์ˆ ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ: PSA ๋•๋ถ„์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”„ 3. IoC / DI (Inversion of Control / Dependency Injection)

IoC์™€ DI๋Š” ๊ฐ์ฒด์˜ ์˜์กด์„ฑ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

DI์˜ ํŠน์ง•๊ณผ ์—ญํ• 

  • ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์ฝ”๋“œ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ด€๊ณ„ ์„ค์ •์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋™์ ์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์–ด, ๋ชจ๋“ˆํ™”์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: IoC์™€ DI๋Š” ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •์—๋„ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ 4. AOP (Aspect-Oriented Programming)

AOP๋Š” ๊ณตํ†ต ๋ชจ๋“ˆ์„ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ชจ๋“ˆ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns)๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

AOP์˜ ์ฃผ์š” ์—ญํ• 

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

๐Ÿ’ก ์˜ˆ์‹œ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์ณ ๋™์ผํ•œ ๋กœ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ AOP๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ Spring์œผ๋กœ ๊ฐœ๋ฐœ์— ๋‚ ๊ฐœ๋ฅผ ๋‹ฌ๋‹ค: ๊ฐ์ฒด ๊ด€๋ฆฌ๋ถ€ํ„ฐ ํŠธ๋žœ์žญ์…˜๊นŒ์ง€ ๋งˆ์Šคํ„ฐํ•˜๊ธฐ - Spring ํŠน์ง•


1๏ธโƒฃ ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ (Lightweight Container)

Spring์€ ์ž๋ฐ” ๊ฐ์ฒด๋“ค์„ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ, ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ง์ ‘ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ์˜ ํŠน์ง•

  • ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ: ์Šคํ”„๋ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด(Bean)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ์ฒด์˜ ์ƒ์• ์ฃผ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ•„์š”ํ•œ ์‹œ์ ์— ๊ฐ์ฒด ์ œ๊ณต: ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ์˜์กด์„ฑ ์ฃผ์ž… ์ง€์›: ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ค์ •ํ•ด์ฃผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๊ณ„ ์„ค์ •์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํ•˜์—ฌ ๊ฐœ๋ฐœ์˜ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.


2๏ธโƒฃ DI (Dependency Injection) - ์˜์กด์„ฑ ์ฃผ์ž… ํŒจํ„ด ์ง€์›

DI๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ฝ”๋“œ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

DI์˜ ์—ญํ• ๊ณผ ํŠน์ง•

  1. ๊ฐ์ฒด ๊ฐ„ ๊ฒฐํ•ฉ๋„ ์ตœ์†Œํ™”:

    • ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์œ ์—ฐํ•œ ํ™•์žฅ๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ์„ค์ • ํŒŒ์ผ๊ณผ ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์˜์กด์„ฑ ์ •์˜:

    • XML ์„ค์ • ํŒŒ์ผ์ด๋‚˜ @Autowired, @Component ๊ฐ™์€ ์• ๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„ ์˜์กด์„ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ฝ”๋“œ์—์„œ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์˜์กด์„ฑ ์ฃผ์ž…:

    • ๊ฐ์ฒด๋Š” ํ•„์š”ํ•œ ์‹œ์ ์— ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: DI๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3๏ธโƒฃ AOP (Aspect-Oriented Programming) - ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›

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

AOP์˜ ํŠน์ง•

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

๐Ÿ’ก ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ž€?
์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๊ธฐ๋Šฅ(์˜ˆ: ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋กœ๊น…)์œผ๋กœ, AOP๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ค‘๋ณต ์—†์ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AOP ์ ์šฉ ์˜ˆ์‹œ

  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๊ณ  AOP๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๋ชจ๋“ˆ์˜ ๋…๋ฆฝ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.
  • ๋กœ๊น…: ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ๋™์ผํ•œ ๋กœ๊น… ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: AOP๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.


4๏ธโƒฃ POJO (Plain Old Java Object) ์ง€์›

POJO๋Š” ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š์€ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์—์„œ๋Š” ์ด POJO ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ง๊ด€์ ์ด๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

POJO์˜ ํŠน์ง•

  1. ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ํด๋ž˜์Šค ์ƒ์† ์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ:

    • POJO๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ์ž์œ ๋กญ๊ฒŒ ๊ฐ์ฒด๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ์กด์˜ Java ๊ฐ์ฒด์ง€ํ–ฅ ์›์น™์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๋ฉด์„œ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‹จ์ˆœํ•œ ๊ฐ์ฒด ๊ตฌ์กฐ๋กœ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด:

    • POJO๋Š” ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ๋™์ž‘ํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ ๋•๋ถ„์— ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฝ๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: ์Šคํ”„๋ง์€ POJO๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ณต์žกํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ตฌ์กฐ ์—†์ด๋„ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


5๏ธโƒฃ IoC (Inversion of Control - ์ œ์–ด์˜ ๋ฐ˜์ „)

IoC๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ์ œ์–ด๊ถŒ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ฑ์„ ์—ฐ๊ฒฐํ–ˆ์ง€๋งŒ, IoC๋ฅผ ํ†ตํ•ด ์ด ์ž‘์—…์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ์œ„์ž„๋ฉ๋‹ˆ๋‹ค.

IoC์˜ ๋„์ž… ๋ฐฐ๊ฒฝ๊ณผ ํŠน์ง•

  • ์ดˆ๊ธฐ Java ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์˜์กด ๊ด€๊ณ„ ์„ค์ •์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Servlet๊ณผ EJB๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ์ผ๋ถ€ ๊ฐ์ฒด์˜ ์ œ์–ด๊ถŒ์€ Servlet Container์™€ EJB Container์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ํ•ต์‹ฌ์ ์ธ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์€ ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ”„๋ง์—์„œ์˜ IoC ๊ตฌํ˜„

  • ์Šคํ”„๋ง์€ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š”๋ฐ, ์ด๋ฅผ Spring Container ๋˜๋Š” IoC Container๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • IoC Container๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋™์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: IoC๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ๊ด€๋ฆฌ์™€ ์˜์กด์„ฑ ์ฒ˜๋ฆฌ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


6๏ธโƒฃ ์Šคํ”„๋ง์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์ง€์›

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

์Šคํ”„๋ง์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

  • JDBC, JTA์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํŠธ๋žœ์žญ์…˜ API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ์• ๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜ ๊ด€๋ จ ์„ค์ •์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ: ๊ฐœ๋ฐœ์ž๊ฐ€ JDBC์™€ JTA์™€ ๊ฐ™์€ API๋ฅผ ์ผ์ผ์ด ๋‹ค๋ฃจ์ง€ ์•Š์•„๋„, ์Šคํ”„๋ง์˜ ์„ค์ •๋งŒ์œผ๋กœ ์ผ๊ด€๋œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


7๏ธโƒฃ ์˜์†์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ API ์ง€์›

์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๋™์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ORM (Object-Relational Mapping) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์˜์†์„ฑ API ์ง€์›์˜ ํŠน์ง•

  • JDBC์™€ ๊ฐ™์€ ์ „ํ†ต์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๋ฐฉ์‹๋ฟ ์•„๋‹ˆ๋ผ,
    • myBatis, Hibernate, JPA ๋“ฑ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์—ฐ๋™์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์ง€์›์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜ˆ์‹œ: Hibernate๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์Šคํ”„๋ง์˜ ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


8๏ธโƒฃ ๋‹ค์–‘ํ•œ API์— ๋Œ€ํ•œ ์—ฐ๋™ ์ง€์›

์Šคํ”„๋ง์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ API์™€์˜ ์†์‰ฌ์šด ์—ฐ๋™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๋™ ์ง€์› API ์˜ˆ์‹œ

  • JMS (Java Message Service): ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์„ ์ง€์›ํ•ด ์‹œ์Šคํ…œ ๊ฐ„์˜ ํ†ต์‹ ์„ ์›ํ™œํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ฉ”์ผ API: ์ด๋ฉ”์ผ ์ „์†ก ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šค์ผ€์ค„๋ง ๊ธฐ๋Šฅ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํŠน์ • ์ž‘์—…์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์„ค์ • ๋ฐฉ๋ฒ•: ์ด๋Ÿฌํ•œ API๋“ค์€ ์„ค์ • ํŒŒ์ผ(XML)์ด๋‚˜ ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์˜ ์„ค์ •์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋ณต์žกํ•œ ์„ค์ • ์—†์ด ํ•„์š”ํ•œ API๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ›  Spring Framework Runtime ๊ตฌ์กฐ


1๏ธโƒฃ Data Access / Integration (๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐ ํ†ตํ•ฉ) ๐Ÿ—„๏ธ

Spring์€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ๊ณผ ์‹œ์Šคํ…œ ํ†ตํ•ฉ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • JDBC: SQL์„ ํ†ตํ•ด ์ „ํ†ต์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐ
  • ORM: JPA, Hibernate, MyBatis์™€ ๊ฐ™์€ ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๋™ํ•ด ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ๋งคํ•‘์„ ๋‹จ์ˆœํ™”
  • OXM: ๊ฐ์ฒด์™€ XML ๊ฐ„ ๋ณ€ํ™˜์„ ์ง€์›
  • JMS: ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์„ ํ†ตํ•ด ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹  ์ง€์›
  • Transactions: ์ผ๊ด€๋œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€

๐Ÿ’ก ํ•ต์‹ฌ: ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๊ณผ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


2๏ธโƒฃ Web (์›น ๋ชจ๋“ˆ) ๐ŸŒ

Spring์€ ๋‹ค์–‘ํ•œ ์›น ๊ธฐ์ˆ ์„ ํ†ตํ•ด ๋ชจ๋“  ์œ ํ˜•์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • WebSocket: ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ์ง€์›
  • Servlet: ์ „ํ†ต์ ์ธ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต ์ฒ˜๋ฆฌ
  • Web: RESTful API์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ง€์›
  • Portlet: ํฌํ„ธ ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” ํฌํ‹€๋ฆฟ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง€์›

๐Ÿ’ก ํ•ต์‹ฌ: Spring์˜ ์›น ๋ชจ๋“ˆ๋กœ ๋‹จ์ˆœํ•œ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3๏ธโƒฃ AOP ๋ฐ Instrumentation ๐Ÿ”

  • AOP: ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์— ์ค‘๋ณต ์—†์ด ์ ์šฉ ๊ฐ€๋Šฅ
  • Aspects: AOP๋ฅผ ํ†ตํ•ด ํ•ต์‹ฌ ๋กœ์ง๊ณผ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌ
  • Instrumentation: ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ์ฝ”๋“œ ์ˆ˜์ • ๊ฐ€๋Šฅ
  • Messaging: ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•ด ์œ ์—ฐํ•œ ํ†ต์‹  ํ™˜๊ฒฝ ์ œ๊ณต

๐Ÿ’ก ํ•ต์‹ฌ: AOP์™€ Instrumentation์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“ˆ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.


4๏ธโƒฃ Core Container (ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ) ๐Ÿ› ๏ธ

Spring์˜ ํ•ต์‹ฌ ์ปจํ…Œ์ด๋„ˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด(Bean)์˜ ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • Beans: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด
  • Core: ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ DI(์˜์กด์„ฑ ์ฃผ์ž…) ์ง€์›
  • Context: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ ์„ค์ •๊ณผ Bean ๊ด€๋ฆฌ
  • SpEL: ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” Spring Expression Language

๐Ÿ’ก ํ•ต์‹ฌ: Core Container๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.


5๏ธโƒฃ Test (ํ…Œ์ŠคํŠธ ๋ชจ๋“ˆ) ๐Ÿงช

Spring์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ: ํ…Œ์ŠคํŠธ ๋ชจ๋“ˆ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐ์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•˜๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.


๐Ÿš€ Spring Framework Module ์ด์ •๋ฆฌ: ๋ชจ๋“ˆ๋ณ„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์™„๋ฒฝ ๊ฐ€์ด๋“œ


1๏ธโƒฃ Spring Core ๐Ÿงฑ - ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ

  • Spring Core๋Š” ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, BeanFactory๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ:
  • ์˜์กด์„ฑ ์ฃผ์ž…(DI)์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.

2๏ธโƒฃ Spring Context ๐ŸŒฑ - ์„ค์ •๊ณผ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ

  • Spring Context๋Š” Spring Core์˜ BeanFactory๋ฅผ ํ™•์žฅํ•œ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ์œ ํšจ์„ฑ ๊ฒ€์ฆ, ๊ตญ์ œํ™” ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •๊ณผ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋” ์œ ์—ฐํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.


3๏ธโƒฃ Spring AOP ๐Ÿ” - ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์›

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

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ํ•ต์‹ฌ ๋กœ์ง๊ณผ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.


4๏ธโƒฃ Spring DAO ๐Ÿ—„๏ธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต ๊ด€๋ฆฌ

  • Spring DAO๋Š” JDBC DAO ์ถ”์ƒ ๋ ˆ์ด์–ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฒค๋” ๊ฐ„์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ์˜ค๋ฅ˜ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ์ผ๊ด€๋œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์˜ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


5๏ธโƒฃ Spring ORM ๐Ÿ”„ - ORM ํ†ตํ•ฉ ์ง€์›

  • ์Šคํ”„๋ง์€ JPA, Hibernate, iBatis์™€ ๊ฐ™์€ ORM ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ํ†ตํ•ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ORM์„ ํ†ตํ•ด ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๋งคํ•‘์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์˜ ๋ณต์žก์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.


6๏ธโƒฃ Spring Web ๐ŸŒ - ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ฐ˜

  • Spring Web์€ Web Context ๋ชจ๋“ˆ์„ ํ™•์žฅํ•˜์—ฌ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


7๏ธโƒฃ Spring Web MVC ๐Ÿ› ๏ธ - MVC ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ

  • Spring Web MVC๋Š” ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(MVC) ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณต์žกํ•œ ์„ค์ • ์—†์ด๋„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ๊ธฐ๋Šฅ: MVC ํŒจํ„ด์„ ํ†ตํ•ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

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