λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ—‚ WIL

ν”„λ‘ νŠΈμ—”λ“œμ—κ²Œ λ°°ν¬ν”Œλž«νΌμ΄λž€ - 2024 λ‹Ήκ·Ό ν…Œν¬ λ°‹μ—…

by nalong 2024. 11. 24.

λ‹Ήκ·Ό ν…Œν¬ λ°‹μ—… μ˜μƒμ„ 보고 λ‚΄μš© μœ„μ£Όλ‘œ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

🌐 HTML

  • μ›ΉνŽ˜μ΄μ§€μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ μš”μ†ŒλŠ” λΈŒλΌμš°μ €μ— ν‘œμ‹œλ˜λŠ” λ‚΄μš©μ„ κ²°μ •ν•˜λŠ” HTML이닀.
  • μ‚¬μš©μžκ°€ λ‘œμ»¬μ—μ„œ HTML νŒŒμΌμ— μ ‘κ·Όν•˜λ©΄ λΈŒλΌμš°μ €κ°€ 직접 μ—΄ 수 μžˆμ§€λ§Œ 리λͺ¨νŠΈ μ„œλ²„μ— μžˆλŠ” HTML에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄μ„œλŠ” 리λͺ¨νŠΈ URL둜 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€. (* 리λͺ¨νŠΈ URL : 외뢀에 μœ„μΉ˜ν•œ HTML을 κ°€λ¦¬ν‚€λŠ” 경둜)
  • λ‘œμ»¬μ—μ„œλŠ” 파일 ν”„λ‘œν† μ½œμ„ 톡해 HTML을 μš”μ²­, 리λͺ¨νŠΈμ—μ„œ μ ‘κ·Όν•  λ•ŒλŠ” HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ μš”μ²­ν•œλ‹€.
    (*ν”„λ‘œν† μ½œ: 컴퓨터와 컴퓨터 사이, λ˜λŠ” ν•œ μž₯μΉ˜μ™€ λ‹€λ₯Έ μž₯치 μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ›ν™œνžˆ μ£Όκ³ λ°›κΈ° μœ„ν•˜μ—¬ μ•½μ†ν•œ μ—¬λŸ¬ κ°€μ§€ κ·œμ•½)

πŸ“¦  배포의 μ •μ˜ 및 성곡적인 배포의 쑰건

λ°°ν¬λž€?

1. μ‚¬μš©μžμ™€ κ°œλ°œμžκ°€ λ§Œλ‚˜λŠ” 지점.

2. HTML μœ„μΉ˜λ₯Ό νƒμƒ‰ν•˜κ³  HTML을 μš”μ²­ν•˜κ³  HTMLμŠ€νŽ™μ΄ λ™μž‘μ„ 보μž₯ν•˜λŠ” 것.

 

성곡적인 λ°°ν¬λŠ”?

둜컬 파일 생성 ν›„ λΈŒλΌμš°μ €λ₯Ό 톡해 확인할 수 μžˆλŠ” μœ„μ˜ μ„Έ κ°€μ§€ λ™μž‘μ΄ μΆ©μ‘±λ˜μ–΄μ•Ό ν•œλ‹€.

βœ…  정적 μ›Ήμ‚¬μ΄νŠΈμ™€ 동적 μ›Ήμ‚¬μ΄νŠΈμ˜ 배포 ν”Œλž«νΌ ꡬ성 μš”μ†Œ

정적 μ›Ήμ‚¬μ΄νŠΈ

- λ‚΄μš©μ΄ λ³€ν•˜μ§€ μ•ŠλŠ” HTML μ½˜ν…μΈ .

- 리λͺ¨νŠΈ URL을 νŒŒμ•…ν•˜κ³  HTTP GET μš”μ²­μ„ 톡해 HTML을 λ°›μ•„μ˜€λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€.
- μ›Ήμ„œλ²„κ°€ λΈŒλΌμš°μ €κ°€ 보낸 HTTP GET μš”μ²­μ„ μ²˜λ¦¬ν•¨

 

정적 μ›Ήμ‚¬μ΄νŠΈλŠ” μ›Ή μ„œλ²„λ§ŒμœΌλ‘œ 배포 ν”Œλž«νΌμ„ ꡬ좕할 수 μžˆλ‹€. (λ³€ν•˜λŠ” 데이터가 μ—†μŒ)

 

동적 μ›Ήμ‚¬μ΄νŠΈ

- 동적 μ›Ήμ‚¬μ΄νŠΈλŠ” μ‚¬μš©μžλ§ˆλ‹€ κ°œμΈν™”λœ μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•˜κΈ° μœ„ν•΄ 동적인 μ²˜λ¦¬κ°€ ν•„μš”ν•˜λ‹€.

 

