'μ€νλ§ νλ μμν¬Spring Framework'.
μλ° μν°νλΌμ΄μ¦ κ°λ°μ νΈνκ² ν΄μ£Όλ μ€νμμ€ κ²½λκΈ μ ν리μΌμ΄μ νλ μμν¬
-
μ ν리μΌμ΄μ νλ μμν¬
μ ν리μΌμ΄μ νλ μμν¬λ νΉμ κ³μΈ΅μ΄λ, κΈ°μ , μ 무 λΆμΌμ κ΅νλμ§ μκ³ μ ν리μΌμ΄μ μ μ μμμ ν¬κ΄νλ λ²μ©μ μΈ νλ μμν¬λ₯Ό λ§νλ€. μ ν리μΌμ΄μ νλ μμν¬λ μ ν리μΌμ΄μ κ°λ°μ μ κ³Όμ μ λΉ λ₯΄κ³ νΈλ¦¬νλ©° ν¨μ¨μ μΌλ‘ μ§ννλλ° μΌμ°¨μ μΈ λͺ©νλ₯Ό λλ νλ μμν¬λ€.
-
κ²½λκΈ
λΆνμνκ² λ¬΄κ²μ§ μλ€.
-
μλ° μν°νλΌμ΄μ¦ κ°λ°μ νΈνκ²
μν°νλΌμ΄μ¦ κ°λ°μ κ·Όλ³Έμ μΈ λ¬Έμ μ μ λμ ν΄μ ν΄κ²°μ± μ μ μνλ€λ κ²μ΄ κΈ°μ‘΄ κΈ°μ μ μ κ·Όλ°©λ²κ³Ό μ€νλ§μ μ κ·Ό λ°©λ²μ μ°¨μ΄λ€.
-
μ€νμμ€
μ€νλ§μ μ€νμμ€ νλ‘μ νΈ('https://github.com/spring-projects/spring-framework') λ°©μμΌλ‘ κ°λ°μ€μ΄λ€.
κ°λ¨νλ€λ©΄ κ°λ¨νμ§λ§ 볡μ‘νλ€λ©΄ νμμ΄ λ³΅μ‘ν μ΄ λ μμ μ΄λ»κ² μ€λͺ νλ κ²μ΄ μ’μμ§ κ³ λ―Όμ΄λ€.
μ¬μ μ μλ―Έ: a hypothetical description of a complex entity or process 볡μ‘ν μν°ν° νΉμ νλ‘μΈμ€
μ°λ¦¬κ° λ§νλ 'νλ μμν¬βλ μν°νλΌμ΄μ¦ κ°λ°μ 볡μ‘ν¨μ ν΄μνκΈ° μν΄ μ¬μ©νλ μ ν리μΌμ΄μ μ μ§μ€νλ€. κ°λ°μμκ² νλ μμν¬ λ 맨μμΌλ‘ κ°λ°νμ§ μμ μ μλλ‘ μ 곡λλ 'κ·Έ 무μβμ΄ λ κ²μ΄λ€. λ€μμ κ°λ°μκ° ν¨κ» κ°λ°νλ νκ²½μ΄ λλ©΄μ μννΈμ¨μ΄λ μ μ κ±°λν΄μ‘λ€. μ΄ κ±°λν΄μ§ μννΈμ¨μ΄λ₯Ό ꡬννλ μ½λλ₯Ό μμ±νλ λ°©μμ 'κ°μ κ΅μ‘κ³Όμ μ κ±°μΉ' κ°λ°μλ€μ΄λΌκ³ ν΄λ μ λ§λ€ νμ΄κ°λ λ°©μμ΄ λ€λ₯Ό μ μλ€. κ·Έλ° λ€μν λ°©μ μμμ μΌμ ν ννλ₯Ό κ°μ§ μ μλλ‘ μ λνλ κ²μ΄ νλ μμν¬κ° κ°μ§κ³ μλ 'ν(νΉμ κ°μ λ ₯)'μ΄λΌκ³ ν μ μλ€.
νλ μμν¬λ₯Ό κΈ°λ°μΌλ‘ ν κ°λ°μ μΌμ ν κ°λ°νμμ λκ² λλ€.
μ΄ νμμ μν€ν νΈarchitectμ μν΄μ νΉμ μ μ κ°λ°μμ μν΄μ νμ΄ μ‘νμ‘μμλ μκ³ κ΄λ‘Conventionμ μΌλ‘ μ μλμμ μλ μλ€. μ ν리μΌμ΄μ νλ μμν¬λ μΌκ΄λ κ°λ°μ μ§μνκ³ , νλ μμν¬μ μ μλ κ²½κ³μ λ°λΌ μ€μ μ κ°μ νκ³ μ¬μ¬μ©κ°λ₯νκ³ νμ₯κ°λ₯νκ³ λ¨μν ννλ₯Ό μ μ§νλ©΄μ μ μ§κ΄λ¦¬μ±μ μ΄μ΅μ μ»μ μ μλ€. λ¬Όλ‘ , κ·Έλλ *볡μ‘*νλ€.
μ€νλ§ νλ μμν¬λ 2003λ λ‘λμ‘΄μ¨Road Johnson μ΄λΌλ μ λͺ ν κ°λ°μκ° 2003 λ μ 'Expert One-on-One J2EE Design and DevelopmentβλΌλ μ± μ μΆκ°νλ©΄μ μλ° μν°νλΌμ΄μ¦ κ°λ°μ κ΄ν μμ μ νλΆν κ²½νμ λ°νμΌλ‘ J2EE μ€κ³μ κ°λ°μ λͺ¨λ μμμ λν κ°λ°μ λ΅μ λ€λ£¬ μ± μ΄λ€.
Note
|
νμ νλ μμν¬ κΈ°λ°μΌλ‘ μ κ·ΌνλΌ. |
μ΄ μ± μ ν¬ν¨λ 3λ§ λΌμΈ κ°λμ μν μ ν리μΌμ΄μ μμ μ ν¬ν¨λ νλ μμν¬κ° μ€νλ§ νλ μμν¬μ κΈ°μμ΄λ€. μ΄ μ± μμ μ£Όμ₯νλ μλ° μν°νλΌμ΄μ¦ κ°λ°μ μ΄μμ μΈ νλ‘κ·Έλλ° λͺ¨λΈμ μΆκ΅¬νλλ° νμν κΈ°λ°μ΄ λΌμ£Όλ μ½λ, μ¦ νλ μμν¬κ° μ§κΈ μ€νλ§μ μμ λ²μ μ΄λΌκ³ 보면 λλ€.
μ€νλ§μ ν΅μ¬μ΄ POJO νλ‘κ·Έλλ°μ΄λλ μ¬μ€μ, μ€νλ§μ ν΅μ¬μ κ°μ₯ μ λνλ΄κ³ μλ €μ§ μ€νλ§ μΌκ°νμ ν΅ν΄μλ μ μ μλ€. μ΄ κ·Έλ¦Όμ μ€νλ§μμ€μ CTOμΈ μλ리μ μ½λ¦¬μ΄κ° μ€νΌλ§μ ν΅μ¬κ°λ μ μ€λͺ νκΈ° μν΄μ λ§λ€μλ€.
μ€νλ§ μ ν리μΌμ΄μ μ POJOλ₯Ό μ΄μ©ν΄μ λ§λ μ ν리μΌμ΄μ μ½λμ, POJOκ° μ΄λ»κ² κ΄κ³λ₯Ό λ§Ίκ³ λμνλμ§λ₯Ό μ μν΄λμ μ€κ³μ λ³΄λ‘ κ΅¬λΆλλ€. DI(Dependency Injection)μ κΈ°λ³Έ μμ΄λμ΄λ μ μ°νκ² νμ₯κ°λ₯ν μ€λΈμ νΈλ₯Ό λ§λ€μ΄λκ³ κ·Έ κ΄κ³λ μΈλΆμμ λμ μΌλ‘ μ€μ ν΄μ€λ€λ κ²μ΄λ€. μ΄λ° DIμ κ°λ μ μ ν리μΌμ΄μ μ λ°μ κ±Έμ³ μ μ©νλ κ²μ΄ μ€νλ§μ νλ‘κ·Έλλ° λͺ¨λΈμ΄λ€. μ€νλ§μ μ£ΌμκΈ°μ μΈ IoC/DI, AOPμ PSA(Portable Service Abstraction)λ μ ν리μΌμ΄μ μ POJOλ‘ κ°λ°ν μ μκ² ν΄μ£Όλ κ°λ₯κΈ°μ enabling technologyμ΄λΌκ³ λΆλ¦°λ€.
-
POJOμ 쑰건
-
νΉμ κ·μ½μ μ’ μλμ§ μλλ€.
POJOλ μλ° μΈμ΄μ κΌ νμν API μΈμλ μ’ μλμ§ μμμΌ νλ€. EJBμ κ°μ΄ νΉμ κ·μ½μ λ°λΌ λΉμ¦λμ€ μ»΄ν¬λνΈλ₯Ό λ§λ€μ΄μΌ νλ κ²½μ°λ POJOκ° μλλ€. νΉμ ν΄λμ€λ₯Ό μμν΄μ λ§λ€μ΄μΌ νλ κ·μ½μ΄ μλ κ²½μ°λ λ§μ°¬κ°μ§λ€.
-
νΉμ νκ²½μ μ’ μλμ§ μλλ€.
νΉμ νκ²½μ μ’ μμ μ΄μ΄μΌλ§ λμνλ μ€λΈμ νΈλ POJOλΌκ³ ν μ μλ€. POJOλ νκ²½μ λ 립μ μ΄μ΄μΌ νλ€.
-
-
POJOμ μ₯μ
-
νΉμ κΈ°μ κ³Ό νκ²½μ μ’ μλμ§ μμ μ€λΈμ νΈλ κ·Έλ§νΌ κΉλν μ½λκ° λ μ μλ€.
-
POJOλ‘ κ°λ°λ μ½λλ μλνλ ν μ€νΈμ λ§€μ° μ 리νλ€.
-
κ°μ²΄μ§ν₯μ μΈ μ€κ³λ₯Ό μμ λ‘κ² μ μ©ν μ μλ€.
-
-
DI νμ©λ°©λ²
-
ν΅μ¬κΈ°λ₯μ λ³κ²½
DIμ κ°μ₯ λνμ μΈ μ μ©λ°©λ²μ μμ‘΄ λμμ ꡬνμ λ°κΎΈλ κ²μ΄λ€. λμμΈ ν¨ν΄μ μ λ΅ ν¨ν΄μ΄ λνμ μΈ μλ€. A β B ꡬ쑰μμ Aμ κΈ°λ₯ μΌλΆλ₯Ό Bμκ² μμνλ€κ³ νμ λ Bμ ꡬν λ°©μμ νμμ λ°λΌ B1, B2, B3λ‘ λ³κ²½νλ κ²μ΄λ€.
-
ν΅μ¬κΈ°λ₯μ λμ μΈ λ³κ²½
μμ‘΄ μ€λΈμ νΈμ ν΅μ¬κΈ°λ₯ μ체λ₯Ό λ°κΎΈλ κ²μ΄λ€. νμ§λ§ μΌλ°μ μΈ DIλ₯Ό μ΄μ©ν λ³κ²½λ°©λ²κ³Όλ λ¬λ¦¬, λμ μΌλ‘ λ§€λ² λ€λ₯΄κ² λ³κ²½ν μ μλ€. DIλ κΈ°λ³Έμ μΌλ‘λ λ°νμμμ λμ μΌλ‘ μμ‘΄ μ€λΈμ νΈλ₯Ό μ°κ²°ν΄μ£Όλ κ²μ΄κΈ΄ νμ§λ§, μΌλ¨ DIλκ³ λλ©΄ κ·Έ νλ‘λ λ°Nγ £μ§ μλλ€. μ¦, λμ μΈ λ°©μμΌλ‘ μ°κ²°λμ§λ§ νλ² DIλλ©΄ λ°λμ§ μλ μ μ μΈ κ΄κ³λ₯Ό λ§Ίμ΄μ£Όλ κ²μ΄λ€.
-
λΆκ°κΈ°λ₯μ μΆκ°
ν΅μ¬κΈ°λ₯μ κ·Έλλ‘ λ μ±λ‘ λΆκ°κΈ°λ₯μ μΆκ°νλ κ²μ΄λ€. λ°μ½λ μ΄ν° ν¨ν΄μ μκ°ν΄λ³΄λ©΄ λλ€. μΈν°νμ΄μ€λ₯Ό λκ³ μ¬μ©νκ² νκ³ , μ€μ μ¬μ©ν μ€λΈμ νΈλ μΈλΆμμ μ£Όμ νλ DIλ₯Ό μ μ©ν΄λλ©΄ λ°μ½λ μ΄ν° ν¨ν΄μ μ½κ² μ μ©ν μ μλ€.
-
μΈν°νμ΄μ€μ λ³κ²½
ν΄λΌμ΄μΈνΈκ° μ¬μ©νλ μΈν°νμ΄μ€μ μ€μ μ€λΈμ νΈ μ¬μ΄μ μΈν°νμ΄μ€κ° μΌμΉνμ§ μλ κ²½μ°μλ DIκ° μ μ©νλ€.
-
νλ‘μ
νλ‘μ ν¨ν΄μ μ νμ μΈ μμ© λ°©λ²λ μλ€. νμν μμ μμ μ€μ μ¬μ©ν μ€λΈμ νΈλ₯Ό μ΄κΈ°ννκ³ λ¦¬μλ₯΄λ₯Ό μ€λΉνκ² ν΄μ£Όλ μ§μ°λ λ‘λ©lazy loadingμ μ μ©νλ €λ©΄ νλ‘μκ° νμνλ€.
-
ν νλ¦Ώκ³Ό μ½λ°±
ν νλ¦Ώ/μ½λ°± ν¨ν΄μ DIμ νΉλ³ν μ μ©λ°©λ²μ΄λ€. λ°λ³΅μ μΌλ‘ λ±μ₯νμ§λ§ νμ κ³ μ μ μΈ μμ νλ¦κ³Ό κ·Έ μ¬μ΄μμ μμ£Ό λ°λλ λΆλΆμ λΆλ¦¬ν΄μ ν νλ¦Ώκ³Ό μ½λ°±μΌλ‘ λ§λ€κ³ μ΄λ₯Ό DI μ리λ₯Ό μ΄μ©ν΄μ μμ£Ό λ°λλ λΆλΆμ λΆλ¦¬ν΄μ ν νλ¦Ώκ³Ό μ½λ°±μΌλ‘ λ§λ€κ³ μ΄λ₯Ό DI μ리λ₯Ό μμ©ν΄ μ μ©νλ©΄μ μ§μ λΆνκ² λ§€λ² λ§λ€μ΄μΌ νλ μ½λλ₯Ό κ°κ²°νκ² λ§λ€ μ μλ€.
-
μ±κΈν€κ³Ό μ€λΈμ νΈ μ€μ½ν
λ―Έκ° νμν μ€μν μ΄μ μ€ ν κ°μ§λ 01 ν μ€λΈμ νΈμ μλͺ μ£ΌκΈ°λ₯Ό μ μ΄ν μ μλ€λ κ²μ΄λ€ 0 1 λ₯Ό νλ μμν¬λ‘ μ΄μ©νλ€λ 건 01 λμ μ€λΈμ νΈλ₯Ό 컨ν μ΄λκ° κ΄λ¦¬νλ€λ μλ―Έλ€. μ€λΈμ νΈμ μμ±λΆν° κ΄κ³μ€μ . μ΄μ©, μλ©Έ μ μ΄ λ₯΄κΈ°κΉμ§ μ λͺ¨λ κ³Όμ μ DI 컨ν μ΄λκ° μ£Όκ΄ν-κΈ° λλ¬Έμ κ·Έ μ€λΈμ νΈμ μ€μ½νλ₯Ό μμ λ‘κ² μ μ΄ν μ μλ€.
-
ν μ€νΈ
κ·Έλμ μμ‘΄ μ€λΈμ νΈλ₯Ό λμ ν΄μ μ€λ½ λλ λͺ© μ€λΈμ νΈ κ°μ ν μ€νΈ λμμ νμ©ν΄μΌ νλ€. μ΄λλ DIλ μ€μν μν μ νλ€. λ―Έ λ₯Ό μν΄ λ§λ μμ μ λ©μλλ₯Ό μ¬μ©νλ©΄ ν μ€νΈ μ½λ μμμ μλμΌλ‘ λͺ© μ€λΈμ νΈλ₯Ό μ£Όμ ν μ μλ€. λλ ν μ€νΈμ©μΌλ‘ μ€μ μ λ³λλ‘ λ§λλ λ°©λ²λ μλ€ DI μμ΄λ μ΄λ° ν μ€νΈ κΈ°λ²μ μ μ©νκΈ°λ λΆκ°λ₯νλ€. κ°μλ‘ ν μ€νΈμ μ€μμ±μ΄ μ»€μ Έκ°κ³ μμΌλ DI μ νμ© λ°©λ²μμ ν μ€νΈ κ°μ°¨μ§νλ λΉμ€λ μ»€μ§ κ²μ΄λ€.
-
κΈ°λ₯μ ν΅μ¬ λΉμ§λμ€ λ‘μ§κ³Ό κ³΅ν΅ λͺ¨λλ‘ κ΅¬λΆνκ³ , ν΅μ¬ λ‘μ§μ μν₯μ λ―ΈμΉμ§ μκ³ μ¬μ΄μ¬μ΄μ κ³΅ν΅ λͺ¨λμ ν¨κ³Όμ μΌλ‘ μ λΌμλ£λλ‘ νλ κ°λ° λ°©λ²μ΄λ€.
보μ μΈμ¦, λ‘κΉ κ°μ μμλ±)μ λ§λ νμ μ½λ λ°μμ μ΄ λͺ¨λμ λΉμ§λμ€ λ‘μ§μ μ½μ νλ κ²μ΄ λ°λ‘ AOP μ μΈ κ°λ°μ΄ μ½λ λ°μμ μ€μ λλ€λ κ²μ΄ ν΅μ¬μ΄λ€.
-
1) κ°λ¨ν λ©μλ μ±λ₯ κ²μ¬
κ°λ° λμ€ νΉν DBμ λ€λμ λ°μ΄ν°λ₯Ό λ£κ³ λΉΌλ λ±μ λ°°μΉ μμ μ λνμ¬ μκ°μ μΈ‘μ ν΄λ³΄κ³ 쿼리λ₯Ό κ°μ νλ μμ μ λ§€μ° μλ―Έκ° μλ€. μ΄ κ²½μ° λ§€λ² ν΄λΉ λ©μλ μ²μκ³Ό λμ System.currentTimeMills();λ₯Ό μ¬μ©νκ±°λ, μ€νλ§μ΄ μ 곡νλ StopWatchμ½λλ₯Ό μ¬μ©νκΈ°λ λ§€μ° λ²κ±°λ‘λ€. μ΄λ° κ²½μ° ν΄λΉ μμ μ νλ μ½λλ₯Ό λ°μμ μ€μ νκ³ ν΄λΉ λΆλΆμ μ¬μ©νλ νΈμ΄ νΈλ¦¬νλ€.
-
2) νΈλμμ μ²λ¦¬
νΈλμμ μ κ²½μ° λΉμ§λμ€ λ‘μ§μ μ νμ μ€μ λλ€. νμ§λ§ λ§€λ² μ¬μ©νλ νΈλμμ (try~catchλΆλΆ)μ μ½λλ λ²κ±°λ‘κ³ , μμ€λ₯Ό λμ± λ³΅μ‘νκ² λ³΄μ¬μ€λ€.
-
3) μμΈ λ°ν
μ€νλ§μλ DataAccessExceptionμ΄λΌλ λ§€μ° μ μ μλμ΄ μλ μμΈ κ³μΈ΅ κ΅¬μ‘°κ° μλ€. μμ νμ΄λ²λ€μ΄νΈ μμΈλ€μ λͺ κ° μμκ³ κ·Έλλ§λ Uncatched Exceptionμ΄ μλμλ€. μ΄λ κ² κ΅¬μ‘°κ° λ³λ‘ μ μ’μ μμΈλ€μ΄ λ°μνμ λ, κ·Έκ±Έ μ‘μμ μ μ μλμ΄ μλ μμΈ κ³μΈ΅ κ΅¬μ‘°λ‘ λ³νν΄μ λ€μ λμ§λ μ μ€ν©νΈλ μ 3μ νλ μμν¬λ₯Ό μ¬μ©ν λ, λ³ΈμΈμ νλ μμν¬λ μ ν리μΌμ΄μ μμ λ³λμ μμΈ κ³μΈ΅ κ΅¬μ‘°λ‘ λ³ννκ³ μΆμ λ μ μ©νλ€.
-
4) μν€ν μ² κ²μ¦
-
νμ΄λ²λ€ν°μ€μ JDBCλ₯Ό κ°μ΄ μ¬μ©ν κ²½μ°, DB λκΈ°ν λ¬Έμ ν΄κ²°
-
λ©ν°μ°λ λ Safety κ΄λ ¨νμ¬ μμ ν΄μΌ νλ κ²½μ°, λ©μλλ€μ μΌκ΄μ μΌλ‘ λ½μ μ€μ νλ μ μ€ν©νΈ
-
λ°λλ½ λ±μΌλ‘ μΈν PessimisticLockingFailureExceptionλ±μ μμΈλ₯Ό λ§λ¬μ λ μ¬μλνλ μ μ€ν©νΈ
-
λ‘κΉ , μΈμ¦, κΆν λ±
-
-
μ‘°μΈν¬μΈνΈ(joinPoint) - ν‘λ¨ κ΄μ¬ λͺ¨λμ κΈ°λ₯μ΄ μ½μ λμ΄ λμν μ μλ μ€ν κ°λ₯ν νΉμ μμΉ
ex) λ©μλκ° νΈμΆλλ λΆλΆ λλ 리ν΄λλ μμ , νλλ₯Ό μ‘μΈμ€νλ λΆλΆ, μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ μ§μ , μμΈκ° λμ Έμ§λ μμ , μμΈ νΈλ€λ¬κ° λμνλ μμΉ, ν΄λμ€κ° μ΄κΈ°νλλ κ³³ λ±μ΄ λνμ μΈ μ‘°μΈν¬μΈνΈκ° λ μ μλ€. κ°κ°μ μ‘°μΈν¬μΈνΈλ€μ κ·Έ μμ ν‘λ¨ κ΄μ¬μ κΈ°λ₯μ΄ AOPμ μν΄ μλμΌλ‘ μΆκ°λμ΄μ Έμ λμν μ μλ ν보μ§κ° λλ κ²μ΄λ€.
-
ν¬μΈνΈμ»·(pointCut) - μ΄λ€ ν΄λμ€μ μ΄λ μ‘°μΈν¬μΈνΈλ₯Ό μ¬μ©ν κ²μΈμ§λ₯Ό κ²°μ νλ μ ν κΈ°λ₯
AOPκ° νμ λͺ¨λ λͺ¨λμ λͺ¨λ μ‘°μΈν¬μΈνΈλ₯Ό μ¬μ©ν κ²μ΄ μλκΈ° λλ¬Έμ νμμ λ°λΌ μ¬μ©ν΄μΌ ν λͺ¨λμ νΉμ μ‘°μΈν¬μΈνΈλ₯Ό μ§μ ν νμκ° μλ€. μΌμ’ μ μ‘°μΈν¬μΈνΈ μ μ λ£°κ³Ό κ°μ κ°λ μ΄λ€. AOPμμλ ν¬μΈνΈμ»·μ μνν μ μλ λ€μν μ κ·Ό λ°©λ²μ μ 곡νλ€. AspectJμμλ μμΌλμΉ΄λλ₯Ό μ΄μ©ν λ©μλ μκ·Έλμ²λ₯Ό μ¬μ©νλ€.
-
μ΄λλ°μ΄μ€(advise) λλ μΈν°μ ν°(intercepter)
-
μ΄λλ°μ΄μ€ - κ° μ‘°μΈν¬μΈνΈμ μ½μ λμ΄μ Έ λμν μ μλ μ½λ
μ£Όλ‘ λ©μλ λ¨μλ‘ κ΅¬μ±λ μ΄λλ°μ΄μ€λ ν¬μΈνΈμ»·μ μν΄ κ²°μ λ λͺ¨λμ μ‘°μΈν¬μΈνΈμμ νΈμΆλμ΄ μ¬μ©λλ€. μΌλ°μ μΌλ‘ λ 립μ μΈ ν΄λμ€ λ±μΌλ‘ ꡬνλ ν‘λ¨ κ΄μ¬ λͺ¨λμ μ‘°μΈν¬μΈνΈμ μ 보λ₯Ό μ°Έμ‘°ν΄μ μ΄μ©νλ λ°©μμΌλ‘ μμ±λλ€.
-
μΈν°μ ν° - μΈν°μ ν° μ²΄μΈ λ°©μμ AOP ν΄μμ μ¬μ©νλ μ©μ΄λ‘ μ£Όλ‘ ν κ°μ invoke λ©μλλ₯Ό κ°μ§λ μ΄λλ°μ΄μ€
-
μ΄λλ°μ΄μ€(advise)μ μ’ λ₯
-
Before advice : λ©μλ μ μ μ©λλ
-
After returning advice : λ©μλκ° μ μμ μΌλ‘ μ€νλ νμ μ€ν (μμΈλ₯Ό λμ§λ μν©μ μ μμ μΈ μν©μμ μ μΈ)
-
After throwing advice : μμΈλ₯Ό λ°μμν¬ λ μ μ©λλ Adviceλ₯Ό μ μ (catchμ λΉμ·)
-
Around advice : λ©μλ νΈμΆ μ΄μ , μ΄ν, μμΈ λ°μ λ± μμ μ μ© κ°λ₯ν Adviceλ₯Ό μ μ
-
-
-
μλΉ(weaving) λλ ν¬λ‘μ€μ»·ν (crossCutting)
μλΉ - ν¬μΈνΈμ»·μ μν΄μ κ²°μ λ μ‘°μΈν¬μΈνΈμ μ§μ λ μ΄λλ°μ΄μ€λ₯Ό μ½μ νλ κ³Όμ (λ€λ₯Έ λ§λ‘ ν¬λ‘μ€μ»·ν μλΉμ AOPκ° κΈ°μ‘΄μ ν΅μ¬ κ΄μ¬ λͺ¨λμ μ½λμ μ ν μν₯μ μ£Όμ§ μμΌλ©΄μ νμν ν‘λ¨ κ΄μ¬ κΈ°λ₯μ μΆκ°ν μ μκ² ν΄μ£Όλ ν΅μ¬μ μΈ μ²λ¦¬κ³Όμ μ΄λ€. μλΉμ μ²λ¦¬νλ λ°©λ²μ νμ²λ¦¬κΈ°λ₯Ό ν΅ν μ½λμμ± κΈ°μ μ ν΅ν λ°©λ²λΆν° νΉλ³ν μ»΄νμΌλ¬ μ¬μ©νλ κ², μ΄λ―Έ μμ±λ ν΄λμ€μ μ μ μΈ λ°μ΄νΈμ½λμ λ³ν λλ μ€ν μ€ ν΄λμ€λ‘λλ₯Ό ν΅ν μ€μκ° λ°μ΄νΈμ½λ λ³ν κ·Έλ¦¬κ³ λ€μ΄λ΄λ―Ή νλ‘μλ₯Ό ν΅ν λ°©λ²κΉμ§ λ§€μ° λ€μνλ€.
-
μΈνΈλ‘λμ (Introduction) λλ μΈν°νμ μ μΈ
μΈνΈλ‘λμ - μ μ μΈ λ°©μμ AOP κΈ°μ λμ μΈ AOP λ°©μμ μ¬μ©νλ©΄ μ½λμ μ‘°μΈν¬μΈνΈμ μ΄λλ°μ΄μ€λ₯Ό μ μ©ν΄μ ν΅μ¬κ΄μ¬ μ½λμ λμ λ°©μμ λ³κ²½ν μ μλ€. μΈνΈλ‘λμ μ μ΄μ λ°ν΄μ κΈ°μ‘΄μ ν΄λμ€μ μΈν°νμ΄μ€μ νμν λ©μλλ νλλ₯Ό μΆκ°ν΄μ μ¬μ©ν μ μκ² ν΄μ£Όλ λ°©λ² OOPμμ λ§νλ μ€λΈμ νΈμ μμμ΄λ νμ₯κ³Όλ λ€λ₯Έ λ°©μμΌλ‘ μ΄λλ°μ΄μ€ λλ μ μ€ν©νΈλ₯Ό μ΄μ©ν΄μ κΈ°μ‘΄ ν΄λμ€μ μλ μΈν°νμ΄μ€ λ±μ λ€μ΄λ΄λ―Ήνκ² κ΅¬νν΄ μ€ μ μλ€.
-
μ μ€ν©νΈ(aspect) λλ μ΄λλ°μ΄μ μμ€ν©νΈ - ν¬μΈνΈμ»·(μ΄λμμ) + μ΄λλ°μ΄μ€(무μμ ν κ²μΈμ§) + (νμμ λ°λΌ μΈνΈλ‘λμ λ ν¬ν¨) AspectJμ κ°μ μλ° μΈμ΄λ₯Ό νμ₯ν AOPμμλ λ§μΉ μλ°μ ν΄λμ€μ²λΌ μ μ€ν©νΈλ₯Ό μ½λλ‘ μμ±ν μ μλ€. AOP ν΄μ μ’ λ₯μ λ°λΌμ μ΄λλ°μ΄μ€μ ν¬μΈνΈμ»·μ κ°κ° μΌλ° μλ° ν΄λμ€λ‘ μμ±νκ³ μ΄λ₯Ό κ²°ν©ν μ΄λλ°μ΄μ ν΄λμ€λ₯Ό λ§λ€μ΄μ μ¬μ©νλ λ°©λ²λ μλ€.
-
AOP μ μ©κΈ°λ²
-
μ€νλ§κ³Ό κ°μ΄ λ€μ΄λ΄λ° νλ‘μλ₯Ό μ¬μ©νλ λ°©λ²
-
μλ° μΈμ΄μ νκ³λ₯Ό λμ΄μλ μΈμ΄μ νμ₯μ μ΄μ©νλ λ°©λ²
-
-
AOP μ μ©λ¨κ³
-
1λ¨κ³: 미리 μ€λΉλ AOP μ΄μ©
-
2λ¨κ³: μ λ΄νμ ν΅ν AOP μ μ©
-
3λ¨κ³: AOPμ μμ λ‘μ΄ μ΄μ©
-
νκ²½κ³Ό μΈλΆ κΈ°μ μ λ³νμ κ΄κ³μμ΄ μΌκ΄λ λ°©μμΌλ‘ κΈ°μ μ μ κ·Όν μ μκ² ν΄μ€λ€. POJOλ‘ κ°λ°λ μ½λλ νΉμ νκ²½μ΄λ ꡬν λ°©μμ μ’ μμ μ΄μ§ μμμΌ νλ€. νΉμ νκ²½κ³Ό κΈ°μ μ μ’ μμ μ΄μ§ μλ€λ κ² νΉμ κΈ°μ μ μ¬μ©νμ§ μλλ€λ λ»μ μλλ€. λ€λ§ POJO μ½λκ° κ·Έλ° κΈ°μ μ μ§μ λ ΈμΆλμ΄ λ§λ€μ΄μ§μ§ μλλ€λ λ§μ΄λ€. μ΄λ₯Ό μν΄ μ€νλ§μ΄ μ 곡νλ λνμ μΈ κΈ°μ μ΄ λ°λ‘ μΌκ΄μ± μλ μλΉμ€ μΆμν κΈ°μ μ΄λ€.
μ€νλ§ νλ μμν¬('Overview modules')λ μμ κ°μ ννλ‘ μ μ μΈλΆνλκ³ λͺ¨λνλκ³ μλ€. κ·Έλ§νΌ μ΄ν΄λ΄μΌν κ²λ λ§κ³ μ΅νμΌν κ°λ λ λ§λ€. μ€νλ§ νλ μμν¬κ° μ΅μν΄μ§κ² λλ©΄ μ€νλ§ κΈ°λ°μΌλ‘ νμ¬ μ 곡λλ λ€μν λͺ¨λλ€μ μΆκ°νκ³ λͺ¨λμ κΈ°λ₯μ νμ©νλ κ²μ΄ μ΅μν΄μ§κ² λλ€. μ€νλ§ νλ μμν¬ μ¬μ©μ΄ μ΅μν΄μ§λ©΄ νμν λͺ¨λμ μΆκ°νκ³ κ·Έ κΈ°λ₯μ νμ©νλ κ²μ΄ μ¬μμ§λ€. μ€νλ§ νλ μμν¬ κΈ°λ°μ κ°λ°κ²½νμ λ€λ₯Έ λͺ¨λμλ λ°μν μ μκΈ° λλ¬Έμ΄λ€. νμ§λ§ μ΄κ±΄.. μμ§ λ¨Ό μ΄μΌκΈ°.
'Core container'λ spring-core
, spring-beans
, spring-context
, spring-context-support
, κ·Έλ¦¬κ³ spring-expression
(Spring Expression Language) λͺ¨λλ‘ κ΅¬μ±λμ΄ μλ€.
-
spring-core
,spring-beans
λͺ¨λμ 'νλ μμν¬μ κΈ°μ΄μ μΈ λΆλΆλ€'(μ μ΄μμ κ³Ό μμ‘΄μ± μ£Όμ κΈ°λ₯) μ μ 곡νλ€. `BeanFactory`λ ν©ν 리 ν¨ν΄μ μμ€ λμ ꡬν체λ€. νλ‘κ·Έλλ°μ μΈ μꡬμ λ°λΌ μ±κΈν€μ μ κ±°νκ³ μ€μ§μ μΈ νλ‘κ·Έλ¨ λ‘μ§μ λ°λΌ μ€μ κ³Ό μμ‘΄μ± μ μλ₯Ό λΆλ¦¬ν μ μλ€(λμ리μ§?!). -
'Context' (
spring-context
) λ 'Core and Beans'μν΄ μ 곡λλ κΈ°μ΄λ₯Ό μ‘°μ§νλ€. JNDI λ μ§μ€νΈλ¦¬μ μ μ¬ν ννμ νλ μμν¬ νμμΌλ‘ κ°μ²΄μ μ κ·Όνλ€. 컨ν μ€νΈ λͺ¨λμ λΉBeans λͺ¨λλ‘ λΆν° κΈ°λ₯μ μ μ λ°κ³ κ΅μ ν μ§μμ μΆκ°νκ³ , μ΄λ²€νΈ μ²λ¦¬, μμ μ μ¬, κ·Έλ¦¬κ³ μλΈλ¦Ώ 컨ν μ΄λ 컨ν μ€νΈ λ±μ μμ±νλ€. 컨ν μ€νΈ λͺ¨λμ EJB, JMX, κ·Έλ¦¬κ³ κΈ°λ³Έμ μΈ μ격μ²λ¦¬μ κ΄λ ¨λ Java EE κΈ°λ₯μ μ§μνλ€.ApplicatoinContext
μΈν°νμ΄μ€λ 컨ν μ€νΈ λͺ¨λμμ μ€μν μ§μ μ΄λ€. `spring-context-support`λ μ€νλ§ μ ν리μΌμ΄μ 컨ν μ€νΈμ κ³΅ν΅ μλνν° λΌμ΄λΈλ¬λ¦¬λ€μ κ΄ν ν΅ν©μ μ§μνλ€(μΊμ, λ©μΌλ§, μ€μΌμ€λ§, ν νλ¦Ώ μμ§). -
spring-expression
λͺ¨λμ μ€νμ 쿼리 λ° κ°μ²΄ κ·Έλν μ μ§μ νμν 'ννμ μΈμ΄'λ₯Ό μ 곡νλ€.JSP 2.1 μ€νμμ μ μλ κ³΅ν΅ ννμ μΈμ΄λ₯Ό νμ₯νλ€.
spring-aop
λͺ¨λμ 'AOP' κ΄μ μ§ν₯ νλ‘κ·Έλλ° κ΅¬νμ μ 곡νλ€. λ©μλ μΈν°μ
ν° κ·Έλ¦¬κ³ ν¬μΈνΈμ»· μ½λμ ꡬνλ κΈ°λ₯μ κΉλν λΆλ¦¬νλ€.
-
spring-aspect
λͺ¨λμ AspectJ ν΅ν©κΈ°λ₯μ μ 곡νλ€. -
spring-instrument
λͺ¨λμ ν΄λμ€ κ³μΈ‘μ μ΄ μ§μμ μ ν리μΌμ΄μ μλ²μ ν¬ν¨λ ν΄λμ€λ‘λ ꡬν체 μ§μμ μ 곡νλ€.spring-instrument-tomcat
λͺ¨λμ ν°μΊ£μ μν μ€νλ§μ κ³μΈ‘μ μ΄ μμ΄μ νΈλ₯Ό ν¬ν¨νλ€.
μ€νλ§ νλ μμν¬ 4μ ν¬ν¨λ spring-messaging`λͺ¨λμ μ€νλ§ ν΅ν©Spring Integrationμ `Message
, MessageChannel
, `MessageHandler`λ‘λΆν° μΆμνλ₯Ό μ 곡νκ³ , λ©μκΈ° κΈ°λ° μ ν리μΌμ΄μ
μ ꡬμΆν μ μλλ‘ μ§μνλ€. μ€νλ§ MVC μ λ
Έν
μ΄μ
μ κΈ°λ°ν νλ‘κ·Έλλ° λͺ¨λΈκ³Ό μ μ¬ν ννλ‘ λ©μμ§λ₯Ό λ©μλμ λ§€νν μ μλ μ λ
Έν
μ΄μ
μ ν¬ν¨νκ³ μλ€.
Data Access/Integration κ³μΈ΅μ JDBC, ORM, OXM, JMS κ·Έλ¦¬κ³ Transaction λͺ¨λλ‘ κ΅¬μ±λμ΄ μλ€.
-
spring-jdbc
λͺ¨λμ 'JDBC'-μ§λ£¨ν JDBC μ½λ©κ³Ό λ°μ΄ν°λ² μ΄μ€λ²€λμμ μ μλ μλ¬μ½λ μ²λ¦¬μ κ΄λ ¨λ μ€μΌ μ μλ μΆμν κ³μΈ΅μ μ 곡νλ€. -
spring-tx
λͺ¨λμ νΉμ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ POJOλ₯Ό μν 'νλ‘κ·Έλ¨μ μ΄κ³ μ μΈμ μΈ νΈλμμ 'μ κ΄λ¦¬νλ€. -
spring-orm
λͺ¨λμ 'JPA', 'JDO'κ·Έλ¦¬κ³ 'Hibernate'λ₯Ό ν¬ν¨ν μΈκΈ°μλ 'κ°μ²΄-κ΄κ³ λ§€ν'λ₯Ό μν ν΅ν©κ³μΈ΅μ μ 곡νλ€. -
spring-oxm
λͺ¨λμ JAXB, Castor, XMLBeans, JiBX κ·Έλ¦¬κ³ XStream κ³Ό κ°μ 'Object/XML mapping'μ μ§μνλ μΆμκ³μΈ΅μ μ 곡νλ€. -
spring-jms
λͺ¨λ('Java Messaging Service')μ λ©μμ§μ μμ°κ³Ό μλΉ κΈ°λ₯μ ν¬ν¨νλ€. μ€νλ§ νλ μμν¬ 4.1λΆν°λ `spring-messaging`μ ν΅ν©λμλ€.
μΉ κ³μΈ΅μ spring-web
, spring-webmvc
, spring-websocket
κ·Έλ¦¬κ³ spring-webmvc-portlet
λͺ¨λλ‘ κ΅¬μ±λμ΄ μλ€.
-
spring-web
λͺ¨λμ λ©ν°νν° νμΌ μ λ‘λ κΈ°λ₯κ³Ό μλΈλ¦Ώ 리μ€λλ₯Ό μ¬μ©ν IoC 컨ν μ΄λμ μ΄κΈ°νμ μΉμ§ν₯ μ ν리μΌμ΄μ 컨ν μ€νΈ λ± μΉμ§ν₯ ν΅ν© κΈ°λ₯μ μ 곡νλ€. HTTP clientμ μΉκ³Ό κ΄λ ¨λ μ€νλ§μ μ격μ§μ κΈ°λ₯μ ν¬ν¨νκ³ μλ€. -
spring-webmvc
λͺ¨λμ (Web-Servlet λͺ¨λμ΄λΌκ³ μλ €μ§)μ μ€νλ§μ λͺ¨λΈ-λ·°-컨νΈλ‘€λ¬('MVC')μ μΉ μ ν리μΌμ΄μ μ μν REST Web μλΉμ€ ꡬν체λ₯Ό ν¬ν¨νκ³ μλ€. μ€νλ§μ MVC νλ μμν¬λ λλ©μΈλͺ¨λΈκ³Ό μΉ νΌμ κΉλν λΆλ¦¬λ₯Ό μ 곡νκ³ μ€νλ§ νλ μμν¬μ λ€λ₯Έ κΈ°λ₯λ€μ λͺ¨λ ν΅ν©νλ€. -
spring-webmvc-portlet
λͺ¨λμspring-webmvc
λͺ¨λμ κΈ°λ₯λ€μ 볡μ μ ν¬νλ¦Ώ νκ²½μ μ¬μ©νλ MVC ꡬν체λ₯Ό μ 곡νλ€.
spring-test
λͺ¨λμ μ€νλ§ μ»΄ν¬λνΈμ jUnit νΉμ TestNGμ κ΄λ ¨λ μ λ ν
μ€νΈμ ν΅ν© ν
μ€νΈλ₯Ό μ§μνλ€. μ€νλ§ μ ν리μΌμ΄μ
컨ν
μ€νΈμ μ μ¬μ 컨ν
μ€νΈμ λν μΊμ± μ²λ¦¬λ₯Ό μ 곡νκ³ , μ½λμ κ΄ν λ
립μ μΈ λͺ©κ°μ²΄λ₯Ό μ 곡νλ€.
μ€νλ§ νλ μμν¬μμ μ 곡νλ κΈ°λ₯λ€μ λͺ¨λ μ μ©ν μ νμ μΈ μ€νλ§ μΉ μ ν리μΌμ΄μ μ λ€μκ³Ό κ°μ κΈ°λ₯('Usage Scenarios')λ€μ μ 곡λ°μ μ μκ² λλ€.
μ€νλ§ νλ μμν¬ λͺ¨λμ org.springframework
λΌκ³ νλ κ·Έλ£ΉID(GroupID
)μ `spring`μΌλ‘ μμνλ ArtifactIDλ₯Ό κΈ°λ°μΌλ‘ ꡬμ±λλ€. 'http://maven.apache.org/λ©μ΄λΈ]'κ³Ό 'κ·Έλ λ€'κ³Ό κ°μ λΉλν΄μ κΈ°λ°μΌλ‘ν μμ‘΄μ± κ΄λ¦¬λ₯Ό μ²λ¦¬νλλ° μ©μ΄νλλ‘ νκ³ μλ€.
μ μ°λ¦¬λ μ€νλ§ νλ μμν¬λ₯Ό μκ³ μ¬μ©ν΄μΌν κΉμ?
-
νμ¬ λ리 μ¬μ©λκ³ μλ μ ν리μΌμ΄μ νλ μμν¬λ€.
μ€νλ§ νλ μμν¬λ κ΅λ΄ μλ°κ³μ΄ νλ‘μ νΈμμ κ°μ₯ λ리 μ¬μ©λκ³ μλ μ ν리μΌμ΄μ νλ μμν¬ λ€('μ μμ λΆνλ μμν¬' ν¬ν¨). κ³Όνλ€ μΆμ λ§νΌ μ¬μ©λκ³ μλ μ€νλ§ μ΄μ μλ μ€νΈλΏμΈ κ° μμκ³ κ·Έ μ΄μ μλ EJBκ° μμμ κ²μ΄λ€(μλ§λ?). κ·Έλ¦¬κ³ μΌμ±SDSμ 'μ λνλ μanyframe'μ΄ μμκ³ LG CNSμ 'λ°λΈμ¨DevOn'μ΄ μμλ€. κ·Έ μ΄μΈμλ μ μμμλ§νΌ μ€νλ§ νλ μμν¬λ₯Ό κΉ¨μκ±°λ €μ λ΄λμ μ ν리μΌμ΄μ νλ μμν¬κ° μμλ€. μ€νλ§ νλ μμν¬κ° μ€νμμ€ μκΈ°μ μμ€κ° 곡κ°λμ΄ μκ³ μ€νμμ€λ₯Ό κΈ°λ°μΌλ‘ νμ¬ μκΈ°λ€λ§μ κΈ°λ₯μ μΆκ°νκ±°λ μ‘°κΈλ§ μμ νλ κ²λ§μΌλ‘λ μμ¬μ νλ μμν¬λΌκ³ μ΄μΌκΈ° νλ©° λ§μΌν νλ λλ μμλ€. μ€νΈλΏμΈ μ μ€νΈλΏμΈ 2κ° λ§μ΄ μ¬μ©λλ κ΅λ΄ μν°νλΌμ΄μ¦ κ°λ°νκ²½μ μ€νλ§μ΄ λΉ λ₯΄κ² νμ°λμ΄ κ°λ€.
-
κ΅λ΄μ λ§μ νλ‘μ νΈμμ μ¬μ©μ€μ΄λ€.
κ΅λ΄ 곡곡기κ΄μͺ½μμλ μ μμ λΆνλ μμν¬ μ¬μ©μ κΆμ₯(or κ°μ ?)νκ³ μκ³ , κ΅λ΄μΈ κΈμ΅κΈ°κ΄λ€μ μμ§κΉμ§λ μλ°λ₯Ό κΈ°λ°μΌλ‘ ν μν°νλΌμ΄μ¦ κ°λ°νκ²½μ μ νΈνκ³ μλ€. κ·Έ κΈ°λ°μλ λν SIκΈ°μ μ΄μλ μΌμ±SDS, LG CNS, SK C&C λ±μ μν₯μ΄ μλ€. κ·Έλ€μ μ€νλ§ νλ μμν¬λ₯Ό κΈ°λ°μΌλ‘ ν μμ¬μ κ°λ°νλ μμν¬λ₯Ό κΈ°λ°μΌλ‘ κ°λ°νλ‘μΈμ€λ₯Ό κ°λ°νκ³ νλ‘μ νΈλ₯Ό ꡬμΆνλ κ°μ΄λλ₯Ό μ μ©ν΄μλ€.
-
μλ°κΈ°λ°μμλ μ΄λ§ν λ μμ΄ λ μμκΉ?
κ΅λ΄μμ 'μλ°' κ°λ°νκ²½μ ꡬμΆν κ³³μ΄λ©΄ 'μ€νλ§ νλ μμν¬βκ° μ¬μ©λ κ°λ₯μ±μ΄ 90%λ λλλ€. μ€λλ μμ€ν μμλ νμ€μΉΌμ΄λ EJBκ° μκΈ΄ νκ² μ§λ§ μ°¨μΈλ μ¬μ μ ν΅ν΄μ μ€νλ§νλ μμν¬ κΈ°λ°μΌλ‘ λ³κ²½ν΄λκ°κ³ μλ μν©μ΄λ€. μμ§μ 'μλ°-μ€νλ§νλ μμν¬-λΉμ¦λμ€λ‘μ§ κ°λ°' μ‘°ν©μ κΉ¨λ¨λ¦΄λ§ν μν©μ λ²μ΄μ§μ§ μκ³ μλ€. ν₯ν 10λ κ°μ μΌμ리 κ±±μ λ λ±ν νμ§ μμλ λλ€κ³ ν κΉ?
μ€νλ§μ΄ λ리 μ°μ΄κ² λ μ΄μ λ₯Ό κΌ½μ보μλ©΄,
-
1.0μ΄ λμ¨ μ΄λλ‘ μ§μμ μΌλ‘ μ±λ₯μ΄ ν₯μλκ³ νμν κΈ°λ₯λ€μ΄ λ°μλμ΄ μ κ·Έλ μ΄λκ° λκ³ μλ€.
-
κΈ°λ³Έμ μΈ μΉκΈ°λ₯ꡬνμ λΉλ‘―ν΄μ λ©μμ§, ν΅ν© λ±μ λ€μν κΈ°λ₯μ μ 곡νλ€.
-
λ°°μ°κΈ° μ¬μ΄ μλ°λ₯Ό κΈ°λ°μΌλ‘ νμ¬ νλ‘μ νΈλ₯Ό μ§ννλλ° νμν μΈλ ₯μ μκΈνκΈ°μ λ¬΄λ¦¬κ° μλ€.
-
μλ°λ λ€λ₯Έ μΈμ΄μ λΉν΄μ λ°°μ°κ³ μ¬μ©νλλ° λΆλ΄μ΄ μ μ μΈμ΄λ€. λ¬Όλ‘ κ°μ²΄μ§ν₯μ μ΄ν΄νκ³ , λλ©μΈμ κ°λ μ μ΄ν΄νλλ°λ λ§μ μκ°μ΄ νμνμ§λ§ μ΄λμ λ μ€κ³λμ΄ μλ μν©μμ κΈ°λ₯μ ꡬννλλ° ν° λ¬Έμ κ° λμ§λ μλλ€.
-
-
νλ μμν¬μμ κΆμ₯(μ ν)νλ μ²λ¦¬λ°©μμ μν΄μ λ§μ κ°λ°μκ° νμ νλ©° κ°λ°νκ³ μ μ§λ³΄μνλλ° λ¬΄λ¦¬κ° μλ€.
-
μ€νμμ€μ΄κ³
-
κΉνμμ λͺ¨λ μμ€μ½λλ₯Ό μ΄μ΄λ³΄λ©° μ΄λ»κ² λμνλμ§ μ΄ν΄λ³΄κ³ κ²°ν¨μ΄ μλ κ²½μ° μ΄μλ‘ λ±λ‘νκ³ μμ μ μμ²ν μ μλ€.
-
-
무λ£λ€(μ€νλ§ νλ μμν¬λ₯Ό μ μ©νλ©΄μ 컨μ€ν μ λ°κ³ λ¬Έμ κ° λ°μνμ λ μ§μλ°μ μ μκΈ°λ νμ§λ§ λ체μ μΌλ‘ μκ°ν΄κ²°μ νλ€)
κ΅λ΄μμλ 'μ μμ λΆνλ μμν¬βμ μν₯μ΄ ν¬λ€κ³ λ³Ό μ μλ€. λνSIμμ 컨μμμμ μ΄λ€ 곡곡기κ΄μ μ μ©λλ 'κ°λ°νλ μμν¬βλ₯Ό λ§λ€μ΄ λΉμ©μ μ€μ΄κ² λ€λ λͺ©νλ₯Ό κ°μ§κ³ μ§ννκ³ μλ νλ‘μ νΈλ‘μ μλ°λ₯Ό κΈ°λ°μΌλ‘ ν΄μ 'μ΄ν΄λ¦½μ€-μ€νλ§νλ μμν¬-κ°μ’ μ»΄ν¬λνΈβλ₯Ό μ‘°ν©ν κ°λ°νκ²½μ μ 곡νκ³ νμμ λ°λΌμλ 무λ£λ‘ 컨μ€ν κ³Ό μ΄μμ²λ¦¬κΉμ§ μ§μν΄μ£Όκ³ μκΈ° λλ¬Έμ κ³΅κ³΅κΈ°κ΄ SI νλ‘μ νΈλ₯Ό μ§ννλ λ§μ κΈ°μ μμ μ±μ©νκ³ μλ€.
μ΄κ±΄ νκ²½μ μΈ μν₯μ΄κ³ ,
μλ°λ₯Ό κΈ°λ°μΌλ‘ ν νλ μμν¬ μ€μμ μ€νλ§λ§νΌ μ μ€κ³λκ³ νμ₯κ°λ₯ν νλ μμν¬κ° μλ€.
μ€νλ§νλ μμν¬λ₯Ό μ²μλΆν° νμ νκ³ μ¬μ©νλ μΌμ μ½μ§ μμ΅λλ€. μ΄λ€ μμΌλ‘ κ°λ°μ΄ μ§νλλμ§λ₯Ό λλ΅μ μΌλ‘ μ΄ν΄λ³΄λ©΄ μ’μ λ― ν©λλ€.
νλ‘μ νΈκ° μ§νλ λ κΈ°λ³Έμ μΈ κ³¨κ²©μ 'μν€ν νΈArchitectβμ μν΄μ μ‘νμ§λ€κ³ 보면 λ©λλ€. μν€ν νΈλ 'κ°λ°μβμ μ΅μ’ ν ν¬νΈλ¦¬β¦βλΌκ³ ν μ μλ€. μν€ν νΈμ λν΄ κΆκΈνλ€λ©΄,
μν€ν νΈ μ΄μΌκΈ°: 'http://www.yes24.com/24/goods/2506239?scode=032&OzSrank=6'
λ₯Ό μ½μ΄λ³΄μΈμ.
-
μ€λ¬΄μμ κΈ°νμμ μν μ 체μ μΈ μλΉμ€μ κΈ°ν-λΆμ
-
μν€ν νΈ- μ ν리μΌμ΄μ κΈ°λ₯μ€κ³
-
μ ν리μΌμ΄μ μ μ μ©λ νλ μμν¬ λ° κ΄λ ¨ μ€μ κ²ν
-
μ루μ λμ μ μ΄μ κ΄λ ¨λ κΈ°λ₯λΆμ λ° νμ
-
κ°λ°νκ²½ ꡬμΆ
-
VCS(Version Control System) μ€μΉ λ° λ²μ κ΄λ¦¬ μ λ΅μ립
-
CI ꡬμΆ(Jenkins κ° λ§μ΄ μ΄λ€μ§)
-
-
-
μ€νλ§ νλ‘μ νΈ λΉλ
-
'λ©μ΄λΈMaven'μ΄λ 'κ·Έλ λ€Gradle' λΉλν΄μ μ΄μ©ν μμ‘΄μ± μ€μ λ° λΉλν΅ν© μ²λ¦¬
-
-
web.xml μ€μ
-
servlet 3.0+ μ΄μμ μ μ©νλ κ²½μ°μλ ServletInitializerλ₯Ό ν΅ν΄μ web.xml μ€μ λ체κ°λ₯
-
-
μ€νλ§ μ ν리μΌμ΄μ 컨ν μ€νΈApplicationContext μ€μ
-
application-context.xml(DAO, μλΉμ€ μμ)
-
datasource μ€μ
-
AOP μ€μ
-
-
web-application-context.xml(μΉ μμ)
-
security-context.xml(μΉμ κ·Ό μΈμ¦ μ€μ )
-
URLκ³Ό μ¬μ©μ κΆνμ κΈ°μ€μΌλ‘ μ κ·Όμ μ΄
-
-
-
μ ν리μΌμ΄μ 컨ν μ€νΈ μ μμ€μ ν μ€νΈ
-
MyBatis λ₯Ό μ¬μ©νλλ, νμ΄λ²λ€μ΄νΈλ±μ ORM μ μ¬μ©νλλμ λ°λΌ DB μ¬μ©λ°©μ λ¬λΌμ§
-
MyBatis μΈ κ²½μ°μλ Database μ μ€ν€λ§μ ν μ΄λΈλ€μ΄ μμ±λμ΄ μμ΄μΌ ν¨
-
Mapper ν΄λμ€ λ° SQL μ μ€μ ν΄μ€μΌ ν¨
-
iBatis λ§κ³ MyBatis μ¬μ©μ κΆμ₯: iBatisλ κ°λ°μ§μμ΄ λλμ§ κ½€ λμμ
-
MyBatisμ κ΄λ ¨λ λΆλΆμ 'MyBatis'λ₯Ό μ°Έκ³
-
-
ORMμΈ κ²½μ°μλ κ°λ°λ¨κ³μμ
ddl-auto
μ μ€μ μ ν΅ν΄μ ν μ΄λΈ λ° μ»¬λΌμ μλμμ±μ²λ¦¬κ° κ°λ₯-
Spring Data JPAλ₯Ό μ¬μ©ν κ²½μ° κΈ°λ³Έμ μΈ CRUD μ²λ¦¬λ₯Ό JPARepositoryλ₯Ό ν΅ν΄μ μ²λ¦¬κ° κ°λ₯ν¨
-
μ΄μ κ΄λ ¨λ μμΈν λ΄μ©μ 'μλ° ORM νμ€ JPA νλ‘κ·Έλλ°' μ μ΄ν΄λ³΄κΈ°
-
-
-
μ΄ν μ ν리μΌμ΄μ μ ν¨ν€μ§λ₯Ό ꡬμ±νκ³ κΈ°λ₯λ³λ‘ κ³μΈ΅μ λλ κ°λ°
μν€ν νΈλ νλ‘μ νΈ λ¦¬λμ μν΄μ μ 리λκ³ κ°λ°λλ€.
-
κ³μΈ΅ν ν¨ν€μ§ ꡬμ±(domain, repository, service, web μμ ꡬλΆ)
io.honeymon.spring configuration - WebConfiguration.java domain - Member.java - Project.java repository - MemberRepository.java - ProjectRepository.java service - MemberService.java - DefaultMemberService.java - ProjectService.java - DefaultMProjectService.java web - MemberController.java - ProjectController.java common - FileUtils.java - DateUtils.java
-
κΈ°λ₯λ³ ν¨ν€μ§ ꡬμ±(member, project λ± κΈ°λ₯λ³λ‘ ꡬλΆμ§κ³ κ΄λ ¨ ν΄λμ€λ₯Ό λͺ¨μλ )
io.honeymon.spring configuration - WebConfiguration.java member - Member.java - MemberRepository.java - MemberService.java - DefaultMemberService.java - MemberController.java project - Project.java - ProjectRepository.java - ProjectService.java - DefaultProjectService.java - ProjectController.java
μ κ°μ κΈ°λ₯λ³ ν¨ν€μ§λ‘ λλ κ°λ°νλ λ°©μλ μμ΅λλ€. μ΄λ ΈμΏΌμΈ νμμλ κ³μΈ΅ν ν¨ν€μ§ ꡬμ±μμ κΈ°λ₯ν ν¨ν€μ§ ꡬμ±μΌλ‘ λ³ννμ.
μμ κ°μ ννλ‘ κ°λ°μ μ§νν©λλ€.
-
μ΄λ ΈμΏΌμΈ νμ¬ μν©
-
μ ν리μΌμ΄μ κ°λ°μ μμ΄μ MyBatis 보λ€λ JPA μ¬μ©μ μ νΈν¨. MyBatis λ 4λ μ μ΄νλ‘ μ¬μ©ν΄λ³Έ κ²½νμμ
-
ORMμ κΈ°λ°μΌλ‘ κ°λ°νλ©΄ μν°ν° κ°μ²΄λ₯Ό κΈ°λ°μΌλ‘ ν΄μ DBμμ λ§€νμ²λ¦¬λ μ½κ³ κΈ°λ₯ꡬνλ μ¬μ.
-
Note
|
μ€νλ§λΆνΈλ₯Ό κΈ°λ°μΌλ‘ κ°λ°νκ² λ κ²½μ°, μ€νλ§κ³Ό κ΄λ ¨λ μ€μ μ λΆλ΄κ°μ΄ μ€κ³ κ°λ°μ νμν λΌμ΄λΈλ¬λ¦¬λ€μ `Starter-POM`s λ₯Ό ν΅ν΄μ μ½κ² μ²λ¦¬κ° κ°λ₯νκΈ° λλ¬Έμ μ€νλ§ νλ μμν¬μ λν μ΄ν΄κ° μ΄λμ λ μλ κ°λ°μμκ²λ μ€νλ§λΆνΈ μ¬μ©μ κΆν¨ |
-
κΈ°λ³Έμ€μ μ΄ μλ£λ νμλ κ°λ°νλ νλ©΄μ λ°λΌ κΈ°λ₯ ꡬν μμ
-
JSP νμ΄μ§ λ±μ ν νλ¦Ώ νμΌ μμ±
-
Controller
ModelAndView
μ ν νλ¦Ώ νμ΄μ§ λ±λ‘-
ajax λ₯Ό νμ©ν κ²½μ° νλ©΄μ²λ¦¬λ₯Ό λ΄λΉν 컨νΈλ‘€λ¬μ λ°μ΄ν°λ₯Ό JSONμΌλ‘ μ²λ¦¬ν΄μ€ 컨νΈλ‘€λ¬λ₯Ό λΆλ¦¬νλ©΄ μ’μ
-
Spring 4.0 μ΄ν
@RestController
μ λ Έν μ΄μ μ΄ μ겨μ μμ²ν 컨ν νΈνμ μΌλ‘ λ°νν΄μ£Όλ 컨νΈλ‘€λ¬λ₯Ό λ§λ€ μ μμ
-
-
νλ©΄μ νμν λ°μ΄ν°λ₯Ό λ΄μ λ°μ΄ν°λ€μ
ModelAndView
νΉμ ν νλ¦Ώμμ§μ μ¬μ©νλ κ²½μ°μλ Modelμ λ΄μμ£Όλ©΄ `ViewResolver`μ μν΄μ μ²λ¦¬λ¨ -
νλ©΄μ νμν λ°μ΄ν°μ λ°λΌμ `Controller`μμ `Model`μ λ΄μμ£Όλ λ°μ΄ν°κ° λ¬λΌμ§κ³ μ΄λ `Service`μ ꡬνμ΄ νμν΄μ§
-
νλ©΄λ°μ΄ν°μ λ°λΌ λ°μ΄ν°, μλΉμ€ κ° λ¬λΌμ§
-
-
web.xml
μ°Ύμμ μ ν리μΌμ΄μ νν° μ€μ λ€μ νμΈ -
application-context.xml
νΉμ*-context.xml
νμΌ λΆμ-
application-context.xml
: νμΌμ λ³΄ν΅ `src/main/resource/META-INF`μ μμΉ -
web-application-context.xml
: νμΌμ 보ν΅WEB-INF
μ μμΉ -
νλ‘μ νΈλ₯Ό μ€μ ν μ¬λμ λ°λΌ νμΌλͺ μ΄λ μμΉλ λ€λ₯Ό μ μμΌλ―λ‘ νμΌμ°ΎκΈ°λ₯Ό ν΅ν΄μ μ°Ύμ보기 λ°λ
-
-
DB μ€μ νμΈ
-
μ ν리μΌμ΄μ ν¨ν€μ§ κ΅¬μ± νμΈ
-
μ ν리μΌμ΄μ μ ꡬλνλ©΄μ μ°νλ λ‘κ·Έλ₯Ό ν΅ν΄μ λμμμ νμΈ
-
κ΄λ ¨ν μ€μ νμΈ
-
@Configuration
μ λ Έν μ΄μ μ μ¬μ©ν ν΄λμ€ νμ-
@Configuration
μ λ Έν μ΄μ μ μ¬μ©ν ν΄λμ€λλ λ³΄ν΅ νλμ ν¨ν€μ§ μλμ μ§μ€λλ€.
-
-
λλ¨Έμ§ νλͺ©λ€μ κ³ μ μ μΈ XML μ€μ μ κΈ°λ°μΌλ‘ ν κ²½μ° μ λμΌ
Note
|
STS: Spring Tool Suite 'http://spring.io/tools/sts' |
-
spring explorer view λ₯Ό νμ©ν΄μ κ° μ€μ λΉμ νμΈ κ°λ₯ν¨
-
'Spring tools - Live Bean graphβλ₯Ό ν΅ν΄μ μ ν리μΌμ΄μ μ μ μΈλ λΉλ€μ μ°κ²°μ νμΈν μ μλ€.
μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μ μμ μ΄ ν΄λΌμ΄μΈνΈκ° λΌμ λ λ€λ₯Έ μν°νλΌμ΄μ¦ μμ€ν μ μλΉμ€λ₯Ό μμ²ν μ μλ€. λλ λ°μ΄ν°λ² μ΄μ€λ λ κ±°μ μμ€ν κ°μ μν°νλΌμ΄μ¦ μ 보 μμ€ν μ΄λΌκ³ λΆλ¦¬λ λ°±μλ μμ€ν μ κΈ°λ₯μ μ΄μ©νκΈ°λ νλ€.
μ€νλ§μΌλ‘ λ§λ μ ν리μΌμ΄μ μ μλ° μλ²νκ²½μ λ°°ν¬νλ €λ©΄ JavaEE μλ²κ° νμνλ€.
-
κ²½λκΈ WAS/μλΈλ¦Ώ 컨ν μ΄λ
μ€νλ§μ κΈ°λ³Έμ μΌλ‘ ν°μΊ£tomcatμ΄λ μ ν°Jettyμ κ°μ κ°λ²Όμ΄ μλΈλ¦Ώ 컨ν μ΄λλ§ μμ΄λ μΆ©λΆνλ€. κ·Έ μ΄μΈμ νμν κΈ°λ₯λ€μ λͺ¨λκ³Ό λΌμ΄λΈλ¬λ¦¬λ±μ ν΅ν΄μ μ§μνλ₯νλ€.
-
WAS
μμ© λλ μ€νμμ€ WASλ₯Ό μ¬μ©νλ κ²½μ°λ μμ. μ μ°μ€, μΉμ€νμ΄ λ±λ±λ±β¦β
-
λ 립ν λͺ¨λ
μ€νλ§μ λ³΄ν΅ warλ‘ ν¨ν€μ§λ λ 립 μΉ λͺ¨λλ‘ λ°°ν¬λλ€. ν°μΊ£ κ°μ μλΈλ¦Ώ 컨ν μ΄λλ₯Ό μ΄λ€λ©΄ λ 립 μΉ λͺ¨λμ΄ μ μΌν λ°©λ²μ΄λ€.
-
μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ
νμ₯μκ° `ear`μΈ μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ μΌλ‘ ν¨ν€μ§ν΄μ λ°°ν¬ν μλ μλ€.
μ€νλ§μ μ λλ‘ μ¬μ©νλ 건 μκ°λ³΄λ€ μ½μ§ μλ€. μ΄λ° μμΌλ‘ λ§λ€λ©΄ λλ€λ νμ€ μνμ΄ μλ κ²λ μλλ€. μ€νλ§μ κ°λ° νμ€ λ°μκ° μ‘΄μ¬νμ§λ μμ§λ§, μ€νλ§ μ μ© λ² μ€νΈ νλ ν°μ€λ₯Ό λͺ¨μμ κ·Έλλ‘ λ°λ₯Έλ€κ³ ν΄λ μ€νλ§μ μ μ¬μ©νκ³ μλ€κ³ νμ ν μλ μλ€.
μννΈμ¨μ΄λ₯Ό κ°λ°νλλ° 'νλ μμν¬βλ₯Ό μ¬μ©νλ μ΄μ λ, νλ μμν¬κ° μ 곡νλ νΈμκΈ°λ₯μ νμ©νκ³ μ¬λ¬ κ°λ°μκ° ν¨κ» κ°λ°ν λ νλ μμν¬μ 'μ μ½βμ λ°λΌ μΌμ ν ννμ μ½λ©μ νλλ‘ νλ ν¨κ³Όκ° μλ€.
-
@Repository
,@Service
,@Component
, `@Controller`μ κ°μ΄ κ³μΈ΅μ μΈ κ΅¬λΆμ μ§μ μ μλ μ λ Έν μ΄μ μ μ¬μ© -
@Transactional
,@Cacheable
,@CacheEvict
λ±μ AOP μ μΈ μ μΈμ ν΅ν΄μ νλ‘κ·Έλλ° κ°λ₯
μ€νλ§νλ μμν¬λ μ’μ νλ μμν¬μμλ λΆλͺ νλ€. κ·Έλ¬λ λλ μ§λμΉκ² νλ μμν¬μ μΉμ°μΉ κ°λ°μ νλ κ²μ νΌν΄μΌνλ€κ³ μκ°νλ€. κ°λ°μκ° ν΄κ²°ν΄μΌνλ λ¬Έμ λ λ€μν ννλ‘ λμΆλ μ μκ³ κ·Έ λ¬Έμ λ₯Ό νΈλ λ°©λ²λ μ¬λ¬κ°μ§κ° μλ€. μ΄λ€ ν('νλ μμν¬')μ κ°νμλ κ·Έ λ¬Έμ λ₯Ό ν μ μμ κ²½μ°λ€μ΄ λ°μνλ€.
κ°λ°μλ μ°λ§λ₯Ό ν΅ν΄μ λ€μν κΈ°μ μ μ΅νκ³ λ¬Έμ λ₯Ό ν μ μλλ‘ μ€λΉνλ κ²μ΄ μ’λ€.
-
Spring Reference Document: 'http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle'
-
λ νΌλ°μ€ λ¬Έμκ° μ΅κ³ μ λλ€.
-
μ€νλ§ λ νΌλ°μ€ λ²μ: 'http://blog.outsider.ne.kr/category/JAVA/Framework'
-
-
ν λΉμ μ€νλ§ 3.1: 'http://www.yes24.com/24/Goods/7516911?Acode=101'
-
μ€νλ§ 4 νλ‘κ·Έλλ° μ λ¬Έ: 'http://www.yes24.com/24/goods/16927038'
-
μΉ κ°λ°μλ₯Ό μν Spring 4.0 νλ‘κ·Έλλ°: 'http://www.yes24.com/24/goods/13987797'
-
SpringBoot Reference Document: 'http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/'
-
μλμ€μ μ μ΄μ©ν λΉ λ₯Έ μ€νλ§ μΉμ ν리μΌμ΄μ κ°λ° νλ«νΌ
-
μ€νλ§ λΆνΈ λ²μ: 'https://github.com/ihoneymon/translate-spring-boot-reference/'
-
μ€νλ§λΆνΈ μκ°: 'http://java.ihoney.pe.kr/372'
-
-
λ§λ€λ€ λ§ νλ‘μ νΈβ¦β 'https://github.com/ihoneymon/honeymon-blog'
-
Spring Framework - youtube.com: 'https://www.youtube.com/playlist?list=PLC97BDEFDCDD169D7'
-
ν΄λ¦°μ½λμ€(λ°±λͺ μ) - youtube.com: 'https://www.youtube.com/playlist?list=PLagTY0ogyVkIl2kTr08w-4MLGYWJz7lNK'
-
μ¦κ±°μ΄ μλ°(κΉμ±λ°) - youtube.com: 'https://www.youtube.com/playlist?list=PLHpaQi-LiUCx-vcbcnpU5Tzv2X99WCowN'