λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

STUDY/SPRING

Spring - ν”„λ ˆμž„μ›Œν¬

λ°˜μ‘ν˜•

ν”„λ ˆμž„ μ›Œν¬(framework) : μ–΄λ–€ λŒ€μƒμ„ κ΅¬μ„±ν•˜λŠ” λΌˆλŒ€

    => SW : κΈ°λŠ₯을 미리 ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€ ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ„œ μ œκ³΅ν•˜λŠ” ν˜•νƒœ

    => λͺ¨λ“  νŒ€μ›μ΄ λ™μΌν•œ κ΅¬μ‘°μ—μ„œ 결과물을 생성 ν•  수 있음 => 개발 μ‹œκ°„μ΄ 단좕됨

 

* Spring 2.5 : μ• λ…Έν…Œμ΄μ…˜μ„ 지원 (@Controller λ“±)

  Spring 3.0 : Java 클래슀λ₯Ό μ„€μ • 파일둜 지원

  Spring 4.0 : REST 방식 지원

 

μŠ€ν”„λ§ νŠΉμ§•

 1. EJB(enterprise java beans)보닀 가볍고 ν•™μŠ΅ν•˜κΈ° μ‰¬μš΄ κ²½λŸ‰ ν”„λ ˆμž„μ›Œν¬

 2. POJO(Plain Old Java Object) 기반의 ꡬ성 = μžλ°” ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ Έ 있음

 3. μ œμ–΄μ˜ μ—­ν–‰(IoC, Inversion Of Control) κΈ°μˆ μ„ μ‚¬μš© => μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•½ν•œ 결합을 μ œμ–΄

      : λ©”μ„œλ“œ/객체의 호좜 μž‘μ—…μ„ κ°œλ°œμžκ°€ κ²°μ •ν•˜λŠ” 것이 μ•„λ‹Œ μ™ΈλΆ€μ—μ„œ κ²°μ •(주둜 ν”„λ ˆμž„μ›Œν¬μ—μ„œ κ²°μ •)

 4. μ˜μ‘΄μ„± μ£Όμž…(DI, Dependency Injection)κΈ°λŠ₯ 지원

      : μ œμ–΄μ˜ 역행이 λ°œμƒν•  λ•Œ, μŠ€ν”„λ§ 내뢀에 μžˆλŠ” 객체(Bean)을 κ΄€λ¦¬ν•˜λŠ” 기법

       * μ˜μ‘΄μ„± : 객체가 ν˜Όμžμ„œ μ²˜λ¦¬ν•  수 μ—†μŒ. λ‹€λ₯Έ 객체λ₯Ό 톡해 도움을 λ°›μ•„μ•Όμ§€λ§Œ μ²˜λ¦¬κ°€ κ°€λŠ₯함

         => μ˜μ‘΄κ΄€κ³„μ— μžˆλŠ” 객체λ₯Ό 직접 생성, μ œμ–΄κ°€ μ•„λ‹ˆλΌ μ œμ–΄μ˜ 역행을 ν†΅ν•΄μ„œ ν•„μš”ν•œ 객체λ₯Ό 외뢀에거 κ²°μ •ν•΄μ„œ μ—°κ²°

               1. μƒμ„±μžλ₯Ό μ‚¬μš©ν•œ μ£Όμž…     /       2. set()을 μ‚¬μš©ν•œ μ£Όμž…

 5. 관점지ν–₯ ν”„λ‘œκ·Έλž˜λ° 지원(AOP, Aspect-Oriented Programing)지원 => μžμ›κ΄€λ¦¬ κ°€λŠ₯

      : κ°œλ°œμžκ°€ λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§μ—λ§Œ μ§‘μ€‘ν•΄μ„œ κ°œλ°œν•˜λ„λ‘ ν•˜λŠ” 방법

      : 'νš‘λ‹¨ 관심사'λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ œμž‘ν•˜μ—¬ κ°œλ°œν•˜λŠ” 방법

 6. νŽΈλ¦¬ν•œ MVC νŒ¨ν„΄ ꡬ쑰

 7. μ˜μ†μ„± κ΄€λ ¨ λ‹€μ–‘ν•œ μ„œλΉ„μŠ€ 제곡

 

