Spring Framework: Spring의 탄생

IToriginalΒ·2023λ…„ 5μ›” 29일
0

남정넀듀: Web Study

λͺ©λ‘ 보기
3/7
post-thumbnail

Spring Framework의 역사

Spring μΆœμƒμ˜ λΉ„λ°€?

Spring이 νƒ„μƒν•˜κΈ° μ΄μ „μ—λŠ” EJB(Enterprise Java Bean)κ°€ Java μ§„μ˜μ˜ λŒ€ν‘œκΈ°μˆ μ΄μ˜€λ‹€. ν•˜μ§€λ§Œ EJBλŠ” μ—¬λŸ¬ λ¬Έμ œμ μ„ 가지고 μžˆμ—ˆλ‹€. ν•œ κ°œλ°œμžλŠ” EJB의 λ¬Έμ œμ μ„ μ§€μ ν•˜λ©° λŒ€μ²΄ λ°©μ•ˆμ„ μ†ŒμŠ€μ½”λ“œλ‘œ μž‘μ„±ν•˜μ—¬ 책을 μΆœκ°„ν–ˆλ‹€. 이 책을 λ³Έ λ‹€λ₯Έ κ°œλ°œμžλ“€ λͺ‡λͺ‡μ΄ λͺ¨μ˜€κ³  μ˜€ν”ˆμ†ŒμŠ€ν™”ν•˜λ©΄μ„œ Spring이 νƒ„μƒλ˜μ—ˆλ‹€.

✨ EJB(Enterprise Java Bean)

μŠ€ν”„λ§, JPA λ“±λ“±μ˜ κΈ°λŠ₯듀이 λͺ¨λ‘ λ‹€ 합쳐진 것이닀. μžλ°” ν‘œμ€€ κΈ°μˆ μ΄μ—ˆκΈ° λ•Œλ¬Έμ— κ΄‘λ²”μœ„ν•˜κ²Œ 보급될 수 μžˆμ—ˆκ³  μΈμŠ€ν„΄μŠ€ 풀링, 섀정에 μ˜ν•œ νŠΈλžœμž­μ…˜ 처리 λ“±μ˜ κ³ κΈ‰ κΈ°μˆ λ“€μ„ μ§€μ›ν•˜μ˜€κΈ° λ•Œλ¬Έμ— 금육ꢌ 같은 λΆ„μ•Όμ—μ„œ 널리 μ‚¬μš©λ˜μ—ˆλ‹€.

EJBλŠ” λ‹€μŒ κΈ°μˆ μ„ μ§€μ›ν•˜λ©° κΈ°μ—…μš© μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ λ‹¨μˆœν•˜κ²Œ ν•˜λ € ν–ˆλ‹€.

  • νŠΈλžœμž­μ…˜ 관리
  • μ„Έμ…˜ 관리
  • EJB μΈμŠ€ν„΄μŠ€ 풀링
  • 지속성
  • λ³΄μ•ˆ
  • 병렬 처리
  • λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ 풀링
  • 인증과 μ ‘κ·Ό μ œμ–΄

ν•˜μ§€λ§Œ, EJB ν”„λ ˆμž„μ›Œν¬λŠ” λ„ˆλ¬΄ λ³΅μž‘ν•˜κ³  λ‚œν•΄ν–ˆκ³ , 심지어 무겁고 λŠλ¦¬κΈ°κΉŒμ§€ ν–ˆλ‹€. κ·Έλž˜μ„œ 점점 λ§Žμ€ κ°œλ°œμžλ“€μ—κ²Œ μ™Έλ©΄λ‹Ήν•˜κ²Œ λ˜μ—ˆλ‹€.