- HTTP μš”μ²­μ„ λ°›μ•„μ„œ 동적인 μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ 좔가됨.

- μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λŠ” μ›Ή μ„œλ²„μ™€ ν˜‘λ ₯ν•˜μ—¬ HTML을 λ™μ μœΌλ‘œ μˆ˜μ •ν•˜κ³  응닡함.

 

동적 μ›Ήμ‚¬μ΄νŠΈμ—μ„œμ˜ 배포 ν”Œλž«νΌμ€ λ‹¨μˆœν•œ μ›Ή μ„œλ²„λΏλ§Œ μ•„λ‹ˆλΌ, HTML을 λ™μ μœΌλ‘œ μ œμ–΄ν•  수 μžˆλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„κ°€ ν•¨κ»˜ μžˆμ–΄μ•Ό ν•œλ‹€.

 

βœ… SPA λ™μž‘ 방식 및 배포 ν”Œλž«νΌ ꡬ성 μš”μ†Œ

1. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν•œκ³„ 

HTML을 μƒˆλ‘œ λ°›μ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— UI/UX μΈ‘λ©΄μ—μ„œ 계속 μƒˆλ‘œκ³ μΉ¨μ΄ λ°œμƒν•˜κ²Œ λœλ‹€.

ν™”λ©΄ ν‘œμ‹œμ™€ 데이터 μ²˜λ¦¬μ— 강결합이 λœλ‹€. 

 

2. AJAX 기술 λ“±μž₯

μƒˆλ‘œκ³ μΉ¨ 없이 데이터λ₯Ό 받을 수 μžˆλŠ” 방법을 μ œκ³΅ν•œλ‹€.

μ›Ή μ„œλ²„μ—μ„œ HTML을 λ°›μ•„μ˜¨ ν›„, λΈŒλΌμš°μ €λŠ” 데이터 전달을 μœ„ν•΄ 또 λ‹€λ₯Έ μ›Ή μ„œλ²„μ— μš”μ²­μ„ 보내 데이터λ₯Ό 받을 수 μžˆλŠ” ꡬ쑰둜 λ°œμ „ν•˜κ²Œ λœλ‹€.

 

πŸ”₯ AJAX λ“±μž₯으둜 SPA이 λΆ€μƒν•˜κ²Œ λ˜μ—ˆμœΌλ©°, HTML νŽ˜μ΄μ§€λŠ” JS와 CSSλ₯Ό λ°›μ•„μ˜€λŠ” ν†΅λ‘œλ‘œ λ™μž‘ν•˜κ²Œ λœλ‹€.

 

JSλŠ” μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ„ μ œμ–΄ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ©΄μ„œ CSSμŠ€νƒ€μΌλ„ μ μš©ν•˜κ²Œ λ˜λŠ”λ° λΉŒλ“œ 도ꡬλ₯Ό 톡해 HTML에 JS와 CSSλ₯Ό ν†΅ν•©ν•˜κ²Œ λœλ‹€.

 

 

SPA 배포 ν”Œλž«νΌ μš”κ΅¬μ‚¬ν•­

- JS, CSS, AJAX 응닡을 μ²˜λ¦¬ν•˜λŠ” μ›Ή μ„œλ²„λ₯Ό ν•„μš”λ‘œ ν•œλ‹€.

- λ‹€λ§Œ SPAμ—μ„œ μ„œλΈŒ 패슀의 μ²˜λ¦¬κ°€ μ–΄λ €μ›Œμ§€κΈ° λ•Œλ¬Έμ—  404 not found λ°œμƒ μ‹œ index.html 응닡도 ν•„μš”ν•˜λ‹€. 

βœ… SPA μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•œ μΊμ‹œ 관리

 

SPAλŠ” μ‚¬μš©μžκ°€ 첫 화면을 보기 μœ„ν•œ λŒ€λŸ‰μ˜ HTML, JS, CSSμš”μ²­μ„ ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯ μš°λ €κ°€ μžˆλ‹€. 

- SPA κ΅¬μ‘°μ—μ„œλŠ” JS와 CSSκ°€ μ‚¬μš©μžμ˜ μΈν„°λž™μ…˜μ„ μ œμ–΄ν•˜κ³ , HTML은 ν†΅λ‘œ 역할을 ν•˜μ—¬ ν•„μš”ν•œ 데이터가 λ™μ μœΌλ‘œ λ‘œλ“œλ˜λŠ”λ°, 이 κ³Όμ •μ—μ„œ λ³΅μž‘ν•œ HTTP μš”μ²­μ΄ λ°œμƒν•˜μ—¬ μ›Œν„°ν΄ ν˜„μƒμ΄ λ°œμƒν•  수 μžˆκ²Œ 됨.

 

