Spring

[Spring] MVC 1편 (1) - μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 이해

Sue 2022. 3. 28. 22:35

πŸ“Œ μ›Ή μ„œλ²„ (Web Server)

  • HTTP 기반으둜 λ™μž‘ν•œλ‹€.
  • 정적 λ¦¬μ†ŒμŠ€ 제곡 + 기타 λΆ€κ°€κΈ°λŠ₯
  • 정적 HTML, CSS, JS, 이미지, μ˜μƒ 등을 주고받을 수 있음
  • e.g. NGINX, APACHE

 

πŸ“Œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„ (WAS - Web Application Server)

  • HTTP 기반으둜 λ™μž‘ν•œλ‹€.
  • μ›Ήμ„œλ²„μ˜ κΈ°λŠ₯ + @ (정적 λ¦¬μ†ŒμŠ€ 제곡 κ°€λŠ₯)
  • ν”„λ‘œκ·Έλž¨ μ½”λ“œλ₯Ό μ‹€ν–‰ν•΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‘œμ§μ„ μˆ˜ν–‰ν•  수 있음
  • 동적 HTML, HTTP API (JSON)
  • μ„œλΈ”λ¦Ώ, JSP, μŠ€ν”„λ§ MVC 기술 μ‚¬μš©
  • e.g. Tomcat, Jetty, Undertow

 

→ μ°¨μ΄λŠ” μ›Ή μ„œλ²„λŠ” 정적 λ¦¬μ†ŒμŠ€(파일)을 μ „λ‹¬ν•˜κ³ , WASλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ μˆ˜ν–‰ν•œλ‹€λŠ” 것이닀.

 

πŸ“Œ 일반적인 μ›Ή μ‹œμŠ€ν…œ ꡬ성 - Web Server, WAS, DB

  • 정적 λ¦¬μ†ŒμŠ€λŠ” μ›Ή μ„œλ²„κ°€ 처리 (μ•žμ— μœ„μΉ˜)
  • μ›Ή μ„œλ²„λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§κ°™μ€ 동적인 μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ©΄ WAS에 μš”μ²­μ„ μœ„μž„
  • WASλŠ” μ€‘μš”ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ μ „λ‹΄ν•  수 있음

 

βœ… WEB, WAS κ΅¬μ„±μ˜ μž₯점

  • μ΄λŸ¬ν•œ μ‹œμŠ€ν…œ ꡬ성은 정적 λ¦¬μ†ŒμŠ€κ°€ 많이 μ‚¬μš©λ˜λ©΄ μ›Ή μ„œλ²„λ₯Ό μ¦μ„€ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ¦¬μ†ŒμŠ€κ°€ 많이 μ‚¬μš©λ˜λ©΄ WASλ₯Ό μ¦μ„€ν•˜λŠ” μ‹μœΌλ‘œ 각각 관리할 수 μžˆλ‹€.
  • 정적 λ¦¬μ†ŒμŠ€λ§Œ μ œκ³΅ν•˜λŠ” μ›Ή μ„œλ²„λŠ” 잘 μ£½μ§€ μ•Šκ³ , 둜직이 λ™μž‘ν•˜λŠ” WAS μ„œλ²„λŠ” 잘 μ£½λŠ”λ° μ΄λ•Œ WAS, DB μž₯μ• μ‹œ μ›Ή μ„œλ²„κ°€ 였λ₯˜ν™”면을 μ œκ³΅ν•΄μ€„ 수 있음

 

πŸ“Œ μ„œλΈ”λ¦Ώ (Servlet) 

  • μ†ŒμΌ“ μ—°κ²°, HTTP 기반으둜 λ“€μ–΄μ˜¨ 데이터λ₯Ό νŒŒμ‹±, 응닡 λ©”μ„Έμ§€λ‘œ μ „λ‹¬ν•΄μ£ΌλŠ” λ“±μ˜ 역할을 ν•œλ‹€
  • κ°œλ°œμžλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 λΆ€λΆ„λ§Œ μž‘μ„±ν•΄μ£Όλ©΄ λœλ‹€.

 