μ•„λž˜λŠ” EJB ν”„λ ˆμž„μ›Œν¬μ˜ λͺ‡κ°€μ§€ λ¬Έμ œμ μ΄λ‹€.

  • 객체 지ν–₯적 개발 λΆˆκ°€λŠ₯
    ν”„λ ˆμž„μ›Œν¬ νŒ¨ν‚€μ§€μ— μ†ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°œλ°œμ„ ν•΄μ•Όν–ˆλŠ”λ°, 이 μΈν„°νŽ˜μ΄μŠ€κ°€ μ„œλ‘œ μ˜μ‘΄ν•˜κ³  있기 λ•Œλ¬Έμ— μœ μ§€ λ³΄μˆ˜κ°€ μ–΄λ ΅κ³  ν™•μž₯성이 λ–¨μ–΄μ Έ JavaλΌλŠ” 객체 지ν–₯ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ 객체 지ν–₯의 μž₯점을 μ΄μš©ν•˜μ§€ λͺ»ν•˜μ˜€λ‹€.
  • 기술 침투 ν˜„μƒ
    νŠΉμ • κΈ°μˆ μ— ν•œμ •μ μΈ λ³΅μž‘ν•œ κ°œλ…λ“€μ„ μ΄ν•΄ν•΄μ•Όν–ˆλ‹€. ν”„λ‘œμ νŠΈ μžμ²΄κ°€ κΈ°μˆ μ— μ’…μ†λ˜λŠ” 기술 침투 ν˜„μƒμ΄ λ°œμƒν–ˆλ‹€.
  • λΆˆν•„μš”ν•œ κ΅¬ν˜„
    ν•„μš”ν•˜μ§€ μ•Šλ”λΌλ„ λͺ‡λͺ‡μ˜ 콜백 ν•¨μˆ˜λ“€μ„ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Όν–ˆλ‹€.
  • 무거운 μ›Ή μ„œλ²„ μ‚¬μš©
    EJB μ»¨ν…Œμ΄λ„ˆλŠ” JBoss, Websphere, Weblogicκ³Ό 같은 μ„œλ²„μ˜ μΌλΆ€λΆ„μ—ˆλ‹€. ν•˜μ§€λ§Œ, Apache Tomcatκ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ ꡉμž₯히 무거운 μ„œλ²„λ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ 어렀움
    EJB μ»¨ν…Œμ΄λ„ˆ λ°–μ—μ„œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 것은 거의 λΆˆκ°€λŠ₯ν–ˆκΈ° λ•Œλ¬Έμ— λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ 전체 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ»¨ν…Œμ΄λ„ˆμ— 배포해야 ν–ˆλ‹€.

✨ POJO의 탄생

λ§ˆν‹΄ 파울러(Martin Fowler)κ°€ 컨퍼런슀λ₯Ό μ€€λΉ„ν•˜λ‹€ νƒ„μƒν•œ POJO(Plain Old Java Object)λΌλŠ” μš©μ–΄λŠ” λ‹¨μ–΄μ˜ 뜻 κ·ΈλŒ€λ‘œ μˆœμˆ˜ν•˜κ³  였래된 μžλ°” 였브젝트 λ₯Ό 지ν–₯ν•œλ‹€λŠ” 의미λ₯Ό 가지고 μžˆλ‹€. 이 λ©”μ‹œμ§€λŠ” μžλ°”κ°€ νŠΉμ • ν”„λ ˆμž„μ›Œν¬μ— μ’…μ†λ˜λŠ” νŒ¨ν„΄μ„ κ·Ήλ³΅ν•˜κ³  μˆœμˆ˜ν•œ 본래 ν˜•νƒœλ‘œ λŒμ•„κ°€μ•Ό ν•œλ‹€λŠ” EJBλ₯Ό 겨λƒ₯ν•˜κ³  개혁적인 메세지λ₯Ό λ‹΄κ³  μžˆμ—ˆλ‹€.

✨ Spring의 탄생

λ‘œλ“œ 쑴슨(Rod Johnson)은 EJB의 λ¬Έμ œμ μ„ μ§€μ ν•˜κ³  EJB 없이 μˆœμˆ˜ν•œ μžλ°”λ§ŒμœΌλ‘œλ„ 쒋은 객체지ν–₯ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  수 μžˆλ‹€λŠ” 것을 λ³΄μ—¬μ£Όμ—ˆλ‹€. κ·ΈλŠ” 3λ§Œμ—¬ μ€„μ˜ μ½”λ“œλ₯Ό 세상에 κ³΅κ°œν–ˆλŠ”λ° κ·Έ μ½”λ“œλŠ” ν˜„μž¬ μŠ€ν”„λ§μ˜ 좕을 μ΄λ£¨λŠ” 핡심 κΈ°λŠ₯의 λͺ¨μ²΄κ°€ λ˜μ—ˆλ‹€. 이후, 겐 휠러(Juergen Hoeller)와 μ–€ μΉ΄λ‘œν”„(Yann Caroff)κ°€ λ‘œλ“œ μ‘΄μŠ¨μ—κ²Œ μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈλ₯Ό μ œμ•ˆν•˜κ²Œ λ˜λ©΄μ„œ μŠ€ν”„λ§ ν”„λ ˆμž„ μ›Œν¬κ°€ νƒ„μƒν•˜κ²Œ λœλ‹€.

