λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
곡뢀관련메λͺ¨

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬(Spring Framework) λž€?

by μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 12.
λ°˜μ‘ν˜•

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λž€ μžλ°” ν”Œλž«νΌμ„ μœ„ν•œ μ†ŒμŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬λ‘œμ„œ κ°„λ‹¨νžˆ μŠ€ν”„λ§(Spring)이라고도 ν•œλ‹€. λ™μ μΈ μ›Ή μ‚¬μ΄νŠΈλ₯Ό κ°œλ°œν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³  μžˆλ‹€. λŒ€ν•œλ―Όκ΅­ κ³΅κ³΅κΈ°κ΄€μ˜ μ›Ή μ„œλΉ„μŠ€ 개발 μ‹œ μ‚¬μš©μ„ ꢌμž₯ν•˜κ³  μžˆλŠ” μ „μžμ •λΆ€ ν‘œμ€€ ν”„λ ˆμž„μ›Œν¬μ˜ 기반 κΈ°μˆ λ‘œμ„œ 쓰이고 μžˆλ‹€.

​

μŠ€ν”„λ§μ€ λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬μ— λΉ„ν•΄ λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ 가진닀.

 

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

-μŠ€ν”„λ§μ€ Plain Old Java Object λ°©μ‹μ˜ ν”„λ ˆμž„μ›Œν¬μ΄λ‹€. 일반적인 J2EE ν”„λ ˆμž„μ›Œν¬μ— λΉ„ν•΄ κ΅¬ν˜„μ„ μœ„ν•΄ νŠΉμ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ 상속을 받을 ν•„μš”κ°€ μ—†μ–΄ 기쑴에 μ‘΄μž¬ν•˜λŠ” 라이브러리 등을 μ§€μ›ν•˜κΈ°μ— μš©μ΄ν•˜κ³  객체가 가볍닀.

-μŠ€ν”„λ§μ€ μ œμ–΄ λ°˜μ „(IoC : Inversion of Control)을 μ§€μ›ν•œλ‹€. 컨트둀의 μ œμ–΄κΆŒμ΄ μ‚¬μš©μžκ°€ μ•„λ‹ˆλΌ ν”„λ ˆμž„μ›Œν¬μ— μžˆμ–΄μ„œ ν•„μš”μ— 따라 μŠ€ν”„λ§μ—μ„œ μ‚¬μš©μžμ˜ μ½”λ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.

-μŠ€ν”„λ§μ€ μ˜μ‘΄μ„± μ£Όμž…(DI : Dependency Injection)을 μ§€μ›ν•œλ‹€. 각각의 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€ 간에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•  경우 ν”„λ ˆμž„μ›Œν¬κ°€ μ„œλ‘œ μ—°κ²°μ‹œμΌœμ€€λ‹€.

-μŠ€ν”„λ§μ€ 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP : Aspect-Oriented Programming)을 μ§€μ›ν•œλ‹€. λ”°λΌμ„œ νŠΈλžœμž­μ…˜μ΄λ‚˜ λ‘œκΉ…, λ³΄μ•ˆκ³Ό 같이 μ—¬λŸ¬ λͺ¨λ“ˆμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯의 경우 ν•΄λ‹Ή κΈ°λŠ₯을 λΆ„λ¦¬ν•˜μ—¬ 관리할 수 μžˆλ‹€.

-μŠ€ν”„λ§μ€ μ˜μ†μ„±κ³Ό κ΄€λ ¨λœ λ‹€μ–‘ν•œ μ„œλΉ„μŠ€λ₯Ό μ§€μ›ν•œλ‹€. iBATISλ‚˜ ν•˜μ΄λ²„λ„€μ΄νŠΈ λ“± 이미 완성도가 높은 λ°μ΄ν„°λ² μ΄μŠ€ 처리 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ—°κ²°ν•  수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

-μŠ€ν”„λ§μ€ ν™•μž₯성이 λ†’λ‹€. μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ— ν†΅ν•©ν•˜κΈ° μœ„ν•΄ κ°„λ‹¨ν•˜κ²Œ κΈ°μ‘΄ 라이브러리λ₯Ό κ°μ‹ΈλŠ” μ •λ„λ‘œ μŠ€ν”„λ§μ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μˆ˜λ§Žμ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 이미 μŠ€ν”„λ§μ—μ„œ μ§€μ›λ˜κ³  있고 μŠ€ν”„λ§μ—μ„œ μ‚¬μš©λ˜λŠ” 라이브러리λ₯Ό λ³„λ„λ‘œ λΆ„λ¦¬ν•˜κΈ°λ„ μš©μ΄ν•˜λ‹€.

​

​

β–Ά μ£Όμš” λͺ¨λ“ˆ

​

-μ œμ–΄ λ°˜μ „ μ»¨ν…Œμ΄λ„ˆ

