ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

   Spring Framework

κ°€λ²Όμš΄ ν”„λ ˆμž„μ›Œν¬ Spring  

[좜처] [ν™œμš©ν”„λ‘œκ·Έλž¨]Spring Framework|μž‘μ„±μž 









   μŠ€ν”„링 ν”„λ ˆμž„μ›Œν¬λž€?

 

Spring FrameworkλŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€κΈ° μœ„ν•œ λͺ¨λ“  κΈ°λŠ₯을 μ’…ν•©μ μœΌλ‘œ μ œκ³΅ν•˜λŠ” κ²½λŸ‰ν™”λœ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. JEE(Java Enterprise Edition)κ°€ μ œκ³΅ν•˜λŠ” λ‹€μˆ˜μ˜ κΈ°λŠ₯을 μ§€μ›ν•˜κ³  있기 λ•Œλ¬Έμ—, JEEλ₯Ό λŒ€μ²΄ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬λ‘œ 자리작고 있고 μ‹€μ œλ‘œ Spring ν”„λ ˆμž„μ›Œν¬λŠ” JEEκ°€ μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 것 뿐만 μ•„λ‹ˆλΌ, DI(Dependency Injection)λ‚˜ AOP (Aspect Oriented Programming)와 같은 κΈ°λŠ₯도 지원 ν•©λ‹ˆλ‹€.

 

 

1. κ²½λŸ‰μ»¨ν…Œμ΄λ„ˆ

- μŠ€ν”„λ§μ€ μžλ°”κ°μ²΄λ₯Ό λ‹΄κ³  μžˆλŠ” μ»¨ν…Œμ΄λ„ˆμ΄λ‹€. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” 이듀 μžλ°” 객체의 생성과 μ†Œλ©Έκ³Ό 같은 라이프사이클을 κ΄€λ¦¬ν•˜κ³ , μ–Έμ œλ“ μ§€ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ‘œ λΆ€ν„° ν•„μš”ν•œ 객체λ₯Ό 가져와 μ‚¬μš©ν•  수 μžˆλ‹€.


2. DI(Dependency Injection – μ˜μ‘΄μ„± 지원) νŒ¨ν„΄ 지원

- μŠ€ν”„λ§μ€ μ„€μ •νŒŒμΌμ΄λ‚˜, μ–΄λ…Έν…Œμ΄μ…˜μ„ ν†΅ν•΄μ„œ κ°μ²΄κ°„μ˜ 의쑴 관계λ₯Ό μ„€μ •ν•  수 μžˆλ‹€. λ”°λΌμ„œ, κ°μ²΄λŠ” μ˜μ‘΄ν•˜κ³  μžˆλŠ” 객체λ₯Ό μ§μ ‘μƒμ„±ν•˜κ±°λ‚˜ 검색할 ν•„μš”κ°€ μ—†λ‹€.


3. AOP(Aspect Oriented Programming – μΈ‘λ©΄ 지ν–₯ ν”„λ‘œκ·Έλž˜λ°) 지원

- AOP λŠ” 문제λ₯Ό λ°”λΌλ³΄λŠ” 관점을 κΈ°μ€€μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 기법이닀. μ΄λŠ” 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 핡심관심 사항과 전체에 μ μš©λ˜λŠ” 곡톡관심 사항을 κΈ°μ€€μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° ν•¨μœΌλ‘œμ„œ 곡톡λͺ¨λ“ˆμ„ μ—¬λŸ¬ μ½”λ“œμ— μ‰½κ²Œ μ μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€. μŠ€ν”„λ§μ€ 자체적으둜 ν”„λ‘μ‹œ 기반의 AOPλ₯Ό μ§€μ›ν•˜λ―€λ‘œ νŠΈλžœμž­μ…˜μ΄λ‚˜, λ‘œκΉ…, λ³΄μ•ˆκ³Ό 같이 μ—¬λŸ¬ λͺ¨λ“ˆμ—μ„œ κ³΅ν†΅μœΌλ‘œ ν•„μš”λ‘œ ν•˜μ§€λ§Œ μ‹€μ œ λͺ¨νŠ€μ˜ 핡심은 μ•„λ‹Œ κΈ°λŠ₯듀을 λΆ„λ¦¬ν•˜μ—¬ 각 λͺ¨λ“ˆμ— 적용이 κ°€λŠ₯ν•˜λ‹€.


