Skip to content

Latest commit

ย 

History

History
122 lines (70 loc) ยท 4.72 KB

File metadata and controls

122 lines (70 loc) ยท 4.72 KB

Spring Framework

์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ์จ MVC๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜์—ฌ ์›น์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ์ „๋‹ดํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ ์—…๋ฌด์— ์ง‘์ค‘ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„๋œ ํ”„๋ ˆ์ž„์›Œํฌ


์žฅ์ 

  • ๋‹จ์ˆœํ™” ๋œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
  • ๋ณต์žกํ•œ ์ฝ”๋“œ์˜ ๊ฐ์†Œ
  • ์•„ํ‚คํ…์ฒ˜์˜ ์œ ์—ฐ์„ฑ

ํŠน์ง•

  1. ํฌ๊ธฐ์™€ ๋ถ€ํ•˜ ์ธก๋ฉด์—์„œ ๊ฒฝ๋Ÿ‰ํ™” ( ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ )

  2. ์ œ์–ด ์—ญํ–‰ (IoC, Inversion of Control)

    • ๊ฒฐํ•ฉ๋„๋ฅผ ๋А์Šจํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ
    • control์˜ ์ œ์–ด๊ถŒ์ด ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ์— ์žˆ๋‹ค.
  3. ์˜์กด์„ฑ ์ฃผ์ž… (DI, Dependency Injection)

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

    • ๋ฐฉ๋ฒ•

      • ํ•„๋“œ ์ฃผ์ž… : ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋Š” ํด๋ž˜์Šค์— ์„ ์–ธ ํ›„ @Autowiredํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ์ž๋™์œผ๋กœ ์ฃผ์ž…์ด๋œ๋‹ค.

        • ๋ฌธ์ œ์  :

          1. ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™ ์œ„๋ฐ˜
          2. ๋ถˆ๋ณ€์„ฑ : final์„ ์„ ์–ธํ•  ์ˆ˜์—†์–ด ๊ฐ์ฒด๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • setter ์ฃผ์ž… : setter๊ธฐ๋Šฅ์˜ ๋ฉ”์„œ๋“œ์— @Autowired๋ฅผ ๋ถ™์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹

        • ๋ฌธ์ œ์  :
          1. ๋ถˆ๋ณ€์„ฑ : ์ด ๋ฐฉ๋ฒ•๋˜ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
      • ์ƒ์„ฑ์ž ์ฃผ์ž… : ์กฐ๋ฆฝ ์‹œ์ ‘์— ์ฃผ์ž…

        ์˜์กด์„ฑ ์ฃผ์ž…์‹œ ์ƒ์„ฑ์ž๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹

        spring4.3์ดํ›„๋ถ€ํ„ฐ๋Š” @Autowired์ƒ๋žต ๊ฐ€๋Šฅ

        final์„ ๋ถ™์—ฌ ๋ถˆ๋ณ€์„ฑ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๊ฐ€๋Šฅํ•˜๋‹ค.

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

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

      ex) ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ณ ์‹ถ์–ด! ํ• ๋•Œ, ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์— ์ฝ”๋“œ๋ฅผ ์ง‘์–ด๋„ฃ๊ธฐ์—” ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๊ณ  ๊ณตํ†ต ๋กœ์ง์„ ๊ตฌํ˜„์ด ํž˜๋“ค๋•Œ ์‚ฌ์šฉ @Around("execution(* ํŒจํ‚ค์ง€ ๋ช…..*(..))")๊ณผ ๊ฐ™์ด ๊ด€์‹ฌ ํŒŒ์ผ๋“ค ์ ์šฉ SpringConfig์— @Bean์œผ๋กœ AOPํŒŒ์ผ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

      controller๊ฐ€ ํ•ด๋‹น service๋ฅผ ์‹คํ–‰์‹œ ํ”„๋ก์‹œ(๊ฐ€์งœ ์Šคํ”„๋ง๋นˆ)์„ ๋งŒ๋“ค์–ด AOP๋ฅผ ์‹คํ–‰ํ›„ joinPoint.proceed()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹ค์ œ service๋ฅผ ํ˜ธ์ถœ. controller๋Š” proxy์™€ ์ž‘์šฉํ•˜๋Š” ์…ˆ

  5. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์„ค์ •์„ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ ์—์„œ ์ผ์ข…์˜ ์ปจํ…Œ์ด๋„ˆ

  6. PSA(Portable Service Abstraction)

    • ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•จ์— ์žˆ์–ด์„œ ๋ณ„๋„์˜ ์ถ”์ƒํ™” ๋ ˆ์ด์–ด๋ฅผ ์ œ๊ณต