πŸ€” 그럼 배포 ν”Œλž«νΌμ—μ„œ μ–΄λ–»κ²Œ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμ„κΉŒ?

HTTP μš”μ²­μ„ 톡해 응닡 헀더λ₯Ό μ„€μ •ν•˜μ—¬, μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€. 

μ•„λž˜ μ΄λ―Έμ§€μ²˜λŸΌ μ—¬λŸ¬ 응닡헀더듀이 μžˆλŠ”λ° κ·Έ 쀑 Cache-Controlλ₯Ό μ‚¬μš©ν•΄μ„œ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 있음.

 

πŸ€” Cache-Control둜 μ„±λŠ₯ μ΅œμ ν•˜κΈ° μœ„ν•œ 방법은? 

Cache-ControlλŠ” 기쑴에 λ°›μ•˜λ˜ HTMLμ΄λ‚˜ JS, CSSλ₯Ό μž¬ν™œμš©ν•˜λŠ” μΌμ’…μ˜ 캐싱 정책을 λœ»ν•˜λŠ”λ° 

예λ₯Ό λ“€μ–΄ max-ageλ₯Ό 60초둜 μ„€μ •ν•˜λ©΄ 60μ΄ˆκ°„ μ›Ή μ„œλ²„λ₯Ό ν†΅ν•˜μ§€ μ•Šκ³  λ°”λ‘œ HTML을 λ°›μ•„μ˜¬ 수 μžˆμ–΄ μ„±λŠ₯이 ν–₯μƒλœλ‹€.

JSμ—μ„œλ„ λ™μΌν•˜κ²Œ μ μš©ν•  수 μžˆλŠ”λ° max-age=600으둜 μ„€μ •ν•˜λ©΄ 600초 λ™μ•ˆ μΊμ‹œ λœλ‹€. 

 

πŸ€” κ·ΈλŸΌ μƒˆλ‘œ 배포λ₯Ό ν–ˆμ„ λ•Œ max-age 값이 μ„€μ •λ˜μ–΄ 있으면 만료될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜λŠ”κ°€? 

 

  • HTML νŒŒμΌμ— max-ageλ₯Ό μ„€μ •ν•˜λ©΄ μƒˆλ‘œμš΄ 배포 μ‹œμ—λ„ λΈŒλΌμš°μ €κ°€ μΊμ‹œλœ HTML을 μ‚¬μš©ν•˜μ—¬ λ³€κ²½ 사항이 μ‚¬μš©μžμ—κ²Œ μ¦‰μ‹œ λ°˜μ˜λ˜μ§€ μ•Šμ„ 수 μžˆλ‹€.
  • λ”°λΌμ„œ 보톡 HTML νŒŒμΌμ—λŠ” 캐싱을 μ œν•œ (no-store) ν•˜κ³ , JS  ν•΄μ‹œλ₯Ό μ‚¬μš©ν•œ 캐싱 μ „λž΅μ„ μ μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€. 
    • JS의 파일λͺ…은 hash둜 κ΅¬λΆ„λ˜λŠ”λ°, 캐싱 값을 λΆˆλŸ¬μ˜€λŠ” ν‚€λ‘œ 파일λͺ…을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— 파일λͺ…이 λ‹€λ₯΄λ©΄ μΊμ‹±μœΌλ‘œλΆ€ν„° μžμœ λ‘œμ›Œμ§. 
      • 파일 λ‚΄μš©μ΄ λ³€κ²½λ˜μ§€ μ•ŠμœΌλ©΄ ν•΄μ‹œκ°€ λ™μΌν•˜λ―€λ‘œ λΈŒλΌμš°μ €λŠ” μΊμ‹œ 된 νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ λ‘œλ”© 속도λ₯Ό ν–₯상함.
      • 파일 λ‚΄μš©μ΄ λ³€κ²½λ˜λ©΄ ν•΄μ‹œκ°€ λ³€κ²½λ˜μ–΄ λΈŒλΌμš°μ €κ°€ μƒˆλ‘œμš΄ 파일둜 μΈμ‹ν•˜κ³  μ„œλ²„μ—μ„œ μ΅œμ‹  νŒŒμΌμ„ λ°›μ•„μ˜΄

 

 