4. POJO(Plain Old Java Object – νŠΉμ • μΈν„°νŽ˜μ΄μŠ€ λ˜λŠ” 클래슀λ₯Ό μƒμ†ν•˜μ§€ μ•ŠλŠ” 일반 μžλ°” 객체) 지원

- POJOλŠ” 일반적인 μžλ°” 객체λ₯Ό λ§ν•œλ‹€. μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ €μž₯λ˜λŠ” μžλ°”κ°μ²΄λŠ” νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ ν•˜κ±°λ‚˜, 클래슀 상속 없이도 μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 일반적인 μžλ°” 객체λ₯Ό μΉ­ν•˜κΈ° μœ„ν•œ 별칭 κ°œλ…μ΄λ‹€.


5. IoC(Inversion of Control – μ œμ–΄μ˜ λ°˜μ „)

- IoCλŠ” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬κ°€ κ°–κ³  μžˆλŠ” 핡심적인 κΈ°λŠ₯이닀. λ³Έλ”” μžλ°”μ˜ 객체 생성 및 μ˜μ‘΄κ΄€κ³„μ— μžˆμ–΄ λͺ¨λ“  μ œμ–΄κΆŒμ€ κ°œλ°œμžμ—κ²Œ μžˆμ—ˆλ‹€. ν•˜μ§€λ§Œ, μ„œλΈ”λ¦Ώκ³Ό EJBκ°€ λ‚˜νƒ€λ‚˜λ©΄μ„œ 기쑴의 μ œμ–΄κΆŒμ΄ μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ 및 EJBμ»¨ν…Œμ΄λ„ˆμ—κ²Œ λ„˜μ–΄κ°€κΈ° λœλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  객체의 μ œμ–΄κΆŒμ΄ λ„˜μ–΄κ°„ 것은 μ•„λ‹ˆκ³  μ„œλΈ”λ¦Ώ, EJB에 λŒ€ν•œ μ œμ–΄κΆŒμ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ 객체 μ œμ–΄κΆŒμ€ κ°œλ°œμžλ“€μ΄ λ‹΄λ‹Ήν•˜κ³  μžˆλ‹€. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œλ„ 객체에 λŒ€ν•œ 생성과 생λͺ…μ£ΌκΈ°λ₯Ό 관리할 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆλŠ”λ° 이런 이유둜 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ[Spring Container] λ˜λŠ” IoC μ»¨ν…Œμ΄λ„ˆ 라고 λΆ€λ₯΄κΈ°λ„ ν•œλ‹€.


6. μŠ€ν”„λ§μ€ νŠΈλžœμ μ…˜ 처리λ₯Ό μœ„ν•œ μΌκ΄€λœ 방법을 μ œκ³΅ν•œλ‹€

- JDBCλ₯Ό μ‚¬μš©ν•˜λ“  JTAλ₯Ό μ‚¬μš©ν•˜λ“ , λ˜λŠ” μ»¨ν…Œμ΄λ„ˆκ°€ μ œκ³΅ν•˜λŠ” νŠΈλžœμ μ…˜μ„ μ‚¬μš©ν•˜λ“ , μ„€μ •νŒŒμΌμ„ 톡해 νŠΈλžœμ μ…˜ 관련정보λ₯Ό μž…λ ₯ν•˜κΈ°λ•Œλ¬Έμ— νŠΈλžœμ μ…˜ κ΅¬ν˜„μ— 상관 없이 λ™μΌν•œ μ½”λ“œλ₯Ό μ—¬λŸ¬ ν™˜κ²½μ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.


7. μŠ€ν”„λ§μ€ μ˜μ†μ„±κ³Ό κ΄€λ ¨λœ λ‹€μ–‘ν•œ APIλ₯Ό μ§€μ›ν•œλ‹€.