๋ชจ๋“ˆ

modules

  • Core Container : ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๋ชจ๋“ˆ

    • Beans : ์Šคํ”„๋ง Ioc์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ์„ ์ด๋ฃจ๋Š” ๊ฐ์ฒด๋“ค. ์˜์กด์„ฑ ์ฃผ์ž… ์žฌ๊ณต
    • Core : ์Šคํ”„๋ง ๋ชจ๋“ˆ์ด ์‚ฌ์šฉํ•˜๋Š” ์œ ํ‹ธ
    • Context : ๋นˆ ํŒฉํ† ๋ฆฌ๋ฅผ ์ƒ์†ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ˜ํ…์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค ๋กœ๋“œ ๋ฐ ๊ตญ์ œํ™” ์ง€์›
    • SpEL : EL(JSPํ‘œํ˜„ ์–ธ์–ด)๋ฅผ ํ™•์žฅํ•˜๊ณ  ๋นˆ ์†์„ฑ ์ ‘๊ทผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์–ธ์–ด ์ œ๊ณต
  • AOP / Instrumentation : AOP ๋ฐ class Instrumentation์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ

  • Messaging : ์Šคํ”„๋ง MVC ์–ด๋…ธํ…Œ์ด์…˜์ฒ˜๋Ÿผ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฉ”์†Œ๋“œ์— ๋งตํ•‘์‹œํ‚ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜์˜ ์„ธํŠธ

  • Data Access / Integration : DB ๋ฐ ๋ฉ”์‹œ์ง• ๊ณต๊ธ‰์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๋ชจ๋“ˆ

    • JDBC : ์—ฌ๋Ÿฌ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”์ƒํ™”
    • ORM : ORM, JPA, HIBERNATE๋“ฑ ์ œ๊ณต
    • OXM : XML๋งคํ•‘ ํ†ตํ•ฉ ๊ฐ์ฒด ์ œ๊ณต
    • Transactions : POJO ๋ฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์„ ์–ธ์  ํŠธ๋žœ๊ฐœ์…˜ ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณต
      (POJO๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๊ฐ์ฒด๋กœ์„œ, ์ด๋˜ํ•œ ์Šคํ”„๋ง์ด ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ๋ฅผ ์œ„์ž„ํ•ด์„œ ์ˆ˜ํ–‰)
  • Web : ์›น ๋ฐ‘ ํฌํ‹€๋ฆฟ ์•ฑ ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๋ชจ๋“ˆ

  • Test : ๋‹จ์œ„ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ๋ชจ๋“ˆ


๋ชจ๋“ˆ๊ฐ„ ์˜์กด์„ฑ

๋ชจ๋“ˆ๊ฐ„ ์˜์กด์„ฑ



๋„๋ฉ”์ธ : ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋Œ€์ƒ ์˜์—ญ. ๊ฐœ๋ฐœ๋Œ€์ƒ๊ณผ ๋ฒ”์œ„




Reference

์œ„ํ‚ค ๋ฐฑ๊ณผ - https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC

crosscutting concerns - https://winmargo.tistory.com/89

ํŠน์ง• ์„ค๋ช… - https://opentutorials.org/course/2428/13594

spring mvc ๋™์ž‘ ์ˆœ์„œ - https://devpad.tistory.com/24

DispatcherServlet ๋™์ž‘์›๋ฆฌ - https://galid1.tistory.com/526