1 λΆ„ μ†Œμš”

πŸ“˜ μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λž€?

ν•œλΉ›μ•„μΉ΄λ°λ―Έ-짧고 ꡴게 λ°°μš°λŠ” JSPμ›Ή ν”„λ‘œκ·Έλž˜λ°κ³Ό μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ°Έκ³ ν•˜μ—¬ μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. (학ꡐ μˆ˜μ—… κ΅μž¬μž…λ‹ˆλ‹€.)

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λŠ” μžλ°” 기반의 μ˜€ν”ˆμ†ŒμŠ€ ν”„λ ˆμž„μ›Œν¬μ΄λ‹€. Java EEμ—μ„œ μš”κ΅¬ν•˜λŠ” μˆ˜μ€€μ˜ λ³΅μž‘ν•œ κΈ°λŠ₯을 Java EEλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ‘Œλ‹€.

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

λ¨Όμ € ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•΄μ„œ μ•Œκ³  κ°€λ©΄ 쒋을 것 κ°™μ•˜λ‹€.
ν”„λ ˆμž„μ›Œν¬μ™€ λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μƒλ‹Ήνžˆ λΉ„μŠ·ν•˜λ‹€.
image

1-1. ν”„λ ˆμž„μ›Œν¬

Framework(ν”„λ ˆμž„μ›Œν¬)λž€ λΌˆλŒ€λ‚˜ 기반ꡬ쑰λ₯Ό λœ»ν•˜λ©°, μ œμ–΄μ˜ μ—­ν–‰κ°œλ…μ΄ 적용된 κΈ°μˆ μ΄λ‹€.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 μ‹œ ν•„μˆ˜μ μΈ μ½”λ“œ, DB 연동과 같은 κΈ°λŠ₯듀을 μ–΄λŠ 정도 λΌˆλŒ€λ₯Ό μ œκ³΅ν•˜μ—¬ νŽΈλ¦¬ν•˜κ²Œ κ°œλ°œμ„ ν•  수 있게 λ„μ™€μ£ΌλŠ” 도ꡬ이닀.
ν”„λ ˆμž„μ›Œν¬λŠ” 맀우 λ‹€μ–‘ν•˜κ²Œ μ‘΄μž¬ν•œλ‹€.

[μ˜ˆμ‹œ]

μ–Έμ–΄ ν”„λ ˆμž„μ›Œν¬
Java Spring
Python Django
Python Flask
python FastAPI
Ruby Ruby on Rails
JS Node.js

1-2. 라이브러리

λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ°œλ°œν•  λ•Œ 컴퓨터 ν”„λ‘œκ·Έλž¨μ΄ μ‚¬μš©ν•˜λŠ” λΉ„νœ˜λ°œμ„± μžμ›μ˜ λͺ¨μž„μœΌλ‘œ, νŠΉμ • κΈ°λŠ₯을 λͺ¨μ•„놓은 μ½”λ“œ, ν•¨μˆ˜λ“€μ˜ 집합이닀.
μ΄λŸ¬ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ€ μ½”λ“œ μž‘μ„± μ‹œμ— ν™œμš© κ°€λŠ₯ν•œ 도ꡬ듀이닀.

[μ˜ˆμ‹œ]

μ–Έμ–΄ 라이브러리
Python pipλͺ…λ Ήμ–΄λ‘œ μ„€μΉ˜ν•œ νŒ¨ν‚€μ§€/λͺ¨λ“ˆ
C++ ν‘œμ€€ν…œν”Œλ¦Ώ 라이브러리인 STL
JS React.js
JS Node.jsμ—μ„œ npm으둜 μ„€μΉ˜ν•œ λͺ¨λ“ˆ

λ¦¬μ—‘νŠΈλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•œ JavaScript λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€.
image

1-3. ν”„λ ˆμž„μ›Œν¬μ™€ 라이브러리의 차이

이 λ‘˜μ˜ 차이점을 λ³Ό λ•Œ 관건은 μ œμ–΄ νλ¦„μ˜ κΆŒν•œμ΄λ‹€.
라이브러리λ₯Ό μ‚¬μš©ν•  λ•Œ μ‚¬μš©μžλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ˜ 흐름을 β€˜μ§μ ‘ μ œμ–΄β€™ν•΄μ•Ό ν•œλ‹€.
반면 ν”„λ ˆμž„μ›Œν¬λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ½”λ“œκ°€ ν”„λ ˆμž„μ›Œν¬μ— μ˜ν•΄ λ™μž‘λ˜λ―€λ‘œ β€˜μˆ˜λ™μ μœΌλ‘œ λ™μž‘β€™ν•œλ‹€.