- μŠ€ν”„λ§μ€ JDBCλ₯Ό λΉ„λ‘―ν•˜μ—¬ iBatis, ν•˜μ΄λ²„λ„€μ΄νŠΈ, JPAλ“± DB처리λ₯Ό μœ„ν•΄ 널리 μ‚¬μš©λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 연동을 μ§€μ›ν•˜κ³  μžˆλ‹€.


8. μŠ€ν”„λ§μ€ λ‹€μ–‘ν•œ API에 λŒ€ν•œ 연동을 μ§€μ›ν•œλ‹€.

- μŠ€ν”„λ§μ€ JMS, 메일, μŠ€μΌ€μ₯΄λ§λ“± μ—”ν„°ν”„λΌμ΄μ¦ˆ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μš”ν•œ λ‹€μ–‘ν•œ APIλ₯Ό μ„€μ •νŒŒμΌκ³Ό μ–΄λ…Έν…Œμ΄μ…˜μ„ ν†΅ν•΄μ„œ μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜κ³  μžˆλ‹€.




   μŠ€ν”„링을 μ“°λŠ” 이유

 

μžλ°”λ‘œ κ°œλ°œμ„ν•˜λ©΄ μŠ€μΌ€μΌμ΄ μ—„μ²­λ‚˜κ²Œ 큰게 μ‚¬μ‹€μž…λ‹ˆλ‹€. μ•žμœΌλ‘œλ„ μŠ€μΌ€μΌμ΄ 점점 μ»€μ§€κ²Œ 될꺼고 κ·Έλ ‡κ²Œ 되면 ν”„λ‘œμ νŠΈ 규λͺ¨λ„ μ»€μ§€κ²Œ λ©λ‹ˆλ‹€ λ”°λΌμ„œ λ§Žμ€ κ°œλ°œμžλ“€μ΄ ν•œ ν”„λ‘œμ νŠΈμ— νˆ¬μž…ν•˜κ²Œ 되고 λ§Žμ€ κ°œλ°œμžλ“€μ΄ μ„œλ‘œ λΆ„ν• ν•˜μ—¬ κ°œλ°œμ„ ν•˜λ‹€λ³΄λ©΄ μ€‘λ³΅λ˜λŠ” 뢀뢄도 많고 또 λ³΅μž‘ν•΄μ§‘λ‹ˆλ‹€ μŠ€ν”„λ§μ€ 이런 κ°œλ°œμžλ“€μ„ νŽΈν•˜κ²Œ μž‘μ—…μ„ν• μˆ˜μžˆλŠ” ν™˜κ²½μ„ λ§Œλ“€μ–΄μ£ΌλŠ” μ˜€ν”ˆμ†ŒμŠ€ ν”„λ ˆμž„ μ›Œν¬μž…λ‹ˆλ‹€. 

 

*μ˜€ν”ˆμ†ŒμŠ€ : νŠΉλ³„ν•œ λΌμ΄μ„ΌμŠ€μ—†μ΄ μ‚¬μš©μ΄ κ°€λŠ₯ν•œ κ°œλ°œμ†ŒμŠ€

*ν”„λ ˆμž„ μ›Œν¬ : 쒀더 개발이 μš©μ΄ν•˜λ„λ‘ 곡톡 클레슀λ₯Ό λ§Œλ“€μ–΄ 묢어놓은 것

[좜처] [ν™œμš©ν”„λ‘œκ·Έλž¨]Spring Framework|μž‘μ„±μž 

[좜처] [ν™œμš©ν”„λ‘œκ·Έλž¨]Spring Framework|μž‘μ„±μž 


λ°˜μ‘ν˜•
"이 ν¬μŠ€νŒ…μ€ 쿠팑 νŒŒνŠΈλ„ˆμŠ€ ν™œλ™μ˜ μΌν™˜μœΌλ‘œ, 이에 λ”°λ₯Έ μΌμ •μ•‘μ˜ 수수료λ₯Ό μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€."
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€