πŸ‘©‍πŸ’»/Java

[Spring] μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ κ°œμš”

ν•œλ‚˜ 2020. 10. 21. 21:40

κ°œμš”

  • μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” Java ν”Œλž«νΌμ„ μœ„ν•œ κ²½λŸ‰κΈ‰ μ˜€ν”ˆ μ†ŒμŠ€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬μ΄λ‹€.
  • μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” 단지 웹앱을 λ§Œλ“€κΈ° μœ„ν•΄μ„œλ§Œ μ‘΄μž¬ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, 동적인 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 가지 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.
  • ν•œκ΅­μ˜ 경우, 곡곡 κΈ°κ΄€μ˜ μ›Ή μ„œλΉ„μŠ€ 개발 μ‹œ μ‚¬μš©μ„ ꢌμž₯ν•˜λŠ” μ „μžμ •λΆ€ ν‘œμ€€ν”„λ ˆμž„μ›Œν¬μ˜ 기반 기술둜 쓰이고 μžˆλ‹€.
  • μžλ°” κ°œλ°œμ„ μœ„ν•œ ν”„λ ˆμž„μ›Œν¬μΈλ§ŒνΌ 쒅속 객체λ₯Ό μƒμ„±ν•˜κ³ , μ‘°λ¦½ν•΄μ£ΌλŠ” νˆ΄μ΄λ‹€.
  • POJO Bean Container. μ»¨ν…Œμ΄λ„ˆλΌλŠ” ν‘œν˜„μ€, μŠ€ν”„λ§μ΄ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 객체의 생λͺ… 주기와 섀정을 ν¬ν•¨ν•˜κ³  κ΄€λ¦¬ν•œλ‹€λŠ” μ μ—μ„œ λ‚˜μ˜¨ κ°œλ…. λ˜ν•œ, myBatisλ‚˜ Hibernate 같은 완성도 높은 λ°μ΄ν„°λ² μ΄μŠ€ 처리 λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μ—°κ²°ν•  수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€λŠ” λ§₯락도 μ‘΄μž¬ν•œλ‹€.
  • IoC(Inversion of Control; μ œμ–΄ μ—­ν–‰)을 톡해 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λŠμŠ¨ν•œ 결합을 도λͺ¨ν•œλ‹€. 즉, 컨트둀의 μ œμ–΄κΆŒμ΄ μ‚¬μš©μžκ°€ μ•„λ‹Œ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ— μžˆμ–΄ ν•„μš”μ— 따라 μŠ€ν”„λ§μ΄ μƒμš©μžμ˜ μ½”λ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
  • DI(Dependency Injection; μ˜μ‘΄μ„± μ£Όμž…)을 톡해 각각의 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€λ“€ κ°„ μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•  경우 μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬κ°€ μ„œλ‘œ 연결을 ν•΄μ€€λ‹€.
  • AOP(Aspect-Oriented Programming; 관점 지ν–₯) ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ ν’λΆ€ν•œ 지원을 ν•œλ‹€. -> Filter, Intercepter, AOP
  • νŠΈλžœμž­μ…˜ 관리 ν”„λ ˆμž„μ›Œν¬. μΆ”μƒν™”λœ νŠΈλžœμž­μ…˜ 관리λ₯Ό μ§€μ›ν•˜κ³  .xml, .java, .property λ“±μ˜ μ„€μ • νŒŒμΌμ„ μ΄μš©ν•œ 선언적인 방식 및 ν”„λ‘œκ·Έλž˜λ°μ„ ν†΅ν•œ 방식 λͺ¨λ‘λ₯Ό μ§€μ›ν•œλ‹€.
  • MVC νŒ¨ν„΄ : μ›Ή ν”„λ‘œκ·Έλž˜λ° 개발 μ‹œ MVC(Model-View-Controller) νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€. DispatcherServlet이 Controller 역할을 λ‹΄λ‹Ήν•΄μ„œ 각쒅 μš”μ²­μ„ μ μ ˆν•œ μ„œλΉ„μŠ€λ‘œ λΆ„μ‚°ν•΄μ£Όκ³ , 처리 κ²°κ³Όλ₯Ό μƒμ„±ν•œ 것은 λ‹€μ–‘ν•œ ν˜•μ‹μ˜ View μ„œλΉ„μŠ€λ‘œ 화면에 ν‘œμ‹œν•œλ‹€.
  • 배치 ν”„λ ˆμž„μ›Œν¬ : μŠ€ν”„λ§μ€ νŠΉμ • μ‹œκ°„λŒ€ μ‹€ν–‰ν•˜κ±°λ‚˜ λŒ€μš©λŸ‰μ˜ 자료λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° μ“°μ΄λŠ” 일괄 처리(Batch Processing)을 μ§€μ›ν•˜λŠ” 배치 ν”„λ ˆμž„μ›Œν¬λ₯Ό μ œκ³΅ν•˜λ©°, κΈ°λ³Έ μŠ€ν”„λ§ λ°°μΉ˜λŠ” Quartz 기반으둜 λ™μž‘ν•œλ‹€.
  • 즉, 곡톡 λΆ€λΆ„μ˜ μ†ŒμŠ€ 코딩이 μš©μ΄ν•˜λ©° ν™•μž₯성도 맀우 λ†’λ‹€. λ˜ν•œ, κ°„λ‹¨ν•œ μ»΄ν¬λ„ŒνŠΈλ‘œ λ³΅μž‘ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜κ³  μ„€μ •ν•˜λŠ” μž₯점이 μžˆλ‹€.

