๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
FrameworkStudy/๋ฉ”๋ชจ

FrameworkStudy ๋ฉ”๋ชจ

by ๋‹‰๋„ค์ž„์—†๋Š” ๋‹‰๋„ค์ž„ 2024. 2. 8.
TOP

๋ชฉ์ฐจ

    โ–ถ FrameWork Study

    1. Spring Framework ์ดํ•ดํ•˜๊ธฐ.txt

    ๋”๋ณด๊ธฐ
    โ– โ– โ–  Spring Framework ์ดํ•ดํ•˜๊ธฐ โ– โ– โ– 

    โ—‹ ๊ฐœ์š”

       1. Framework
          ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํ™˜๊ฒฝ(ํ‹€, ์•ฝ์†)

       2. Spring Framework
          ์ „๋‹ฌ๋ฐ›์€ ์„ค์ • ์ •๋ณด์— ์˜ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๊ณ ,
          ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด.


    โ—‹ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)์˜ ๊ฐœ๋…

       ์Šคํ”„๋ง์€ ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š”
       ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ.

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

       - ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋ณธ ํ‹€ → ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ

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

         ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๊ณผ
         ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก
         ์„ค์ • ์ •๋ณด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

         ==> ์„ค์ • ์ •๋ณด์— ์˜ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๊ณ 
             ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ, ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด


       - ๊ณตํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ → IoC/DI, ์„œ๋น„์Šค ์ถ”์ƒํ™”, AOP

         ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ(๊ฐ์ฒด)๊ฐ€
         ์ƒ์„ฑ๋˜๊ณ  ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ํ‹€์„ ์ œ๊ณตํ•ด์ค„ ๋ฟ ์•„๋‹ˆ๋ผ
         ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ธฐ์ค€๋„ ์ œ์‹œํ•œ๋‹ค.
         ์ด๋Ÿฐ ํ‹€์„ ๋ณดํ†ต ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•œ๋‹ค.
         ์Šคํ”„๋ง์€ ์„ธ ๊ฐ€์ง€ ํ•ต์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•œ๋‹ค.

         โ‘  IoC/DI
            ์˜ค๋ธŒ์ ํŠธ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ์˜์กด ๊ด€๊ณ„์— ๋Œ€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค.
            ์Šคํ”„๋ง์€ ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š”
            ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™๊ณผ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š”
            IoC/DI ๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ•ต์‹ฌ ๊ทผ๊ฐ„์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋‹ค.
            ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋™์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š”
            IoC/DI ๋ฐฉ์‹์„ ๋”ฐ๋ผ ์ž‘์„ฑ๋˜์–ด์•ผ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ์ œ๋Œ€๋กœ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.
            ์Šคํ”„๋ง์ด ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ธฐ์ˆ ๊ณผ API, ์‹ฌ์ง€์–ด ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€๋„
            IoC/DI ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑ๋˜์–ด(๋งŒ๋“ค์–ด์ ธ)์žˆ๋‹ค.
            ์Šคํ”„๋ง์„ ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ
            ๊ธฐ๋ณธ์ด ๋˜๋ฉฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ์ˆ ์ด๋‹ค.

            ·IoC → - ๊ฐ์ฒด ๊ด€๋ฆฌ์˜ ์ฃผ์ฒด.
                     - Inversion of Control : ์ œ์–ด์˜ ์—ญ์ „(์—ญ์ œ์–ด)
                     - ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์ง์ ‘ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
                       ์™ธ๋ถ€(์ปจํ…Œ์ดํ„ฐ)์—์„œ ๋งŒ๋“ค์–ด์ง„ ์˜ค๋ธŒ์ ํŠธ(๊ฐ์ฒด)๋ฅผ
                       ์ œ๊ณต๋ฐ›๋Š” ์ž…์žฅ์ด ๋˜๋Š” ๊ฒƒ.
                     - Bean : ์Šคํ”„๋ง์ด ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์ƒ.
                     - Bean Factory : ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด.
                       ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•œ Application Context ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
                     - Application Context : Bean Factory ์˜ ํ™•์žฅ ๋ฒ„์ „.
                     - ์„ค์ • ์ •๋ณด : ์–ด๋–ค ๊ฐ์ฒด๋“ค์ด ๊ด€๋ฆฌ ๋Œ€์ƒ์ธ์ง€ ์„ค์ •ํ•œ ์ •๋ณด.
                       XML, Annotation ๋“ฑ์„ ์ด์šฉํ•œ๋‹ค.
                       ๊ฐ์ฒด ์˜์กด ๊ด€๊ณ„๋„ ํ‘œํ˜„๋˜์–ด ์žˆ๋‹ค.
                     - IoC ์ปจํ…Œ์ด๋„ˆ : ๊ฐ์ฒด๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

            ·DI → - ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•.
                    - ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 
                      ๋ชจ๋‘ has-a ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•ด ์™”๊ธฐ ๋•Œ๋ฌธ์—
                      ์ด๋“ค์€ ๋ชจ๋‘ ์˜์กด๊ด€๊ณ„๊ฐ€ ์น˜๋ฐ€ํ•˜๊ณ  ๋ฐ€์ ‘ํ•œ ์ƒํ™ฉ์ผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
                      ๋•Œ๋ฌธ์—... ์ด๋Ÿฌํ•œ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ ์ƒํƒœ๋Š”
                      ์œ ์—ฐ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ฒŒ ๋œ๋‹ค.
                      ์ด๋Ÿฌํ•œ ๊ฒฐํ•ฉ ์ƒํƒœ๋ฅผ ํ’€์–ด์ฃผ๋Š” ๊ณผ์ •(๋ฐฉ๋ฒ•)์ด ๋ฐ”๋กœ DI ์ด๋‹ค.
                    - Dependency Injection : ์˜์กด์„ฑ ์ฃผ์ž…(์˜์กด๊ด€๊ณ„ ์ฃผ์ž…)
                    - ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… : ์˜์กด ๊ฐ์ฒด๋ฅผ... ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์—...
                      ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ์•ก์…˜(์ƒํƒœ)
                    - ์˜์กด๊ด€๊ณ„ : A ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด์„œ B ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์ƒํƒœ
                    - ์˜์กด๊ฐ์ฒด : A ์ž…์žฅ์—์„œ ์˜์กด ๊ฐ์ฒด๋Š” B (์ฆ‰, ์ฃผ์ž…๋˜๋Š” ๊ฐ์ฒด)

                    โ€ป ์šฐ์„ ... A ๊ฐ์ฒด์— B ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋„˜๊ฒจ์คŒ์œผ๋กœ์จ
                       B ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด...
                       A ๊ฐ์ฒด๋Š” ์—ฌ์ „ํžˆ B ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๊ณ ,
                       B ๊ฐ์ฒด๋Š” A ๊ฐ์ฒด์™€์˜ ๊ฒฐํ•ฉ ์ƒํƒœ๊ฐ€ ๋Š์Šจํ•ด์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
          
                       ์ด ๋•Œ, ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž ๋˜๋Š” setter() ๋ฉ”์†Œ๋“œ๋ฅผ
                       ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

                       DI ๋ฅผ ์œ„ํ•ด ๊ฐ์ฒด๋Š” ์ž‘์€ ๊ฐ์ฒด๋ถ€ํ„ฐ ์ƒ์„ฑํ•ด์„œ
                       ํฐ ๊ฐ์ฒด๋กœ DI ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

                       ์ด ๋•Œ, ์™„์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ(๊ฐ์ฒด)๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ๊นŒ์ง€
                       ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ฃผ์ฒด(๋ˆ„๊ตฐ๊ฐ€๊ฐ€...) ํ•„์š”ํ•œ๋ฐ,
                       ๊ทธ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ์ธ ๊ฒƒ์ด๋‹ค.

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

       โ‘ข AOP(Aspect Oriented Programming)
          ์ด AOP ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ์‚ฐ์žฌํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„
          ๋…๋ฆฝ์ ์ธ ์ƒํƒœ๋กœ ๋ชจ๋“ˆํ™”ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค.
          ์Šคํ”„๋ง์€ AOP ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์„œ๋น„์Šค๋ฅผ 
          ์ ์šฉํ•˜๊ณ ๋„ ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

       - ๊ธฐ์ˆ  API

         ์Šคํ”„๋ง์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ๋‹ค์–‘ํ•œ ์˜์—ญ์— 
         ๋ฐ”๋กœ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๊ธฐ์ˆ  API ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
         UI ์ž‘์„ฑ์€ ๋ฌผ๋ก ์ด๊ณ , ์›น ํ”„๋ฆฌ์  ํ…Œ์ด์…˜ ๊ณ„์ธต, ๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค ๊ณ„์ธต,
         ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ณ„์ธต, ๋„๋ฉ”์ธ ๊ณ„์ธต, ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต ๋“ฑ์—์„œ
         ํ•„์š”ํ•œ ์ฃผ์š” ๊ธฐ์ˆ ์„ ์Šคํ”„๋ง์—์„œ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก
         ์ง€์›ํ•ด์ฃผ๋Š” ์ „๋žต ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
         ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” API ์™€ ์ง€์› ๊ธฐ์ˆ ์€
         ๋ชจ๋‘ ์Šคํ”„๋ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์— ๋”ฐ๋ผ ์ž‘์„ฑ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—
         ์ด๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„
         ์Šคํ”„๋ง ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์ฝ”๋“œ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
         ์Šคํ”„๋ง์˜ ๋ชจ๋“  ๊ธฐ์ˆ ์€ ํ‘œ์ค€ ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”Œ๋žซํผ(JavaEE)์— ๊ธฐ์ˆ ์„ ๋‘๊ณ  ์žˆ๋‹ค.
         ํ‘œ์ค€ ๊ธฐ์ˆ ๊ณผ ๋”๋ถˆ์–ด ์œ ๋ช… ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ์ˆ ๊ณผ ์ฃผ์š” ์ƒ์šฉ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ
         ์ง€์› ๊ธฐ๋Šฅ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ œ๊ณต๋œ๋‹ค.


    โ—‹ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ํŠน์ง•

       1. ๊ฒฝ๋Ÿ‰ ์ปจํ…Œ์ด๋„ˆ
          ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ๋‹ด๊ณ , ์ด๋“ค ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์˜
          ๋ผ์ดํ”„ ์‚ฌ์ดํด์„ ๊ด€๋ฆฌ.

       2. DI(Dependency Injection)
          ์˜์กด์„ฑ(๊ด€๊ณ„) ์ฃผ์ž…(์‚ฝ์ž…)์„ ์ง€์›.
          ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์ •์˜.

       3. AOP(Aspect Oriented Programmind) ์ง€์›.
          ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›.
          ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์— ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ
          ๊ฐ ๋ชจ๋“ˆ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ.

       4. POJO(Plane Old Java Object) ์ง€์›
          ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ง€์›ํ•˜์—ฌ
          ๊ธฐ์กด ์ž‘์„ฑ ์ฝ”๋“œ์˜ ์œ ์ง€์„ฑ์„ ํ–ฅ์ƒ.
          → ๋ณดํ†ต์˜ ์ž๋ฐ”(๋นˆ) ๊ฐ์ฒด.
             - ์ƒ์†(x)
             - ์ธํ„ฐํŽ˜์ด์Šค(x)

       5. ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ
          JDBC ๋‚˜ JTA ๋ฅผ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์„ ํ†ตํ•ด
          ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•˜์—ฌ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ
          ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ.

       6. ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์กฐํ•ฉ
          myBatis(iBatis), Hivernate, Struts, Struts2, JPA, JDO, Quartz ๋“ฑ
          ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฟ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ํ”„๋ ˆ์ž„์›Œํฌ์™€์˜ ์—ฐ๋™์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.


    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework) ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…

       - DI(Dependency Injection, ์˜์กด์„ฑ ์ฃผ์ž…, ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…)
         : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์˜์กด์„ฑ์— ๋Œ€ํ•ด์„œ
           ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ๊ฐœ๋…

       - IoC(Inversion of Control, ์ œ์–ด์˜ ์—ญ์ „)
         : ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€์˜ ์ธ์Šคํ„ด์Šค ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ
           ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ€์‹ ํ•˜๋Š” ๊ฐœ๋….

    2. Spring Framework ํ™˜๊ฒฝ์„ค์ •.txt

    ๋”๋ณด๊ธฐ
    โ– โ– โ–  Spring Framework ํ™˜๊ฒฝ์„ค์ • โ– โ– โ– 

    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework) ๊ตฌ์„ฑ์„ ์œ„ํ•ด
       ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ
       http://www.spring.io ๊ฒฝ๋กœ์— ์ ‘๊ทผํ•˜์—ฌ ํ™•์ธํ•ด๋ณด๋ฉด
       ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค.
       (STS ์—ฐ๋™ (Maven ํ™œ์šฉ)๋งŒ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ...)


    โ—‹ ์ ์šฉ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์›ํ™œํ•œ ๋ฒ„์ „์œผ๋กœ ์‹ค์Šต ํ™˜๊ฒฝ ๊ตฌ์„ฑ(๋น„ STS)

    โ‘  spring-framework-3.0. 2-with-docs.zip
       ๊ธฐ๋ณธ์ ์ธ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ์— ํ•„์š”ํ•œ ํ•„์ˆ˜์ ์ธ jar ํŒŒ์ผ๊ณผ
       ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์„ค๋ช…๋ฌธ์„œ(pdf ๋ฒ„์ „, html ๋ฒ„์ „)๊ฐ€ ํฌํ•จ๋œ ํ•ญ๋ชฉ,
       ์Šคํ”„๋ง ์›๋ž˜์˜ jar ํŒŒ์ผ๋“ค~!!

    โ‘ก spring-framwork-3.0. 2-dependencies.zip
       ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ์— ์˜์กด์„ฑ์„ ๊ฐ€์ง„ jarํŒŒ์ผ๋“ค์ด ํฌํ•จ๋œ ํ•ญ๋ชฉ.
       ์–ด๋–ค ๊ธฐ๋Š์„ ์ˆ˜ํ–‰ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ํ•ญ๋ชฉ.
       ์Šคํ”„๋ง์ด ์ฐธ์กฐํ•˜๋Š” ์˜์กด jar ํŒŒ์ผ๋“ค~!!!

    โ€ป ์ฃผ์˜
    ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋‘ ๊ฐœ์˜ ์••์ถ• ํŒŒ์ผ์€ C:/ ๋˜๋Š” D:/ ๋“œ๋ผ์ด๋ธŒ ๋ฃจํŠธ์—
    ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์••์ถ•์„ ํ’€์–ด๋†“๋Š”๋‹ค.
    ๊ทธ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” jar ํŒŒ์ผ๋“ค์„ ์„ ํƒ์ ์œผ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์—
    ์‰ฌ์šด ๊ฒฝ๋กœ์— ์••์ถ•์„ ํ’€์–ด๋†“๋Š”๋‹ค๋Š” ์˜๋ฏธ๋„ ์žˆ์ง€๋งŒ
    ์••์ถ•์„ ํ•ด์ œํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด๋ฆ„(๊ฒฝ๋กœ ํฌํ•จ)์ด ๊ธธ์–ด์„œ ํŠน์ • ํŒŒ์ผ์— ๋Œ€ํ•ด
    ์ œ๋Œ€๋กœ ์••์ถ•์„ ํ•ด์ œํ•˜์ง€ ๋ชปํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    ๊ฐ„๋‹จํ•œ ๊ฒฝ๋กœ์—์„œ ์••์ถ•์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.


    ----------------------------------------------------------------------------------------------
    โ– โ– โ–  IoC / DI ๊ด€๋ จ ์‹ค์Šต 01 โ– โ– โ– 

    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์—†์ด IoC / DI ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ์„ฑ์  ์ฒ˜๋ฆฌ
    3. ๊ตญ์–ด, ์˜์–ด, ์ˆ˜ํ•™ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ด์ , ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Record.java → ์ธํ„ฐํŽ˜์ด์Šค
    2. RecordView.java → ์ธํ„ฐํŽ˜์ด์Šค
    3. RecordImpl1.java → Recored ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
    4. RecordImpl2.java → Recored ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
    5. RecordViewImpl.java → RecoredView ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
    6. Main.java → ํด๋ž˜์Šค.main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    ----------------------------------------------------------------------------------------------
    โ– โ– โ–  IoC / DI ๊ด€๋ จ ์‹ค์Šต 02 โ– โ– โ– 

    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์ ์šฉ IoC / DI ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ํ™˜๊ฒฝ
       → ์Šคํ”„๋ง ์ž์›์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ

    1. ํ”„๋กœ์ ํŠธ๋ช… ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ
    2. Build Path > Configure Build Path... ๋ฉ”๋‰ด ์„ ํƒ
    3. Libraries ํƒญ ์„ ํƒ > Add External JARs... ๋ฒ„ํŠผ ํด๋ฆญ
    4. ํ•„์š”ํ•œ jar ํŒŒ์ผ์„ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋“ฑ๋ก
        - ๊ฒฝ๋กœ1 : C:\s-f-3.0.2-with-docs\dist
    ·ํŒŒ์ผ1 → org.springframework.asm-3.0.2.RELEASE
    ·ํŒŒ์ผ2 → org.springframework.beans-3.0.2.RELEASE
    ·ํŒŒ์ผ3 → org.springframework.context-3.0.2.RELEASE
    ·ํŒŒ์ผ4 → org.springframework.core-3.0.2.RELEASE
    ·ํŒŒ์ผ5 → org.springframework.expression-3.0.2.RELEASE

        - ๊ฒฝ๋กœ2 : C:\s-f-3.0.2-dependencies\org.apache.commons
    \cohttp://m.springsource.org.apache.commons.logging\1.1.1
            ·ํŒŒ์ผ6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    5. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์„ XML ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ
       ์ƒ์„ฑ ์œ„์น˜๋Š” ํ”„๋กœ์ ํŠธ ํ•˜์œ„์˜ src ๋””๋ ‰ํ„ฐ๋ฆฌ(ํ˜„์žฌ ์‹ค์Šต ํ™˜๊ฒฝ์€ ์ฝ˜์†”์ด๋ฏ€๋กœ...)
       ํ˜„์žฌ ์‹ค์Šต ํ™˜๊ฒฝ์—์„œ์˜ ํŒŒ์ผ ์ด๋ฆ„์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž„์˜๋กœ ๋ถ€์—ฌํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ
       → ใ€ŽapplicationContext.xmlใ€
    6. ์ƒ์„ฑํ•œ applicationContext.xml ํŒŒ์ผ์—
       ์Šคํ”„๋ง์ด ์ฐธ์กฐํ•˜๊ฒŒ ๋  ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด์™€ DI ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉฐ
       ์ด์™€ ๊ฐ™์€ ๋ฌธ์„œ์˜ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์„œ ์ฐธ์กฐ
         - ์ฐธ์กฐ ๊ฒฝ๋กœ → C:\s-f-3.0.2-with-docs\docs\spring-framework-reference\htmlsingle
    · ์ฐธ์กฐ ํŒŒ์ผ → spring-framework-reference.html
    · ์ฐธ์กฐ ์œ„์น˜ → III. Core Technologies
         3.2.1. Configuration metadata
     → ๋งํฌ๋กœ ์ด๋™ํ•˜๋ฉด xml ์ƒ˜ํ”Œ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 
        ์ด ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜์—ฌ applicationContext.xml ์— ๋ฎ์–ด์“ฐ๊ธฐ(์ „์ฒด ์„ ํƒ ํ›„ ๋ถ™์—ฌ๋„ฃ๊ธฐ)


    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ์„ฑ์  ์ฒ˜๋ฆฌ
    3. ๊ตญ์–ด, ์˜์–ด, ์ˆ˜ํ•™ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ์ด์ , ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Record.java → ์ธํ„ฐํŽ˜์ด์Šค
       → SpringPrj01 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ํ™œ์šฉ
    2. RecordView.java → ์ธํ„ฐํŽ˜์ด์Šค
       → SpringPrj01 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ํ™œ์šฉ
    3. RecordImpl1.java → Recored ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
       → SpringPrj01 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ํ™œ์šฉ
    4. RecordImpl2.java → Recored ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
       → SpringPrj01 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ํ™œ์šฉ
    5. RecordViewImpl.java → RecoredView ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
       → SpringPrj01 ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ํ™œ์šฉ
    6. Main.java → ํด๋ž˜์Šค.main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค
       → ์ˆ˜์ • (check~!!!)
    7. applicationContext.xml 
       → ํ”„๋กœ์ ํŠธ > src ํด๋” ํ•˜์œ„์— ์ƒ์„ฑ(ํ˜„์žฌ ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ์ž„์˜๋กœ ์ง€์ • ๊ฐ€๋Šฅ) 


    ----------------------------------------------------------------------------------------------
    โ– โ– โ–  IoC / DI ๊ด€๋ จ ์‹ค์Šต 03 โ– โ– โ– 

    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์—†์ด IoC / DI ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ
    3. ์˜ค๋ผํด ์•”ํ˜ธํ™” / ๋ณตํ˜ธํ™” ์ ์šฉ

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. SpringPrj03_scott.sql → ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ค€๋น„
    2. MemberDTO.java  → DTO ์—ญํ• 
        TBL_MEMBERLIST ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ ์ฐธ์กฐ
    3. OracleDAO.java  → DAO ์—ญํ•  → ์‹ค์Šต ์ง„ํ–‰ ๊ฐ„ ๊ณ„์ • ์„ค์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐ ์ง„ํ–‰
    4. MssqlDAO.java  → DAO ์—ญํ•  → ์‹ค์Šต ์ง„ํ–‰ ๊ฐ„ ๊ณ„์ • ์„ค์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐ ์ง„ํ–‰

    5. MemberList.java  → DAO ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํด๋ž˜์Šค
        ์˜์กด๊ด€๊ณ„ ์„ค์ •.
        ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„.

    6. Main.java             → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    ----------------------------------------------------------------------------------------------
    โ– โ– โ–  IoC / DI ๊ด€๋ จ ์‹ค์Šต 04 โ– โ– โ– 

    โ€ป ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์—†์ด IoC / DI ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ
    3. ์˜ค๋ผํด ์•”ํ˜ธํ™” / ๋ณตํ˜ธํ™” ์ ์šฉ

    โ€ป ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ๋ก
        - ๊ฒฝ๋กœ1  → C:\s-f-3.0.2-with-docs\dist
     ·ํŒŒ์ผ1 → org.springframework.asm-3.0.2.RELEASE.jar
     ·ํŒŒ์ผ2 → org.springframework.beans-3.0.2.RELEASE.jar
        org.springframework.context-3.0.2.RELEASE.jar
        org.springframework.core-3.0.2.RELEASE.jar
        org.springframework.expression-3.0.2.RELEASE.jar
    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
         ํŒŒ์ผ 6 → cohttp://m.springsource.org.apache.commons.logging-1.1.1

    - ๊ฒฝ๋กœ 3 → C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
      ํŒŒ์ผ 7 → ojdbc6.jar
        
        

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. SpringPrj04_scott.sql → ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ค€๋น„
    2. MemberDTO.java  → DTO ์—ญํ• 
        TBL_MEMBERLIST ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ ์ฐธ์กฐ
    3. OracleDAO.java  → DAO ์—ญํ•  → ์‹ค์Šต ์ง„ํ–‰ ๊ฐ„ ๊ณ„์ • ์„ค์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐ ์ง„ํ–‰
    4. MssqlDAO.java  → DAO ์—ญํ•  → ์‹ค์Šต ์ง„ํ–‰ ๊ฐ„ ๊ณ„์ • ์„ค์ •์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐ ์ง„ํ–‰

    5. MemberList.java  → DAO ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํด๋ž˜์Šค
        ์˜์กด๊ด€๊ณ„ ์„ค์ •.
        ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„.

    6. Main.java             → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    โ—‹ ์ด์ „ ์‹ค์Šต(SpringPrj03)๊ณผ ๋น„๊ตํ•˜์—ฌ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ํŒŒ์ผ
    7. applicationContext.xml    → ์Šคํ”„๋ง ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ
    ๊ฐ์ฒด ์ƒ์„ฑ ๊ตฌ๋ฌธ ๋ฐ DI ์„ค์ • ๊ตฌ๋ฌธ ๊ตฌ์„ฑ
    8. IDAO.java      → ์ธํ„ฐํŽ˜์ด์Šค (OracleDAO.java , MssqlDAO.java ๋ฅผ ๋ผ์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”..)







    3. DI (Dipendency Injection).txt

    ๋”๋ณด๊ธฐ
    โ– โ– โ–  DI(Dependency Injection) โ– โ– โ– 

    Denpendency ๋Š” ์˜์กด ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค. 
    Injection ์€ ์ฃผ์ž…์„ ์˜๋ฏธํ•œ๋‹ค.

    ๊ฐ์ฒด A๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ์œ„ํ•ด B ๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด
    A ๊ฐ์ฒด ์ž…์žฅ์—์„œ B ๊ฐ์ฒด๋Š” ์˜์กด ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค. 

    ํด๋ž˜์Šค A๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด๊ณ 

    public class A
    {
    private B b;

    public A()
    {
    b = new B();
    }
    }

    ใ€ŽA a = new A();ใ€ ๋ผ๋Š” ๊ตฌ๋ฌธ์„ ํ†ตํ•ด A ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•˜๋Š” ๊ณผ์ •์ด ์žˆ๋‹ค๋ฉด
    ์˜์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์€ ์—ฌ๊ธฐ์— ์—†๋Š” ์ƒํ™ฉ์ด ๋œ๋‹ค. 
    A ๊ฐ์ฒด ๋‚ด๋ถ€ ์ƒ์„ฑ์ž์— ์˜์กด ๊ฐ์ฒด์ธ B ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด๋Š” ์˜์กด์„ฑ์ด ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 
    ์‚ฌ์šฉ์ž๊ฐ€ B ๊ฐ์ฒด๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ์–ด๋„ A, ํด๋ž˜์Šค ๋‚ด๋ถ€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ ์„œ๋Š”
    ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค.

    ๊ฒŒ์ž„๊ธฐ์— ๋น—๋Œ€์–ด ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ๊ฒŒ์ž„ ์นฉ์ด ๋‚ด์žฅ๋œ ๊ฒŒ์ž„๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋ฅผ.. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค๋ฉด,
    B b = new B();
    A a = new A(B);

    ์˜์กด ๊ฐ์ฒด์ธ B ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ƒ์„ฑ ๊ถŒํ•œ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์–ด์ง€๊ฒŒ ๋œ๋‹ค.
    B ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ•˜๊ณ  A ๊ฐ์ฒด์— ์ด๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๊ฒƒ์•„๋‹ค.

    ํ•„์š”ํ•  ๊ฒฝ์šฐ B ๊ฐ์ฒด ๋Œ€์‹  ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ์ด ๋•Œ , B ๊ฐ์ฒด๋ฅผ ์˜์กด ๊ฐ์ฒด (Dependency) ๋ผ๊ณ  ํ•˜๊ณ 
    A ๊ฐ์ฒด์— ์ „๋‹ฌํ•ด์ฃผ๋Š” ์•ก์…˜์„ ์ฃผ์ž…(Injection) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

    ๊ฒŒ์ž„๊ธฐ๋กœ ๋งํ•˜์ž๋ฉด ๊ฒŒ์ž„ํŒฉ ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒŒ์ž„๊ธฐ ๋ชจ๋ธ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์Šคํ”„๋ง์€ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์ธ XML ํŒŒ์ผ์„ ํ†ตํ•ด์„œ
    ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ 
    ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด ๊ด€๊ณ„ (DI)๋ฅผ ์„ค์ •, ์กฐ์ •, ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

    โ€ป DI ์„ค์ •์€ โ‘  ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ, โ‘ก setter๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
       ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
       ์ผ๋ฐ˜์ ์œผ๋กœ setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ DI ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
       ์Šคํ”„๋ง์—์„œ๋Š” XML ํ™˜๊ฒฝ์„ค์ • ํŒŒ์ผ์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ DI ์„ค์ •์„ ํ•œ๋‹ค.
       cf) Annotation ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

    โ€ป IoC (Inversion of Control)
    DI ํŒจํ„ด์„ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด
    ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ • ๋ฐ ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ผ๋ฐ˜์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.
    ์ž‘์€ ๋ถ€ํ’ˆ ๊ฐ์ฒด์ธ C ๋ฅผ ๋งŒ๋“ค๊ณ 
    ๊ทธ ๋ถ€ํ’ˆ ๊ฐ์ฒด์ธ C ๋ฅผ ์ค‘๊ฐ„ ๋ถ€ํ’ˆ ๊ฐ์ฒด์ธ B์— ์ฃผ์ž…(Injection) ํ•˜๊ณ ,
    ์ค‘๊ฐ„ ๋ถ€ํ’ˆ ๊ฐ์ฒด์ธ B๊ฐ€(C๊ฐ€ ํƒ‘์žฌ๋œ B)๋ฅผ ์ด์šฉํ•ด์„œ
    ์ตœ์ข… ์™„์ œํ’ˆ์ธ A ๊ฐ์ฒด์— ์ฃผ์ž…(Injection) ํ•˜๊ฒŒ ๋˜๋ฉด
    ๊ฐ์ฒด ์กฐ๋ฆฝ์ด ์™„์„ฑ๋˜๋Š” ๊ตฌ์กฐ... ์ด ๊ณผ์ •... ๋˜๋Š” ์ด์— ๋Œ€ํ•œ ๊ด€๋ฆฌ...
    ๋ฅผ ๋ชจ๋‘ ์ข…ํ•ฉํ•˜์—ฌ IoC ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
    ์ด ํ–‰์œ„๋ฅผ ํ•˜๋Š” ์ฃผ์ฒด ์ฆ‰, IoC Container ๋ฅผ ๋Œ€์ƒ์œผ๋กœ IoC ๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•˜๊ณ 
    ์ด ํ–‰์œ„๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์žฅ์†Œ๋ฅผ IoC๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. 

    4. AOP(Aspect Oriented Programming).txt

    ๋”๋ณด๊ธฐ
    โ– โ– โ–  04. AOP(Aspect Oriented Programming) โ– โ– โ– 

    โ€ป ๊ณตํ†ต์˜ ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด ๊ด€๊ณ„์˜ ๋ณต์žก์„ฑ๊ณผ
       ์ฝ”๋“œ ์ค‘๋ณต์„ ํ•ด์†Œํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•.

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

    โ—‹ AOP ๊ด€๋ จ ์ฃผ์š” ์šฉ์–ด

    - ๋ณด์กฐ ์—…๋ฌด(cross-cutting concern)
       ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์กฐ์ ์ธ ์—…๋ฌด.
      ์ฃผ ์—…๋ฌด์™€ ๋ถ„๋ฆฌ ๋ฐ ๊ฒฐํ•ฉ์ด ์‰ฝ๊ฒŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

    - ์ฃผ ์—…๋ฌด (core concern)
       ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„.
         ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ˆ˜ํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜์„ ํ•ด์•ผ ํ•œ๋‹ค.

    -  Advice
       ์–ธ์ œ ์–ด๋–ค ๊ณตํ†ต ๊ด€์‹ฌ ๊ธฐ๋Šฅ (๋ณด์กฐ ์—…๋ฌด, cross-cutting concern)์„ ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•.
        Before Advice, After Advice, Around Advice ๋“ฑ์ด ์žˆ๋‹ค.
        ·Before Advice
           ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „์— ์ˆ˜ํ–‰๋˜๋Š” ์—…๋ฌด
        ·After Advice
      ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ
        ·Around Advice
      ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „๊ณผ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ

    - proxy
    ์ฃผ ์—…๋ฌด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๋ชจ์–‘์„ ๊ฐ€์ง„ ๊ฐ€์งœ ๊ฐ์ฒด
    ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฃผ ์—…๋ฌด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
    proxy ๋ฅผ ์ฐพ์•„๊ฐ€๋„๋ก ์ง€์ •ํ•˜๊ฒŒ ๋œ๋‹ค.
    proxy ๋‚ด๋ถ€์—์„œ ๋ณด์กฐ ์—…๋ฌด๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ์ฃผ ์—…๋ฌด๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋ฉด
    ์™ธ๋ถ€์—์„œ ๋ณผ ๋•Œ ์ฃผ ์—…๋ฌด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

    - joinpoint
    proxy ๋‚ด๋ถ€์—์„œ ์ฃผ ์—…๋ฌด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ์— ํŠน์ • ์ง€์ ์—๋งŒ ํ˜ธ์ถœ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

    - weaving
      advice ๋ฅผ ์ฃผ ์—…๋ฌด์— ์ ์šฉํ•˜๋Š” ๊ณผ์ •์„ ๋ถ€๋ฅด๋Š” ๋ช…์นญ

    - aspect
    ์—ฌ๋Ÿฌ ์ฃผ ์—…๋ฌด ๊ฐ์ฒด์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ณด์กฐ ์—…๋ฌด)์„
    aspect ๋ผ๊ณ  ํ•œ๋‹ค.

    โ—‹ AOP ์ง„ํ–‰ ์ˆœ์„œ

      ์‚ฌ์šฉ์ž            ํ”„๋ก์‹œ            ๋ณด์กฐ์—…๋ฌด            ์ฃผ์—…๋ฌด
      (client)     (proxy)       (cross-cut...)   (core concern)

      โ—‹------------------------------------------------------>โ—‹

      โ—-----โ‘ ------>โ—

      โ—--------โ‘ก------->โ—

      โ—------------------โ‘ข------------------->โ—

      โ—<-----------------โ‘ฃ--------------------โ—

      โ—--------โ‘ค------->โ—

      โ—‹<-------------------------------------------------------โ—‹

     โ—<------โ‘ฅ------โ—

      โ‘  ์‚ฌ์šฉ์ž๋Š” proxy ๊ฐ์ฒด์— ์ ‘๊ทผํ•œ๋‹ค.
             ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” proxy ๊ฐ์ฒด๊ฐ€ ์ฃผ ์—…๋ฌด(core concern) ๊ฐ์ฒด์™€ ๋™์ผํ•˜๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค.

    โ‘ก proxy ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณด์กฐ ์—…๋ฌด(cross-cutting concern) ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
       ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „์— ์ˆ˜ํ–‰๋˜๋Š” ๋ณด์กฐ ์—…๋ฌด๋Š” 
       Before Advice, Around Advice

    โ‘ข proxy ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ์ฃผ ์—…๋ฌด(core concern) ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
       ์ฃผ ์—…๋ฌด๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.

    โ‘ฃ ์ฃผ ์—…๋ฌด๊ฐ€ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    โ‘ค proxy ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ๋ณด์กฐ์—…๋ฌด(cross-cutting concern)๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
       ์ฃผ ์—…๋ฌด ์‹คํ–‰ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๋ณด์กฐ์—…๋ฌด๋Š”
       After Advice, Around Advice ๊ฐ€ ์žˆ๋‹ค.

    โ‘ฅ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


    -------------------------------------------------------------------------------------------------

    โ– โ– โ–  AOP ๊ฐœ๋… ์‹ค์Šต 01 โ– โ– โ– 

    โ€ป AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์ด์ „ ํ˜•ํƒœ๋กœ ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๊ธฐ๋ณธ์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ
    3. AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ
       ๋ณด์กฐ์—…๋ฌด(์‹œ๊ฐ„ ์ธก์ •, ๋กœ๊ทธ ๊ธฐ๋ก ์ฒ˜๋ฆฌ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
    4. SpringPrj05
    5. ๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ด€๋ จ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

    โ—‹ ๋“ฑ๋กํ•ด์•ผํ•  jar ํŒŒ์ผ
    - ๊ฒฝ๋กœ 1 → C:\s-f-3.0.2-with-docs\dist
        ·ํŒŒ์ผ1 → org.springframework.core-3.0.2.RELEASE
    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
        ·ํŒŒ์ผ1 →  cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Calculator.java  → ์ธํ„ฐํŽ˜์ด์Šค
    2. CalculatorImpl.java → ํด๋ž˜์Šค. ์ฃผ ์—…๋ฌด, ๋ณด์กฐ ์—…๋ฌด ์ ์šฉ
    3. Main.java → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค


    -------------------------------------------------------------------------------------------------

    โ– โ– โ–  AOP ๊ฐœ๋… ์‹ค์Šต 02 โ– โ– โ– 

    โ€ป AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๊ธฐ๋ณธ์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ
    3. AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์ƒํƒœ๋กœ
       ๋ณด์กฐ์—…๋ฌด(์‹œ๊ฐ„ ์ธก์ •, ๋กœ๊ทธ ๊ธฐ๋ก ์ฒ˜๋ฆฌ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
    4. SpringPrj06
    5. ๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ด€๋ จ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

    โ—‹ ๋“ฑ๋กํ•ด์•ผํ•  jar ํŒŒ์ผ
    - ๊ฒฝ๋กœ 1 → C:\s-f-3.0.2-with-docs\dist
        ·ํŒŒ์ผ1 → org.springframework.core-3.0.2.RELEASE
    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
        ·ํŒŒ์ผ1 →  cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Calculator.java   → ์ธํ„ฐํŽ˜์ด์Šค (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    2. CalculatorProxy.java  → ํ”„๋ก์‹œ(proxy) ํด๋ž˜์Šค
       (์ถ”๊ฐ€~!!!)             ๋ณด์กฐ ์—…๋ฌด ์ ์šฉ ๋ฐ ์ฃผ ์—…๋ฌด ํ˜ธ์ถœ ๊ณผ์ •

    3. CalculatorImpl.java  → ํด๋ž˜์Šค. ์ฃผ ์—…๋ฌด ์ ์šฉ
    4. Main.java  → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค


    -------------------------------------------------------------------------------------------------

    โ– โ– โ–  AOP ๊ฐœ๋… ์‹ค์Šต 03 โ– โ– โ– 

    โ€ป Spring AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐœ๋… ์‹ค์Šต

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๊ธฐ๋ณธ์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ
    3. Spring AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ
       ๋ณด์กฐ์—…๋ฌด(์‹œ๊ฐ„ ์ธก์ •, ๋กœ๊ทธ ๊ธฐ๋ก ์ฒ˜๋ฆฌ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
    4. SpringPrj07
    5. ๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ด€๋ จ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

    โ—‹ ๋“ฑ๋กํ•ด์•ผํ•  jar ํŒŒ์ผ
        (๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋“ฑ๋กํ•ด์•ผ ํ•  jar ํŒŒ์ผ
         + ์Šคํ”„๋ง AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ jar ํŒŒ์ผ)
    - ๊ฒฝ๋กœ 1 → C:\s-f-3.0.2-with-docs\dist
        ·ํŒŒ์ผ1 → org.springframework.asm-3.0.2.RELEASE
        ·ํŒŒ์ผ2 → org.springframework.beans-3.0.2.RELEASE
        ·ํŒŒ์ผ3 → org.springframework.context-3.0.2.RELEASE
        ·ํŒŒ์ผ4 → org.springframework.core-3.0.2.RELEASE
        ·ํŒŒ์ผ5 → org.springframework.expression-3.0.2.RELEASE
        ·ํŒŒ์ผ6 → org.springframework.aop-3.0.2.RELEASE

    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
        ·ํŒŒ์ผ7 →  cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    - ๊ฒฝ๋กœ 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
        ·ํŒŒ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Calculator.java    → ์ธํ„ฐํŽ˜์ด์Šค (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    2. CalculatorAspect.java  → ๋ณด์กฐ ์—…๋ฌด ํด๋ž˜์Šค
       (์ถ”๊ฐ€~!!!)              ๋ณด์กฐ ์—…๋ฌด ์ ์šฉ ๋ฐ ์ฃผ ์—…๋ฌด ํ˜ธ์ถœ ๊ณผ์ •.

    3. CalculatorImpl.java   → ํด๋ž˜์Šค. ์ฃผ ์—…๋ฌด ์ ์šฉ (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    4. Main.java   → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    5. config.xml → ์Šคํ”„๋ง ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ.
       (์ถ”๊ฐ€~!!!)  ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ DI ์„ค์ •.


    -------------------------------------------------------------------------------------------------

    โ– โ– โ–  AOP ๊ฐœ๋… ์‹ค์Šต 04 โ– โ– โ– 

    โ€ป AOP Advice

       ·Advice
       ์–ธ์ œ ์–ด๋–ค ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ณด์กฐ ์—…๋ฌด, cross-cutting concern)์„
       ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•.
       Before Advice, After Advice, Around Advice ๋“ฑ์ด ์žˆ๋‹ค.

       ·Before Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ
       ·After  Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ
       ·Around  Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „๊ณผ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๊ธฐ๋ณธ์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ
    3. Spring AOP ๊ธฐ๋ฒ•์„ Advice ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ
       ๋ณด์กฐ์—…๋ฌด(์‹œ๊ฐ„ ์ธก์ •, ๋กœ๊ทธ ๊ธฐ๋ก ์ฒ˜๋ฆฌ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
    4. SpringPrj08
    5. ๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ด€๋ จ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    6. ์ถ”๊ฐ€๋กœ Spring AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

    โ—‹ ๋“ฑ๋กํ•ด์•ผํ•  jar ํŒŒ์ผ
        (๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋“ฑ๋กํ•ด์•ผ ํ•  jar ํŒŒ์ผ
         + ์Šคํ”„๋ง AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ jar ํŒŒ์ผ)
    - ๊ฒฝ๋กœ 1 → C:\s-f-3.0.2-with-docs\dist
        ·ํŒŒ์ผ1 → org.springframework.aop-3.0.2.RELEASE
        ·ํŒŒ์ผ2 → org.springframework.asm-3.0.2.RELEASE
        ·ํŒŒ์ผ3 → org.springframework.beans-3.0.2.RELEASE
        ·ํŒŒ์ผ4 → org.springframework.context-3.0.2.RELEASE
        ·ํŒŒ์ผ5 → org.springframework.core-3.0.2.RELEASE
        ·ํŒŒ์ผ6 → org.springframework.expression-3.0.2.RELEASE
       
    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
        ·ํŒŒ์ผ7 →  cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    - ๊ฒฝ๋กœ 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
        ·ํŒŒ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Calculator.java    → ์ธํ„ฐํŽ˜์ด์Šค (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    2. CalculatorAspect.java  → ๋ณด์กฐ ์—…๋ฌด ํด๋ž˜์Šค
                           ๋ณด์กฐ ์—…๋ฌด ์ ์šฉ ๋ฐ ์ฃผ ์—…๋ฌด ํ˜ธ์ถœ ๊ณผ์ •.

    3. CalculatorImpl.java   → ํด๋ž˜์Šค. ์ฃผ ์—…๋ฌด ์ ์šฉ (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    4. Main.java   → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    5. config.xml    → ์Šคํ”„๋ง ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ.
                 ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ DI ์„ค์ •.

    6. CalculatorBeforeAdvice.java → ์ถ”๊ฐ€. BeforeAdvice


    -------------------------------------------------------------------------------------------------

    โ– โ– โ–  AOP ๊ฐœ๋… ์‹ค์Šต 05 โ– โ– โ– 

    โ€ป AOP Advice

       ·Advice
       ์–ธ์ œ ์–ด๋–ค ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(๋ณด์กฐ ์—…๋ฌด, cross-cutting concern)์„
       ์ ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•.
       Before Advice, After Advice, Around Advice ๋“ฑ์ด ์žˆ๋‹ค.

       ·Before Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ
       ·After  Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ
       ·Around  Advice
         ๋ณด์กฐ ์—…๋ฌด๊ฐ€ ์ฃผ ์—…๋ฌด ์‹คํ–‰ ์ „๊ณผ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ

    โ—‹ ์‹ค์Šต ์„ฑ๊ฒฉ ๋ฐ ์ฃผ์š”์‚ฌํ•ญ
    1. ์ฝ˜์†” ํ”„๋กœ์ ํŠธ
    2. ๊ธฐ๋ณธ์ ์ธ ์‚ฐ์ˆ  ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ
    3. Spring AOP ๊ธฐ๋ฒ•์„ Advice ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ
       ๋ณด์กฐ์—…๋ฌด(์‹œ๊ฐ„ ์ธก์ •, ๋กœ๊ทธ ๊ธฐ๋ก ์ฒ˜๋ฆฌ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹ค์Šต์„ ์ง„ํ–‰ํ•œ๋‹ค.
    4. SpringPrj09
    5. ๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ด€๋ จ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    6. ์ถ”๊ฐ€๋กœ Spring AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ jar ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜์—ฌ
       ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. 

    โ—‹ ๋“ฑ๋กํ•ด์•ผํ•  jar ํŒŒ์ผ
        (๋กœ๊ทธ ๋ฐ ์Šคํ†ฑ์›Œ์น˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด ๋“ฑ๋กํ•ด์•ผ ํ•  jar ํŒŒ์ผ
         + ์Šคํ”„๋ง AOP ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ jar ํŒŒ์ผ)
    - ๊ฒฝ๋กœ 1 → C:\s-f-3.0.2-with-docs\dist
        ·ํŒŒ์ผ1 → org.springframework.aop-3.0.2.RELEASE
        ·ํŒŒ์ผ2 → org.springframework.asm-3.0.2.RELEASE
        ·ํŒŒ์ผ3 → org.springframework.beans-3.0.2.RELEASE
        ·ํŒŒ์ผ4 → org.springframework.context-3.0.2.RELEASE
        ·ํŒŒ์ผ5 → org.springframework.core-3.0.2.RELEASE
        ·ํŒŒ์ผ6 → org.springframework.expression-3.0.2.RELEASE
       
    - ๊ฒฝ๋กœ 2 → C:\s-f-3.0.2-dependencies\org.apache.commons\cohttp://m.springsource.org.apache.commons.logging\1.1.1
        ·ํŒŒ์ผ7 →  cohttp://m.springsource.org.apache.commons.logging-1.1.1.jar

    - ๊ฒฝ๋กœ 3 → C:\s-f-3.0.2-dependencies\org.aopalliance\cohttp://m.springsource.org.aopalliance\1.0.0
        ·ํŒŒ์ผ8 → cohttp://m.springsource.org.aopalliance-1.0.0.jar

    โ—‹ ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ตฌ์„ฑ
    1. Calculator.java    → ์ธํ„ฐํŽ˜์ด์Šค (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    2. CalculatorAspect.java  → ๋ณด์กฐ ์—…๋ฌด ํด๋ž˜์Šค
                           ๋ณด์กฐ ์—…๋ฌด ์ ์šฉ ๋ฐ ์ฃผ ์—…๋ฌด ํ˜ธ์ถœ ๊ณผ์ •.

    3. CalculatorImpl.java   → ํด๋ž˜์Šค. ์ฃผ ์—…๋ฌด ์ ์šฉ (๊ธฐ์กด ์†Œ์Šค์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ)

    4. Main.java   → ํด๋ž˜์Šค. main() ๋ฉ”์†Œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค

    5. config.xml    → ์Šคํ”„๋ง ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ.
                 ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ DI ์„ค์ •.

    6. CalculatorBeforeAdvice.java → ์ถ”๊ฐ€. BeforeAdvice

    7. CalculatorAfterThrowing.java  → ์ถ”๊ฐ€. After Throwing Advice