2. μŠ€ν”„λ§μ˜ νŠΉμ§•

  • κ²½λŸ‰ μ»¨ν…Œμ΄λ„ˆ
    • 객체 생성, μ†Œλ©Έκ³Ό 같은 생λͺ… μ£ΌκΈ° 관리
    • μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ‘œλΆ€ν„° ν•„μš”ν•œ 객체λ₯Ό μ–»μ–΄μ˜¬ 수 있음
  • μ œμ–΄μ˜ μ—­ν–‰ 지원 (Inversion of Control - IoC)
    • λ©”μ„œλ“œλ‚˜ 객체의 호좜 μ œμ–΄κΆŒμ΄ μ‚¬μš©μžκ°€ μ•„λ‹ˆλΌ ν”„λ ˆμž„μ›Œν¬μ— μžˆμ–΄μ„œ ν•„μš”μ— 따라 μŠ€ν”„λ§μ—μ„œ μ‚¬μš©μžμ˜ μ½”λ“œ 호좜 κ°€λŠ₯
  • μ˜μ‘΄μ„± μ£Όμž… (Dependency Injection - DI)
    • 각각의 κ³„μΈ΅μ΄λ‚˜ μ„œλΉ„μŠ€ 간에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•  경우 ν”„λ ˆμž„μ›Œν¬κ°€ μ„œλ‘œ μ—°κ²°
  • 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ° 지원 (Aspect Object Programming - AOP)
    • νŠΈλžœμž­μ…˜μ΄λ‚˜ λ‘œκΉ…, λ³΄μ•ˆκ³Ό 같이 μ—¬λŸ¬ λͺ¨λ“ˆμ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯의 경우 ν•΄λ‹Ή κΈ°λŠ₯을 λΆ„λ¦¬ν•˜μ—¬ 관리
  • POJO(Plain Old Java Object) 방식
    • λ³„λ„μ˜ ν”„λ ˆμž„μ›Œν¬ 없이 Java EEλ₯Ό μ‚¬μš©ν•  λ•Œμ— λΉ„ν•΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 직접 κ΅¬ν˜„ν•˜κ±°λ‚˜ 상속받을 ν•„μš”κ°€ μ—†μ–΄ κΈ°μ‘΄ 라이브러리λ₯Ό μ§€μ›ν•˜κΈ° μš©μ΄ν•˜κ³  객체가 가벼움
    • 즉, getter/setterλ₯Ό 가진 λ‹¨μˆœν•œ μžλ°” 객체λ₯Ό 말함

2-1. μŠ€ν”„λ§λΆ€νŠΈλž€?

μŠ€ν”„λ§λΆ€νŠΈ(Spring Boot)λž€ μŠ€ν”„λ§μ˜ λŒ€ν‘œμ μΈ ν”„λ‘œμ νŠΈ λͺ¨λΈ 쀑 ν•˜λ‚˜μΈλ°, 기쑴의 μŠ€ν”„λ§λ³΄λ‹€ κ°„νŽΈν•˜κ²Œ μŠ€ν”„λ§ ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

κΈ°μ‘΄ μŠ€ν”„λ§μ€ μ‹œμž‘ λ‹¨κ³„μ—μ„œ 초기 μ„€μ •, μ˜μ‘΄μ„± λ“±μ˜ μ΄ˆλ³΄μžλ“€μ—κ²ŒλŠ” λ‹€μ†Œ μ–΄λ €μšΈ 수 μžˆλŠ” 뢀뢄듀이 μ‘΄μž¬ν•˜μ§€λ§Œ, μŠ€ν”„λ§λΆ€νŠΈμ—μ„œλŠ” 이λ₯Ό μžλ™μ μœΌλ‘œ ν•΄κ²°ν•΄μ£Όμ–΄ 보닀 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€.

λ˜ν•œ ν†°μΊ£, μ œν‹°μ™€ 같은 WAS λ‚΄μž₯, λ³„λ„μ˜ μ›Ή μ„œλ²„ μ„€μΉ˜λ‚˜ μ‹€ν–‰ 없이 μŠ€ν”„λ§λΆ€νŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” κ²ƒμœΌλ‘œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ동이 κ°€λŠ₯ν•˜λ‹€.

νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°