Spring의 μ‹œλŒ€

μŠ€ν”„λ§μ€ 맀우 λ°©λŒ€ν•˜κ³  크닀. μŠ€ν”„λ§μ€ 일반적으둜 3κ°€μ§€μ˜ ν‘œν˜„ 쀑 ν•˜λ‚˜λ‘œ μ‚¬μš©λœλ‹€.

  • μŠ€ν”„λ§ DI μ»¨ν…Œμ΄λ„ˆ 기술
  • μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬
  • μŠ€ν”„λ§ μƒνƒœκ³„

μ‹€μ œλ‘œ μŠ€ν”„λ§ 곡식 ν™ˆνŽ˜μ΄μ§€μ— μ ‘μ†ν•˜κ²Œ 되면 μŠ€ν”„λ§ μ•ˆμ—λŠ” 정말 λ§Žμ€ ν”„λ‘œμ νŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€.
μŠ€ν”„λ§μ€ λ‹¨μˆœνžˆ ν”„λ ˆμž„μ›Œν¬λΌκ³  ν‘œν˜„ν•˜κΈ°λ„ ν•˜μ§€λ§Œ μŠ€ν”„λ§ λΆ€νŠΈ, μŠ€ν”„λ§ 데이터, μŠ€ν”„λ§ μ„Έμ…˜, μŠ€ν”„λ§ μ‹œνλ¦¬ν‹° λ“± μŠ€ν”„λ§μ„ κ΅¬μ„±ν•˜λŠ” 수 λ§Žμ€ μƒνƒœκ³„λ₯Ό μ˜λ―Έν•˜κΈ°λ„ ν•œλ‹€.

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ μŠ€ν”„λ§μ˜ 탄생 λ°°κ²½μ—λŒ€ν•΄μ„œ 정리해보면 EJBλ₯Ό μ‹œμž‘μœΌλ‘œ 순수 μžλ°”λ‘œ λŒμ•„κ°€κΈ° μœ„ν•œ POJOκ°€ νƒ„μƒλ˜κ³ , κ·Έ κΈ°λ°˜μ„ 톡해 μŠ€ν”„λ§μ΄ νƒ„μƒν–ˆλ‹€.
즉, μŠ€ν”„λ§μ€ μžλ°” μ–Έμ–΄ 기반의 ν”„λ ˆμž„ μ›Œν¬ 이닀.

μžλ°”λ₯Ό κ³΅λΆ€ν•˜λ©΄ κ°€μž₯ μ²˜μŒμ— λ“£κ²Œ λ˜λŠ” κ°œλ…μ΄ μžˆλŠ”λ°, λ°”λ‘œ,
μžλ°” μ–Έμ–΄λŠ” 객체 지ν–₯ μ–Έμ–΄λΌλŠ” 것이닀. μŠ€ν”„λ§μ€ λ‹€ν˜•μ„± , μΊ‘μŠν™” , 좔상화 , 상속성 같은 μžλ°” μ–Έμ–΄μ˜ νŠΉμ§•μ„ 잘 살렀쀄 수 μžˆλŠ” ν”„λ ˆμž„ μ›Œν¬μΈ 것이닀.
즉, POJO의 νλ¦„λŒ€λ‘œ μˆœμˆ˜ν•œ μžλ°”μ˜ λͺ¨μ–‘λŒ€λ‘œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” νˆ΄μ΄λΌλŠ” 것이닀.

✨ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό μŠ€ν”„λ§μ˜ μ—°κ΄€μ„±

객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ 핡심은 μ½”λ“œμ˜ 일뢀뢄을 μΆ”μΆœν•΄ λͺ¨λ“ˆν™” ν•  수 μžˆλ‹€.
예λ₯Ό λ“€μ–΄ 레고 λΈ”λŸ­μ„ μ‘°λ¦½ν•˜λŠ” κ²ƒμ²˜λŸΌ νŠΉμ • λ‘œμ§λ“€μ„ λ‚˜λˆ  λͺ¨λ“ˆν™”λ₯Ό ν•˜κ³  λ‚˜μ€‘μ— 쑰립을 ν•˜λŠ” 방식이닀.
이둜 μΈν•΄μ„œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ€ μ½”λ“œκ°„ μ˜μ‘΄μ μ΄κ±°λ‚˜ 쒅속적이지 μ•Šκ²Œ 섀계할 수 μžˆλŠ”λ° μ΄λŠ” λŒ€κ·œλͺ¨μ˜ μž‘μ—…μ„ ν•˜κΈ° μš©μ΄ν•˜λ‹€. (역할을 λ‚˜λˆ  각자 맑은 뢀뢄을 κ°œλ°œν•˜λ©΄ 되기 λ•Œλ¬Έ)