이전 배포 ν”Œλž«νΌμ—μ„œλŠ” 배포 버전이 μ—†μ—ˆμ§€λ§Œ 배포 버전을 ν•„μš”λ‘œ ν•˜κ²Œ λœλ‹€.

예λ₯Ό λ“€μ–΄ μƒˆλ‘œμš΄ 배포 μ‹œ 이전 λ²„μ „μ˜ HTML이 μƒˆλ‘œμš΄ JS νŒŒμΌμ„ λ‘œλ“œν•˜λ € ν•˜λ©΄ 404 μ—λŸ¬κ°€ λ°œμƒν•  수 있음.
ex) index.foo.jsμ—μ„œ index.bar.js둜 λ³€κ²½λ˜μ—ˆμ„ λ•Œ, HTML이 이전 λ²„μ „μ˜ JSλ₯Ό λ‘œλ“œν•˜λ©΄ νŒŒμΌμ„ μ°Ύμ§€ λͺ»ν•¨.

 

 

그럼 μ•žμ„œ μ œμ‹œν•œ SPA 배포 ν”Œλž«νΌμ—μ„œ μ„±λŠ₯ μ΅œμ ν™”κ°€ μΆ”κ°€λœ 배포 ν”Œλž«νΌμ΄ 되기 μœ„ν•΄μ„œ 버전 정책이 μΆ”κ°€λœλ‹€. 

 

SPA 배포 ν”Œλž«νΌ μš”κ΅¬μ‚¬ν•­

- [κΈ°μ‘΄] JS, CSS, AJAX 응닡을 μ²˜λ¦¬ν•˜λŠ” μ›Ή μ„œλ²„λ₯Ό ν•„μš”λ‘œ ν•œλ‹€.

- [κΈ°μ‘΄] λ‹€λ§Œ SPAμ—μ„œ μ„œλΈŒ 패슀의 μ²˜λ¦¬κ°€ μ–΄λ €μ›Œμ§€κΈ° λ•Œλ¬Έμ—  404 not found λ°œμƒ μ‹œ index.html 응닡도 ν•„μš”ν•˜λ‹€. 

- [μΆ”κ°€] Cache-Control μ‚¬μš© μ‹œ, 캐싱 정책에 λ”°λ₯Έ 버전 정책이 ν•„μš”ν•˜λ‹€. 

 

 

πŸ”₯ CDN λ„μž…

 

CDN을 ν™œμš©ν•˜μ—¬ 배포 ν”Œλž«νΌμ„ λ”μš± κ°œμ„ ν•  수 μžˆλ‹€. 

 

  • CDN은 HTML응닡을 둜컬 μ„œλ²„κ°€ μ•„λ‹Œ 물리적으둜 더 κ°€κΉŒμš΄ μ„œλ²„μ—μ„œ λ°›μ•„μ˜€λŠ” λ°©μ‹μœΌλ‘œ, 응닡 속도λ₯Ό μ΅œμ ν™”ν•  수 μžˆλ‹€.
  • μš”μ²­μ΄ ν•„μš”ν•  λ•Œ μΊμ‹œλœ 응닡을 μ œκ³΅ν•¨μœΌλ‘œμ¨ HTTP 응닡 속도λ₯Ό κ°œμ„ ν•˜λŠ” 역할을 ν•œλ‹€.
  • μƒˆλ‘œμš΄ 배포 μ‹œ CDN 퍼지λ₯Ό 톡해 캐싱을 λ¬΄νš¨ν™”ν•  수 μžˆλ‹€.

++ CDN은 SPA뿐만 μ•„λ‹ˆλΌ 정적 μ›Ήμ‚¬μ΄νŠΈμ˜ μ„±λŠ₯ μ΅œμ ν™”μ—λ„ 적용 κ°€λŠ₯ν•˜λ‹€.

βœ… κ²°λ‘ 

 

- λ³΅μž‘ν•΄ λ³΄μ΄λŠ” κ°œλ…λ“€λ„ 기본적인 μš”μ†Œλ“€μ˜ 쑰합을 톡해 μΆ©λΆ„νžˆ κ΅¬ν˜„ν•˜κ³  이해할 수 μžˆλ‹€.

- ν”„λ‘ νŠΈμ—”λ“œ 배포 ν”Œλž«νΌμ€ λ Œλ”λ§ μ΄ν›„λ§Œ 보면 λ‹¨μˆœν•΄ 보일 수 μžˆμ§€λ§Œ, λ Œλ”λ§ μ΄μ „μ˜ 세계, 즉 μ›Ή μ‹œμŠ€ν…œμ„ κ³ λ €ν•˜λ©΄ κ·Έ μ€‘μš”μ„±μ€ 맀우 크닀.