μŠ€ν”„λ§μ˜ μ£Όμš” μ»΄ν¬λ„ŒνŠΈ

  • POJO(Plain Object Java Object) : μ‚¬μš©μžκ°€ λ§Œλ“  객체. μŠ€ν”„λ§μ€ μ‚¬μš©μžκ°€ λ§Œλ“€ 객체에 λŒ€ν•΄μ„œλ„ 라이프 사이클 관리λ₯Ό μœ„μž„ν•΄ μˆ˜ν–‰ν•œλ‹€. μ΄κ²ƒλ“€μ˜ μ‘°ν•©μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ§Œλ“€μ–΄μ§„λ‹€.
  • AOP : 관점지ν–₯ ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ‚¬μš©μžλ“€μ΄ νŠΈλžœμž­μ…˜ 처리/λ‘œκΉ…/μ˜ˆμ™Έ μ²˜λ¦¬λ“€μ˜ λ‘œμ§μ„ κ³΅ν†΅μ μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€. AOPλ₯Ό 잘 지킨닀면, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 기타 곡톡 λͺ¨λ“ˆμ΄ μ„žμ΄λŠ” 것을 방지해 κ°œλ°œμžκ°€ λ”μš± λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈμ— 집쀑할 수 있게 λœλ‹€.
  • PSA(Portable Service Abstraction) : μŠ€ν”„λ§μ€ λ‹€λ₯Έ μ—¬λŸ¬ λͺ¨λ“ˆμ„ μ‚¬μš©ν•  λ•Œλ„ λ³„λ„μ˜ 좔상화 λ ˆμ΄μ–΄λ₯Ό μ œκ³΅ν•œλ‹€. 예λ₯Ό λ“€μ–΄, JPAλ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν•  λ•Œ Spring JPAλ₯Ό μ‚¬μš©ν•˜λŠ” μ‹μœΌλ‘œ μΆ”μƒν™”ν•˜κΈ° λ•Œλ¬Έμ— μ‹€μ œ κ΅¬ν˜„ λ‹¨κ³„μ—μ„œ Hibernateλ₯Ό μ‚¬μš©ν•˜λ“ , EclipseLinkλ₯Ό μ‚¬μš©ν•˜λ“  μ‚¬μš©μžλŠ” 이 λͺ¨λ“ˆμ˜ μ˜μ‘΄ν•˜μ§€ μ•Šκ³ λ„ ν”„λ‘œκ·Έλž¨μ— 집쀑할 수 μžˆλ‹€.

μŠ€ν”„λ§ λͺ¨λ“ˆ λ‹€μ΄μ–΄κ·Έλž¨