✨ μŠ€ν”„λ§μ΄ 유λͺ…해진 이유

μŠ€ν”„λ§μ€ μ˜μ‘΄μ„± μ£Όμž…(DI) , μ œμ–΄μ˜ μ—­μ „(IoC) λΌλŠ” κΈ°λŠ₯듀을 ν™œμš©ν•΄ λ‹€ν˜•μ„± 을 μ‚΄λ¦° ν”„λ‘œκ·Έλž˜λ°μ„ λ„μšΈ 수 μžˆλ‹€. 이게 μŠ€ν”„λ§μ΄ 유λͺ…해진 핡심적인 μ΄μœ μ΄λ‹€.

μŠ€ν”„λ§μ€ DI와 IoC 등을 톡해 SOLID 원칙을 μœ„λ°°ν•˜μ§€ μ•Šλ„λ‘ 도와쀀닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ•„μ§κΉŒμ§€ λ§Žμ€ λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ μŠ€ν”„λ§μ„ μ‚¬μš©ν•˜κ³  μžˆλŠ” 것이닀.

SOLID

ν΄λ¦°μ½”λ“œλ‘œ 유λͺ…ν•œ λ‘œλ²„νŠΈ λ§ˆν‹΄μ΄ 쒋은 객체 지ν–₯ μ„€κ³„μ˜ 5가지 원칙을 μ •λ¦¬ν–ˆλ‹€.

  • SRP: 단일 μ±…μž„ 원칙
  • OCP: 개방-폐쇄 원칙
  • LSP: λ¦¬μŠ€μ½”ν”„ μΉ˜ν™˜ 원칙
  • ISP: μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙
  • DIP: μ˜μ‘΄κ΄€κ³„ μ—­μ „ 원칙
μžμ„Έν•œ λ‚΄μš©μ€ 링크 μ°Έμ‘°(λ…Έμ…˜): 쒋은 객체 지ν–₯ μ„€κ³„μ˜ 5가지 원칙(SOLID)

μΆ”κ°€: JPA(Java Persistence API) 탄생 λ°°κ²½

JPAλŠ” Java μ§„μ˜μ˜ ν‘œμ€€ ORM 기술인데, ν˜„μž¬ 널리 쓰이고 μžˆλŠ” Hibernateκ°€ JPA κ΅¬ν˜„μ²΄ 쀑 ν•˜λ‚˜μ΄λ‹€.

Spring 이전에 EJBκ°€ μžˆμ—ˆλ‹€λ©΄, Hibernate μ΄μ „μ—λŠ” Entity Bean이 μžˆμ—ˆλ‹€. Entity Bean은 EJBκ°€ μ§€μ›ν•˜λŠ” κΈ°λŠ₯ 쀑 ν•˜λ‚˜μ˜€λŠ”λ° 이 λ˜ν•œ 지μ˜₯μ΄μ—ˆλŠ”μ§€ ν•œ κ°œλ°œμžκ°€ μ•žμž₯ μ„œμ„œ HibernateλΌλŠ” λŒ€μ•ˆμ„ λ‚΄λ†“μ•˜λ‹€. JPAλŠ” Hibernateλ₯Ό 거의 볡사+λΆ™μ—¬λ„£κΈ° ν•΄μ„œ λ§Œλ“€μ—ˆλ‹€κ³  해도 과언이 μ•„λ‹λ§ŒνΌ λ§Žμ€ λΆ€λΆ„ μ°Έκ³ ν•˜μ—¬ λ§Œλ“  ν‘œμ€€ μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.


Reference

πŸ“Ί κΉ€μ˜ν•œλ‹˜μ˜ μŠ€ν”„λ§ 핡심 원리 - 기본편
πŸ‘¨πŸ»β€πŸ’» 개발자 μ„μ΄λ‹˜μ˜ λΈ”λ‘œκ·Έ
πŸ‘¨πŸ»β€πŸ’» μœ μ§„λ‹˜μ˜ 기술 λΈ”λ‘œκ·Έ

profile
πŸ‘ΎISTP의 개발자 λ„μ „κΈ°πŸ§

0개의 λŒ“κΈ€