βœ… HTTP μš”μ²­, 응닡 흐름

  • WASλŠ” Request, Response 객체λ₯Ό μƒˆλ‘œ λ§Œλ“€μ–΄μ„œ μ„œλΈ”λ¦Ώ 객체λ₯Ό ν˜ΈμΆœν•œλ‹€.
  • κ°œλ°œμžλŠ” Request, Response 객체λ₯Ό μ‚¬μš©ν•΄ HTTP μš”μ²­ 정보λ₯Ό νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•˜κ³ , 응닡 정보λ₯Ό μž…λ ₯ν•  수 μžˆλ‹€.
  • WASλŠ” Response 객체에 λ‹΄κ²¨μžˆλŠ” λ‚΄μš©μœΌλ‘œ HTTP 응닡 정보λ₯Ό μƒμ„±ν•΄μ„œ μ›Ή λΈŒλΌμš°μ €λ‘œ λ‚΄λ €μ€€λ‹€.

 

βœ… μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ

  • μ„œλΈ”λ¦Ώμ„ μ§€μ›ν•˜λŠ” WAS
  • μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆλŠ” μ„œλΈ”λ¦Ώ 객체λ₯Ό 생성, μ΄ˆκΈ°ν™”, 호좜, μ’…λ£Œν•˜λŠ” 생λͺ…μ£ΌκΈ° 관리 μ—­ν• 
  • μ„œλΈ”λ¦Ώ κ°μ²΄λŠ” μ‹±κΈ€ν†€μœΌλ‘œ 관리됨 (κ³΅μœ λ³€μˆ˜ μ‚¬μš© 주의!)
  • JSP도 μ„œλΈ”λ¦ΏμœΌλ‘œ λ³€ν™˜λ˜μ–΄ μ‚¬μš©
  • λ™μ‹œ μš”μ²­μ„ μœ„ν•œ λ©€ν‹° μ“°λ ˆλ“œ 지원

 

πŸ“Œ λ™μ‹œ μš”μ²­ - λ©€ν‹° μ“°λ ˆλ“œ

βœ… μ“°λ ˆλ“œ (Thread)

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œλ₯Ό ν•˜λ‚˜ν•˜λ‚˜ 순차적으둜 μ‹€ν–‰ν•˜λŠ” 것
  • e.g. μžλ°”μ˜ 메인 λ©”μ„œλ“œλ₯Ό 처음 μ‹€ν–‰ν•˜λ©΄ mainμ΄λΌλŠ” μ΄λ¦„μ˜ μ“°λ ˆλ“œκ°€ 싀행됨
  • μ“°λ ˆλ“œλŠ” ν•œλ²ˆμ— ν•˜λ‚˜μ˜ μ½”λ“œ 라인만 μˆ˜ν–‰ν•˜κ³  μ“°λ ˆλ“œκ°€ μ—†λ‹€λ©΄ μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μ—†μŒ
  • λ™μ‹œ μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ©΄ μ“°λ ˆλ“œλ₯Ό μΆ”κ°€λ‘œ 생성

 