* AOP : κ°œλ°œμžκ°€ λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§μ—λ§Œ μ§‘μ€‘ν•΄μ„œ κ°œλ°œν•˜λ„λ‘ ν•˜λŠ” 방법

          : 'νš‘λ‹¨ 관심사'λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ œμž‘ν•˜μ—¬ κ°œλ°œν•˜λŠ” 방법

  - aspect : κ΅¬ν˜„ν•˜κ³ μž ν•˜λŠ” 보쑰기λŠ₯(λ³΄μ•ˆ, 둜그, νŠΈλ Œμ μ…˜)

  - advice : aspect의 μ‹€μ œ κ΅¬ν˜„ 클래슀(λ©”μ„œλ“œ 호좜 κΈ°μ€€μœΌλ‘œ μ—¬λŸ¬ κ³³ 호좜 κ°€λŠ₯)

  - joinpoint : adviceλ₯Ό μ μš©ν•˜λŠ” 지검

  - pointcut : adviceκ°€ μ μš©λ˜λŠ” λŒ€μƒ 지점(νŒ¨ν‚€μ§€λͺ…/클래슀λͺ…/λ©”μ„œλ“œλͺ…)

  - target : adviceκ°€ μ μš©λ˜λŠ” 클래슀

  - weaving : adviceλ₯Ό 주기적으둜 μ μš©ν•˜λŠ” 것

 

* AOPκΈ°λŠ₯ κ΅¬ν˜„ 

  1. target클래슀λ₯Ό μ§€μ •ν•œλ‹€.

  2. advice 클래슀λ₯Ό μ§€μ •ν•œλ‹€.

  3. μ„€μ •νŒŒμΌμ—μ„œ pointcut 을 지정

  4. μ„€μ •νŒŒμΌμ—μ„œ advice + pointcut κ²°ν•©

  5. μŠ€ν”„λ§ ProxyFactoryBean 클래슀λ₯Ό μ‚¬μš©ν•΄μ„œ target에 adviceλ₯Ό 적용

  6. getBean()μ‚¬μš©ν•΄μ„œ 적용

 

* μ£ΌκΈ°λŠ₯ : 계산

* 보쑰기λŠ₯ : 둜그좜λ ₯

 

* μŠ€ν”„λ§ μ£Όμš” κΈ°λŠ₯

1. Spring Core : λ‹€λ₯Έ κΈ°λŠ₯κ³Ό μ„€μ • κΈ°λŠ₯을 λΆ„λ¦¬ν•˜κΈ° μœ„ν•œ IoCκΈ°λŠ₯(μ œμ–΄μ˜ μ—­ν–‰)을 제곡

2. Spring Context : μŠ€ν”„λ§μ˜ κΈ°λ³ΈκΈ°λŠ₯, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 각 κΈ°λŠ₯을 λΉˆμ— μ ‘κ·Όν•˜λŠ” 방법

3. Spring DAO : JDBCκΈ°λŠ₯을 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯

4. Spring ORM : ν•˜μ΄λ²„λ„€μ΄νŠΈ/λ§ˆμ΄λ°”ν‹°μŠ€μ™€ 같은 μ˜μ†μ„± ν”„λ ˆμž„ μ›Œν¬λ₯Ό 제곡(DBκ΄€λ ¨ ν”„λ ˆμž„ μ›Œν¬κ°€ λ”°λ‘œ μ‘΄μž¬ν•¨)

5. Spring AOP : 관점 지ν–₯ κΈ°λŠ₯ 제곡

6. Spring WEB : μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μš”ν•œ κΈ°λŠ₯ 제곡

7. Spring WebWVC : MVCκ΅¬ν˜„ κΈ°λŠ₯ 제곡

 

* κ°•ν•œ κ²°ν•© : 직접적인 연관관계가 μžˆμ–΄μ„œ μ½”λ“œ 변경이 어렀움

* μ•½ν•œ κ²°ν•© : 직접적인연관관계가 μ—†μ–΄μ„œ μ½”λ“œ 변경이 쉬움

 

 

λ°˜μ‘ν˜•