[πŸ“° μœ„ν΄λ¦¬νŽ˜μ΄νΌ ] Spring Framework?

han91Β·2026λ…„ 1μ›” 26일

[μœ„ν΄λ¦¬νŽ˜μ΄νΌ]

λͺ©λ‘ 보기
4/11

πŸ“Œ Spring Framework

🧐 탄생 λ°°κ²½

2000λ…„λŒ€ 초반 μžλ°” μ—”ν„°ν”„λΌμ΄μ¦ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ€ EJB(Enterprise JavaBeans) 쀑심
λ‹Ήμ‹œ EJBλŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ°μ—λŠ” κΈ°λŠ₯이 많고 κ°•λ ₯ν–ˆμ§€λ§Œ, μ‹€μ œ ν˜„μ—…μ—μ„œλŠ” μ—¬λŸ¬ μ‹¬κ°ν•œ λ¬Έμ œλ“€μ΄ μžˆμ—ˆμŒ
-> Spring은 β€œEJB 없이도 μ—”ν„°ν”„λΌμ΄μ¦ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ‹€β€λŠ” μ² ν•™μ—μ„œ 좜발

  1. IoC / DI (μ œμ–΄μ˜ μ—­μ „, μ˜μ‘΄μ„± μ£Όμž…)
  • 객체가 직접 의쑴 λŒ€μƒμ„ μƒμ„±ν•˜μ§€ μ•Šκ³ , μ™ΈλΆ€(Spring μ»¨ν…Œμ΄λ„ˆ) μ—μ„œ μ£Όμž…λ°›λ„λ‘ 섀계
  • κ²°κ³Ό: 결합도 κ°μ†Œ, κ΅¬ν˜„μ²΄ ꡐ체 용이, ν…ŒμŠ€νŠΈ μ‰¬μ›Œμ§ (Mock 객체 μ‚¬μš© κ°€λŠ₯)
  1. POJO 기반 개발
  • νŠΉμ • ν”„λ ˆμž„μ›Œν¬λ₯Ό μƒμ†ν•˜κ±°λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ 됨
  • 순수 μžλ°” 객체(POJO)둜 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μž‘μ„± κ°€λŠ₯
  • ν”„λ ˆμž„μ›Œν¬μ— 덜 쒅속적인 μ½”λ“œ μž‘μ„± κ°€λŠ₯
  1. AOP (관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°)
  • νŠΈλžœμž­μ…˜, λ‘œκΉ…, λ³΄μ•ˆ 같은 νš‘λ‹¨ 관심사λ₯Ό 뢄리
  • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ€ 핡심 κΈ°λŠ₯μ—λ§Œ 집쀑 κ°€λŠ₯
  1. κ²½λŸ‰ μ»¨ν…Œμ΄λ„ˆ
  • EJB μ»¨ν…Œμ΄λ„ˆμ— λΉ„ν•΄ 훨씬 가볍고 섀정이 λ‹¨μˆœ
  • ν•„μš”ν•œ κΈ°λŠ₯만 μ„ νƒμ μœΌλ‘œ μ‚¬μš© κ°€λŠ₯

πŸ“Œ Framework vs 라이브러리

🧐 ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리 차이

ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λͺ¨λ‘ κ°œλ°œμ„ λ•λŠ” λ„κ΅¬μ΄μ§€λ§Œ, μ œμ–΄ νλ¦„μ˜ 주체와 μ‚¬μš© λ°©μ‹μ—μ„œ 본질적인 차이가 있음

1️⃣ μ œμ–΄ νλ¦„μ˜ 주체