μŠ€ν”„λ§μ˜ λͺ¨λ“ˆ

  • Spring Core : ν”„λ ˆμž„μ›Œν¬μ˜ κ°€μž₯ 기본적인 μš”μ†Œλ‘œ IoC(λ˜λŠ” DI-μ˜μ‘΄μ„± μ£Όμž…-)λ₯Ό μ΄μš©ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•΄μ€€λ‹€. λ‹€λ₯Έ λͺ¨λ“  κΈ°λŠ₯듀은 이제 Core μœ„μ— λ†“μ—¬μ§€κ²Œ λœλ‹€. BeanFactoryλ₯Ό 기반으둜 Bean ν΄λž˜μŠ€λ“€μ„ μ œμ–΄ν•˜λŠ” κΈ°λŠ₯을 μ§€μ›ν•œλ‹€. 
  • Spring Context : Spring Core λ°”λ‘œ 뒀에 μžˆμœΌλ©΄μ„œ Spring Coreμ—μ„œ μ§€μ›ν•˜λŠ” κΈ°λŠ₯ 외에 좔가적인 κΈ°λŠ₯κ³Ό μ’€ 더 μ‰¬μš΄ 개발이 κ°€λŠ₯ν•˜λ„λ‘ μ§€μ›ν•œλ‹€. JNDI, EJB 등을 μœ„ν•œ Adaptor듀을 ν¬ν•¨ν•œλ‹€.
  • Spring DAO : JDBC 기반 ν•˜μ˜ DAO κ°œλ°œμ„ μ’€ 더 쉽고, 더 적은 μ½”λ“œλ‘œ, μΌκ΄€λœ λ°©λ²•μœΌλ‘œ κ°œλ°œν•˜λ„λ‘ μ§€μ›ν•œλ‹€.
  • Spring ORM(Object Relation Mapping) : ORM ν”„λ ˆμž„μ›Œν¬μΈ Hibernate, iBatis, JDOμ™€μ˜ 결합을 μ§€μ›ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯. Spring ORM을 μ΄μš©ν•΄ μ΄λŸ¬ν•œ ν”„λ ˆμž„μ›Œν¬μ™€μ˜ 톡합이 μ‰¬μ›Œμ§„λ‹€.
  • Spring AOP : ν”„λ ˆμž„μ›Œν¬κ°€ 관점 지ν–₯ν˜• ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€. AOP Alliance 기반 μ•„λž˜μ—μ„œ κ°œλ°œν•œλ‹€. 이λ₯Ό μœ„ν•΄ Aspect 라이브러리λ₯Ό μ œκ³΅ν•΄μ€€λ‹€. 이 라이브러리λ₯Ό 톡해 νŠΈλžœμž­μ…˜, λ‘œκΉ…, μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§, μΊμ‹œ, λ©”μ†Œλ“œ μž¬μˆ˜ν–‰, μ˜ˆμ™Έ 처리λ₯Ό μ‰½κ²Œ ν•  수 μžˆλ‹€.
  • Spring Data : 효율적으둜 μŠ€ν”„λ§μ΄ Persistance Layer의 데이터λ₯Ό 관리할 수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•΄μ€€λ‹€.
  • Spring Messaging : λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ MSMQ 메세지 쿼리 미듀웨어와 μž‘μš©ν•  λ•Œ μΆ”μƒν™”μ˜ 단계λ₯Ό λ†’μ—¬μ£ΌλŠ” λͺ¨λ“ˆμ΄λ‹€.
    • Spring Messaging NMS : Apache ActiveMQ
    • Spring Messaging EMS : Tibco Enterprise Message Service(EMS)
  • Spring Web : μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μš”ν•œ Web Application Context와 Multipart Request λ“±μ˜ κΈ°λŠ₯을 μ§€μ›ν•œλ‹€. λ˜ν•œ, Struts, Webwork 같은 ν”„λ ˆμž„μ›Œν¬μ˜ 톡합을 μ§€μ›ν•˜λŠ” 뢀뢄을 λ‹΄λ‹Ήν•œλ‹€. ASP.NET μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž‘μ„±ν•  λ•Œ 좔상화 단계λ₯Ό λ†’μ—¬μ£ΌλŠ” λͺ¨λ“ˆμ΄λ‹€. 데이터 바인딩, μœ νš¨μ„± 검사, ASP.NET νŽ˜μ΄μ§€/컨트둀/λͺ¨λ“ˆ/provider configuration 같은 ASP.NET μ•ˆμ˜ κ³΅ν†΅μ˜ 취약점을 효율적으둜 닀루도둝 λ„μ™€μ£ΌλŠ” λͺ¨λ“ˆμ΄λ‹€.
  • Spring Web MVC : μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ λ…λ¦½μ μœΌλ‘œ Web UI Layerμ—μ„œ MVCλ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯으둜, μ§€κΈˆκΉŒμ§€ Struts, Webworkκ°€ λ‹΄λ‹Ήν–ˆλ˜ κΈ°λŠ₯듀을 Spring Web MVCλ₯Ό μ΄μš©ν•΄ λŒ€μ²΄ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€. λ˜ν•œ, Velocity, Excel, PDF와 같은 λ‹€μ–‘ν•œ UI κΈ°μˆ μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•œ API도 μ œκ³΅ν•œλ‹€. Spring Core와 Spring AOP λͺ¨λ“ˆμ„ ASP.NET MVC 2 ν”„λ‘œμ νŠΈ μ•ˆμ—μ„œ κΈ°λŠ₯적으둜 잘 ν†΅ν•©λ˜λ„λ‘ λ„μ™€μ£ΌλŠ” λͺ¨λ“ˆμ΄λ‹€.
  • Spring Testing JUnit : JUnit과의 ν…ŒμŠ€νŠΈ 톡합을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ λͺ¨λ“ˆμ΄λ‹€.
  • Spring Scheduling Quartz : Quartz.NET job μŠ€μΌ€μ₯΄λŸ¬ 인프라와 μž‘μš©ν•˜λŠ” 것을 μ§€μ›ν•˜λŠ” λͺ¨λ“ˆμ΄λ‹€.

이런 λͺ¨λ“ˆμ„ 보면 μŠ€ν”„λ§μ΄ λ‹¨μˆœνžˆ 웹을 λ§Œλ“€κΈ° μœ„ν•œ λͺ©μ μ΄λΌκΈ°λ³΄λ‹€λŠ” μ˜μ‘΄μ„± μ£Όμž…μ„ μ΄μš©ν•΄ Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 있게 λ„μ™€μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬μΈ 것을 확인할 수 μžˆλ‹€. 여기에 μΆ”κ°€μ μœΌλ‘œ μ›Ή MVC λͺ¨λ“ˆμ„ μ œκ³΅ν•΄ μ›Ή 앱을 효과적으둜 λ§Œλ“€ 수 있게 λ„μ™€μ£ΌλŠ” 것이닀.

 

참고자료

Spring Framework κΈ°λ³Έ κ°œλ… 

Spring μ •μ˜ 및 νŠΉμ§• 정리