Spring FrameWork - hyunwoo-e/Spring GitHub Wiki

ํ”„๋ ˆ์ž„์›Œํฌ๋ž€

๋ผˆ๋Œ€๊ฐ€ ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด ๋†“๊ณ , ๊ทธ ๋ผˆ๋Œ€๋ฅผ ํ† ๋Œ€๋กœ ๊ตฌ์ฒด์ ์ธ ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด

๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜

  1. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต
  • ์‚ฌ์šฉ์ž๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•ด ๋ณด์ด๋Š” ๊ณ„์ธต
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ํฌ๋ฉงํŒ…์„ ๋‹ด๋‹น
  1. ์ œ์–ด ๊ณ„์ธต
  • ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„ ์ฒ˜๋ฆฌ ํ๋ฆ„ ์ œ์–ด
  • ์š”์ฒญ์„ ๊ฒ€์ฆํ•˜๊ณ , ๋กœ์ง์— ์š”์ฒญ์„ ์ „๋‹ฌ
  • ๋กœ์ง์˜ ์‘๋‹ต์„ ๋Œ€์‘๋˜๋Š” ๋ทฐ์™€ ์—ฐ๊ฒฐ
  1. ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต
  • ์ œ์–ด ๊ณ„์ธต๊ณผ ํผ์‹œ์Šคํ„ด์Šค ๊ณ„์ธต ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐ
  1. ํผ์‹œ์Šคํ„ด์Šค ๊ณ„์ธต
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜์—ฌ CRUD
  1. ๋„๋ฉ”์ธ ๊ณ„์ธต
  • ๋ฐ์ดํ„ฐ ๊ฐ์ฒด

๊ฐ์ฒด ๋ถ„๋ฆฌ

๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

  • ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์€ ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ  ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋†’์€์‘์ง‘๋„(ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘)์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ ํŠธ๋žœ์žญ์…˜์ด๋‚˜ ๋กœ๊น…, ๋ณด์•ˆ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
  1. DAO(Data Access Object)
  • DB๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ CRUDํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ „๋‹ดํ•˜๋Š” ๊ฐ์ฒด
  • DAO๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•จ์œผ๋กœ์จ, ๋‹ค์ˆ˜์˜ ์›๊ฒฉํ˜ธ์ถœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ DTO๋‚˜, VO๋ฅผ ํ†ตํ•ด ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  1. POJO(Plain Old Java Object)
  • ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด
  • ๊ทธ ์†์„ฑ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ getter์™€ setter๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค
  • DTO(Data Transfer Obejct) vs VO(Value Object)
    • VO - ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์˜ค๋ธŒ์ ํŠธ๋กœ ์ทจ๊ธ‰
    • DTO - ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ๋ผ๋ฉด ๊ฐ’์ด ๊ฐ™๋”๋ผ๋„ ๋‹ค๋ฅด๊ฒŒ ์ทจ๊ธ‰
  1. BO
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹น
  • ๋น„์ฆˆ๋‹ˆ์Šค ์ˆ˜ํ–‰์„ ์œ„ํ•ด DAO ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ

Container

์ปจํ…Œ์ด๋„ˆ๋Š” ์ธ์Šคํ„ด์Šค ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์œ„์ž„๋ฐ›์€ ๋…๋ฆฝ์ ์ธ ์กด์žฌ

  • ์‚ฌ์šฉ์ž์˜ ํ˜ธ์ถœ์— ์˜ํ•ด ์Šค์Šค๋กœ ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์„ ์ปจํŠธ๋กค
    • BeanFactory: bean์˜ ์ •์˜๋Š” ์ฆ‰์‹œ ๋กœ๋”ฉ, bean ์ž์ฒด๊ฐ€ ํ•„์š”ํ•˜๊ฒŒ ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค.(lazy loading)
    • ApplicationContext: ์ปจํ…์ŠคํŠธ ์ดˆ๊ธฐํ™” ์‹œ์ ์—์„œ ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค bean์„ ๋กœ๋“œ

IoC (Inversion of Control, ์ œ์–ด์˜ ์—ญํ–‰)

๊ฐ์ฒด์˜ ์ƒ์„ฑ์—์„œ๋ถ€ํ„ฐ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ๊ด€๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ œ์–ด๊ถŒ์„ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐ€์ง (IoC ์ปจํ…Œ์ด๋„ˆ)

DI (Dependency injection, ์˜์กด์„ฑ ์ฃผ์ž…)

DI์˜ ์‚ฌ์šฉ๋ชฉ์ : ๋ถ„๋ฆฌํ˜•์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๊ฒƒ.

  • Constructor Injection: A์˜ ์ƒ์„ฑ์ž์—์„œ B๋ฅผ ์ƒ์„ฑ
  • Setter Injection: A๊ฐ€ B๊ฐ€ ๋งŒ๋“  C๋ฅผ ์‚ฌ์šฉ

Bean

  • Javabean: ๋””ํดํŠธ ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๋Š” POJO
  • Spring์˜ bean: ์Šคํ”„๋ง์ด ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก, ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ทธ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด

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

  • ๋ถ€๊ฐ€์ ์ธ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด์— ๊ฐ•ํ•œ ์‘์ง‘๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์„œ๋น„์Šค ์ถ”์ƒํ™”๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ OOP(Obejct Oriented Programming)์˜ ๋ณด์™„์  ๊ฐœ๋…
  • ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์—์„œ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑ(Cross Cutting, ํฌ๋กœ์Šค ์ปทํŒ…)ํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ๋„ํ‚นํ•˜์—ฌ ์‚ฌ์šฉ
    • AOP Advice: ๋ฉ”์ธ ์—…๋ฌด์— ๋ณด์กฐ์ ์œผ๋กœ ์ถ”๊ฐ€๋  ๋ณด์กฐ ์—…๋ฌด๋ฅผ JAVA๋ ˆ๋ฒจ์ด ์•„๋‹Œ XML์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ธ์ ์…˜

์ฐธ๊ณ 

http://limmmee.tistory.com/ http://ooz.co.kr/