μ œμ–΄ λ°˜μ „(IoC: Inversion of Control) μ»¨ν…Œμ΄λ„ˆλŠ” μŠ€ν”„λ§μ˜ κ°€μž₯ μ€‘μš”ν•˜κ³  핡심적인 κΈ°λŠ₯μœΌλ‘œμ„œ μžλ°”μ˜ 반영(reflection)을 μ΄μš©ν•΄μ„œ 객체의 생λͺ…μ£ΌκΈ°λ₯Ό κ΄€λ¦¬ν•˜κ³  μ˜μ‘΄μ„± μ£Όμž…(Dependency Injection)을 톡해 각 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€κ°„μ˜ μ˜μ‘΄μ„±μ„ λ§žμΆ°μ€€λ‹€. μ΄λŸ¬ν•œ κΈ°λŠ₯듀은 주둜 ν™˜κ²½μ„€μ •μ„ λ‹΄λ‹Ήν•˜λŠ” XML νŒŒμΌμ— μ˜ν•΄ μ„€μ •λ˜κ³  μˆ˜ν–‰λœλ‹€.

 

​

-관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ° ν”„λ ˆμž„μ›Œν¬

μŠ€ν”„λ§μ€ λ‘œκΉ…μ΄λ‚˜ λ³΄μ•ˆ, νŠΈλžœμž­μ…˜ λ“± 핡심적인 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 관련이 μ—†μœΌλ‚˜ μ—¬λŸ¬ κ³³μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ“°μ΄λŠ” κΈ°λŠ₯듀을 λΆ„λ¦¬ν•˜μ—¬ κ°œλ°œν•˜κ³  μ‹€ν–‰ μ‹œμ— μ„œλ‘œ μ‘°ν•©ν•  수 μžˆλŠ” 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP)을 μ§€μ›ν•œλ‹€. 기쑴에 널리 μ‚¬μš©λ˜κ³  μžˆλŠ” κ°•λ ₯ν•œ 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ° ν”„λ ˆμž„μ›Œν¬μΈ AspectJ도 λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•  수 있으며, μŠ€ν”„λ§ 자체적으둜 μ§€μ›ν•˜λŠ” μ‹€ν–‰μ‹œ(Runtime)에 μ‘°ν•©ν•˜λŠ” 방식도 μ§€μ›ν•œλ‹€.

 

​

-데이터 μ•‘μ„ΈμŠ€ ν”„λ ˆμž„μ›Œν¬

μŠ€ν”„λ§μ€ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•˜κ³  자료λ₯Ό μ €μž₯ 및 μ½μ–΄μ˜€κΈ° μœ„ν•œ μ—¬λŸ¬ 가지 유λͺ…ν•œ 라이브러리, 즉 JDBC, iBATIS(MyBatis), ν•˜μ΄λ²„λ„€μ΄νŠΈ 등에 λŒ€ν•œ 지원 κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ ν”„λ‘œκ·Έλž˜λ°μ„ μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

​

 

-νŠΈλžœμž­μ…˜ 관리 ν”„λ ˆμž„μ›Œν¬

μŠ€ν”„λ§μ€ μΆ”μƒν™”λœ νŠΈλžœμž­μ…˜ 관리λ₯Ό μ§€μ›ν•˜λ©° XML μ„€μ •νŒŒμΌ 등을 μ΄μš©ν•œ 선언적인 방식 및 ν”„λ‘œκ·Έλž˜λ°μ„ ν†΅ν•œ 방식을 λͺ¨λ‘ μ§€μ›ν•œλ‹€.

 

​

-λͺ¨λΈ-λ·°-컨트둀러 νŒ¨ν„΄

μŠ€ν”„λ§μ€ μ›Ή ν”„λ‘œκ·Έλž¨λ° 개발 μ‹œ 거의 ν‘œμ€€μ μΈ 방식인 Spring MVC라 λΆˆλ¦¬λŠ” λͺ¨λΈ-λ·°-컨트둀러(MVC) νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€. DispatcherServlet이 Controller 역할을 λ‹΄λ‹Ήν•˜μ—¬ 각쒅 μš”μ²­μ„ μ μ ˆν•œ μ„œλΉ„μŠ€μ— λΆ„μ‚°μ‹œμΌœμ£Όλ©° 이λ₯Ό 각 μ„œλΉ„μŠ€λ“€μ΄ 처리λ₯Ό ν•˜μ—¬ κ²°κ³Όλ₯Ό μƒμ„±ν•˜κ³  κ·Έ κ²°κ³ΌλŠ” λ‹€μ–‘ν•œ ν˜•μ‹μ˜ View μ„œλΉ„μŠ€λ“€λ‘œ 화면에 ν‘œμ‹œλ  수 μžˆλ‹€.

​

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

μŠ€ν”„λ§μ€ νŠΉμ • μ‹œκ°„λŒ€μ— μ‹€ν–‰ν•˜κ±°λ‚˜ λŒ€μš©λŸ‰μ˜ 자료λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° μ“°μ΄λŠ” 일괄 처리(Batch Processing)을 μ§€μ›ν•˜λŠ” 배치 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ œκ³΅ν•œλ‹€. 기본적으둜 μŠ€ν”„λ§ λ°°μΉ˜λŠ” Quartz 기반으둜 λ™μž‘ν•œλ‹€.

λ°˜μ‘ν˜•

λŒ“κΈ€