βœ… μš”μ²­λ§ˆλ‹€ μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 경우

  • μž₯점
    • λ™μ‹œ μš”μ²­μ„ μ²˜λ¦¬ν•  수 있음
    • λ¦¬μ†ŒμŠ€(CPU, λ©”λͺ¨λ¦¬)κ°€ ν—ˆμš©ν•  λ•ŒκΉŒμ§€ 처리 κ°€λŠ₯
    • ν•˜λ‚˜μ˜ μ“°λ ˆλ“œκ°€ μ§€μ—°λ˜μ–΄λ„ λ‚˜λ¨Έμ§€ μ“°λ ˆλ“œλŠ” 정상 λ™μž‘
  • 단점
    • μ“°λ ˆλ“œ μƒμ„±λΉ„μš©μ€ 맀우 λΉ„μŒˆ
    • μ“°λ ˆλ“œλŠ” μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­(μ“°λ ˆλ“œ κ°„ ꡐ체) λΉ„μš©μ΄ λ°œμƒν•¨
    • μ“°λ ˆλ“œ 생성에 μ œν•œμ΄ μ—†μ–΄ μš”μ²­μ΄ λ„ˆλ¬΄ 많이 였면 CPU, λ©”λͺ¨λ¦¬ μž„κ³„μ μ„ λ„˜μ–΄μ„œ μ„œλ²„κ°€ 죽을 수 있음

 

βœ… μ“°λ ˆλ“œ ν’€

  • μ“°λ ˆλ“œ 풀은 이λ₯Ό λ³΄μ™„ν•˜μ—¬ μ“°λ ˆλ“œμ˜ μ΅œλŒ€μΉ˜λ₯Ό 정해놓고 ν•„μš”ν•œ μ“°λ ˆλ“œλ₯Ό λ³΄κ΄€ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.
  • μ“°λ ˆλ“œκ°€ ν•„μš”ν•˜λ©΄ 이미 μƒμ„±λ˜μ–΄ μžˆλŠ” μ“°λ ˆλ“œλ₯Ό κΊΌλ‚΄ μ‚¬μš©ν•˜κ³  μ‚¬μš© μ’…λ£Œ μ‹œ μ“°λ ˆλ“œ 풀에 λ°˜λ‚©ν•œλ‹€.
  • λͺ¨λ“  μ“°λ ˆλ“œκ°€ μ‚¬μš©μ€‘μ΄λ©΄ κΈ°λ‹€λ¦¬λŠ” μš”μ²­μ€ κ±°μ ˆν•˜κ±°λ‚˜ νŠΉμ • 숫자만큼만 λŒ€κΈ°ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆλ‹€.
  • μ“°λ ˆλ“œ 풀을 μ‚¬μš©ν•˜λ©΄ μ“°λ ˆλ“œκ°€ 미리 μƒμ„±λ˜μ–΄ μžˆμœΌλ―€λ‘œ μ“°λ ˆλ“œλ₯Ό μƒμ„±ν•˜κ³  μ’…λ£Œν•˜λŠ” λΉ„μš©(CPU)이 μ ˆμ•½λ˜κ³ , μ‘λ‹΅μ‹œκ°„μ΄ λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆλ‹€.
  • λ˜ν•œ 생성 κ°€λŠ₯ν•œ μ“°λ ˆλ“œμ˜ μ΅œλŒ€μΉ˜κ°€ μžˆμœΌλ―€λ‘œ λ§Žμ€ μš”μ²­μ΄ 듀어와도 κΈ°μ‘΄ μš”μ²­μ€ μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.
  • μ“°λ ˆλ“œ ν’€μ˜ 적정 μˆ«μžλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직의 λ³΅μž‘λ„, CPU, λ©”λͺ¨λ¦¬, IOλ¦¬μ†ŒμŠ€ 상황에 따라 λͺ¨λ‘ λ‹€λ₯΄λ―€λ‘œ μ„±λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ©΄μ„œ μ°ΎλŠ” 것이 μ’‹λ‹€.

→ λ©€ν‹° μ“°λ ˆλ“œμ— λŒ€ν•œ 뢀뢄은 WASκ°€ μ²˜λ¦¬ν•΄μ£Όλ―€λ‘œ κ°œλ°œμžλŠ” μ“°λ ˆλ“œμ˜ μ΅œλŒ€μΉ˜λ§Œ μ„€μ •ν•΄μ£Όλ©΄ λœλ‹€.

 

πŸ“Œ HTML, HTTP API, CSR, SSR