라이브러리

  • μ œμ–΄ νλ¦„μ˜ μ£Όμ²΄λŠ” 개발자
  • κ°œλ°œμžκ°€ ν•„μš”ν•œ μ‹œμ μ— 라이브러리의 κΈ°λŠ₯을 직접 호좜
  • ν”„λ‘œκ·Έλž¨μ˜ 전체 흐름은 κ°œλ°œμžκ°€ μ„€κ³„ν•˜κ³  관리

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

  • μ œμ–΄ νλ¦„μ˜ μ£Όμ²΄λŠ” ν”„λ ˆμž„μ›Œν¬
  • κ°œλ°œμžλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ •ν•œ κ·œμΉ™μ— 따라 μ½”λ“œλ₯Ό μž‘μ„±
  • ν”„λ ˆμž„μ›Œν¬κ°€ ν•„μš”ν•  λ•Œ 개발자의 μ½”λ“œλ₯Ό 호좜
    β†’ 이λ₯Ό μ œμ–΄μ˜ μ—­μ „(Inversion of Control, IoC) 이라고 함

2️⃣ μ‚¬μš© λ°©μ‹μ˜ 차이

라이브러리의 μ‚¬μš© 방식

  • ν•„μš”ν•œ κΈ°λŠ₯만 μ„ νƒμ μœΌλ‘œ μ‚¬μš©
  • μ½”λ“œμ— μžμœ λ„κ°€ λ†’κ³  μ œμ•½μ΄ 적음
  • 전체 ꡬ쑰λ₯Ό κ°•μ œν•˜μ§€ μ•ŠμŒ

ν”„λ ˆμž„μ›Œν¬μ˜ μ‚¬μš© 방식

  • μ •ν•΄μ§„ ꡬ쑰와 생λͺ…μ£ΌκΈ°(lifecycle)λ₯Ό 따름
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΌˆλŒ€λ₯Ό 제곡
  • κ°œλ°œμžλŠ” β€œμ–΄λ””μ— 무엇을 κ΅¬ν˜„ν• μ§€β€λ₯Ό ν”„λ ˆμž„μ›Œν¬ κ·œμΉ™μ— 맞좰 μž‘μ„±

πŸ” μ˜ˆμ‹œλ₯Ό ν†΅ν•œ μ„€λͺ…

일반 Java 라이브러리 μ˜ˆμ‹œ

예λ₯Ό λ“€μ–΄, java.util.List λ‚˜ Collections 같은 Java 라이브러리λ₯Ό μ‚¬μš©ν•˜λŠ” 경우:
κ°œλ°œμžκ°€ 직접 객체λ₯Ό μƒμ„±ν•˜κ³  ν•„μš”ν•œ λ©”μ„œλ“œλ₯Ό μ›ν•˜λŠ” μ‹œμ μ— 호좜

List<String> list = new ArrayList<>();
Collections.sort(list);

β†’ 흐름은 κ°œλ°œμžκ°€ μ œμ–΄ν•˜λ©°, λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ‹¨μˆœνžˆ κΈ°λŠ₯을 μ œκ³΅ν•  뿐이닀.

Spring Framework μ˜ˆμ‹œ

Spring FrameworkλŠ” λŒ€ν‘œμ μΈ ν”„λ ˆμž„μ›Œν¬
객체 생성과 μ˜μ‘΄μ„± 관리λ₯Ό κ°œλ°œμžκ°€ μ•„λ‹Œ Spring μ»¨ν…Œμ΄λ„ˆκ°€ λ‹΄λ‹Ή
κ°œλ°œμžλŠ” @Component, @Service, @Controller λ“±μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•΄ μ—­ν• λ§Œ μ •μ˜

@Service
public class UserService {
}

μ‹€μ œ 객체 생성 μ‹œμ κ³Ό 호좜 흐름은 Spring이 관리
β†’ κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹ˆλΌ, Spring이 개발자의 μ½”λ“œλ₯Ό ν˜ΈμΆœν•¨

profile
μ²œλ°©μ§€μΆ•μ–΄λ¦¬λ‘₯μ ˆλΉ™κΈ€λΉ™κΈ€λŒμ•„κ°€λŠ”κ°œλ°œμž

0개의 λŒ“κΈ€