βœ… μ •적 λ¦¬μ†ŒμŠ€

  • κ³ μ •λœ HTML 파일, CSS, JS, 이미지, μ˜μƒ λ“± 제곡
  • 주둜 μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 제곡됨

 

βœ… HTML νŽ˜μ΄μ§€

  • λ™μ μœΌλ‘œ ν•„μš”ν•œ HTML νŒŒμΌμ„ μƒμ„±ν•΄μ„œ 전달
  • JSP, νƒ€μž„λ¦¬ν”„μ™€ 같은 λ·° ν…œν”Œλ¦Ώμ„ μ΄μš©ν•΄μ„œ λ™μ μœΌλ‘œ HTML을 μƒμ„±ν•œλ‹€.
  • μ›Ή λΈŒλΌμš°μ €λŠ” HTML을 ν•΄μ„ν•΄μ„œ 화면에 띄움

 

βœ… HTTP API

  • HTML이 μ•„λ‹ˆλΌ 데이터λ₯Ό 전달
  • 주둜 JSON ν˜•μ‹μ„ μ‚¬μš©ν•¨ (거의 ν‘œμ€€)
  • HTML을 μ£Όκ³  λ°›λŠ” 전솑을 μ œμ™Έν•œ λͺ¨λ“  κ³³μ—μ„œ 데이터λ₯Ό μ£Όκ³ λ°›κ³ , ν”„λ‘œμ„ΈμŠ€λ₯Ό ν˜ΈμΆœν•˜λŠ”λ° μ‚¬μš©
  • λ‹€μ–‘ν•œ μ‹œμŠ€ν…œμ—μ„œ 호좜
    • μ•± ν΄λΌμ΄μ–ΈνŠΈ (ios, μ•ˆλ“œλ‘œμ΄λ“œ, PC μ•±)
    • μ›Ή λΈŒλΌμš°μ €μ—μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν†΅ν•œ HTTP API 호좜
    • React, Vue.js같은 μ›Ή ν΄λΌμ΄μ–ΈνŠΈ
    • μ„œλ²„ to μ„œλ²„ (e.g. μ£Όλ¬Έ μ„œλ²„ -> 결제 μ„œλ²„)

 

βœ… SSR, CSR

πŸ”» SSR - μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ (λ°±μ—”λ“œ 개발자)

  • HTML μ΅œμ’… κ²°κ³Όλ₯Ό μ„œλ²„μ—μ„œ λ§Œλ“€μ–΄μ„œ μ›Ή λΈŒλΌμš°μ €μ— 전달
  • 주둜 정적인 화면에 μ‚¬μš©
  • JSP, νƒ€μž„λ¦¬ν”„

 

πŸ”» CSR - ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§ (ν”„λ‘ νŠΈμ—”λ“œ 개발자)

  • HTML κ²°κ³Όλ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•΄ μ›Ή λΈŒλΌμš°μ €μ—μ„œ λ™μ μœΌλ‘œ μƒμ„±ν•΄μ„œ 적용
  • 주둜 동적인 화면에 μ‚¬μš©, μ›Ή ν™˜κ²½μ„ μ•±μ²˜λŸΌ λΆ€λΆ„λΆ€λΆ„ λ³€κ²½ν•  수 있음
  • React, Vue.js

 


κ°•μ˜ 링크

 

μŠ€ν”„λ§ MVC 1편 - λ°±μ—”λ“œ μ›Ή 개발 핡심 기술 - μΈν”„λŸ° | κ°•μ˜

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œ ν•„μš”ν•œ λͺ¨λ“  μ›Ή κΈ°μˆ μ„ κΈ°μ΄ˆλΆ€ν„° μ΄ν•΄ν•˜κ³ , μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ MVC의 핡심 원리와 ꡬ쑰λ₯Ό μ΄ν•΄ν•˜κ³ , 더 κΉŠμ΄μžˆλŠ” λ°±μ—”λ“œ 개발자둜 μ„±μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€., -

www.inflearn.com