πŸ‹ JavaScript

λ¦¬μ•‘νŠΈ 정적 νŽ˜μ΄μ§€ 배포 μƒˆλ‘œ κ³ μΉ¨ 404 였λ₯˜

μš”λ‹ˆκΉ€ 2023. 8. 13. 23:07

πŸ‹  λ°°κ²½

λ³„λ„μ˜ api μ„œλ²„λ₯Ό 두고 ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜λŠ” λ¦¬μ•‘νŠΈ 정적 νŽ˜μ΄μ§€ 배포λ₯Ό μ§„ν–‰ν•˜λ˜ 쀑, μƒˆλ‘œ κ³ μΉ¨ μ‹œ 404 였λ₯˜κ°€ λœ¨λŠ” 이슈λ₯Ό 맞λ‹₯λœ¨λ Έλ‹€. 

(IIS μ„œλ²„μ— api μ„œλ²„ 및 정적 νŽ˜μ΄μ§€κ°€ 배포된 μƒν™©μ΄μ—ˆκ³ , 정적 νŽ˜μ΄μ§€λŠ” example.com/registration μ΄λΌλŠ” 상세 도메인을 κ°€μ§„ 상황)

 

πŸ‹ μ›μΈ

URL이 ν•΄μ„λ˜λŠ” μž₯μ†Œλ‘œ λ§Žμ΄λ“€ λ“€μ–΄λ³΄μ…¨κ² μ§€λ§Œ 두가지 μž₯μ†Œ, μ„œλ²„ μ‚¬μ΄λ“œ & ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œκ°€ μžˆλŠ”λ°...

 

μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 방식을 λ‹¨μˆœν™”ν•˜μžλ©΄...

μœ μ €κ°€ νŠΉμ • url 둜 접속
→ μ„œλ²„λ‘œ μš”μ²­μ„ 보내고
→ κ΅¬μ„±ν–ˆλ˜ νŽ˜μ΄μ§€λ₯Ό 보여쀀닀. 

λ¦¬μ•‘νŠΈ λΌμš°ν„°κ°€ μ§€μ›ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λΌμš°νŒ…μ€, 

μœ μ €κ°€ νŠΉμ • url 둜 접속
→ μ„œλ²„λŠ” 빈 index.html 파일 및 슀크립트 νŒŒμΌμ„ μ „λ‹¬ν•˜κ³ 
→ 이 μŠ€ν¬λ¦½ν¬κ°€ λ‘œλ“œλœ ν›„
→ /registration/ μ—μ„œ /registration/about-usλΌλŠ” 상세 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λ©΄
→ μ„œλ²„μ— μš”μ²­μ„ λ³΄λ‚΄λŠ” λŒ€μ‹  url이 λ‘œμ»¬μ—μ„œλ§Œ 번경되고,
→ λ‘œλ“œλœ μŠ€ν¬λ¦½νŠΈκ°€ μ—μ„œ /registration/about-us 에 ν•΄λ‹Ήν•˜λŠ” λ·°λ₯Ό 그렀주게 λœλ‹€.

(즉, path 이동과 routing은 μž‘λ™ν•˜μ§€λ§Œ λͺ¨λ‘ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œμ—μ„œ 이뀄지고 μ„œλ²„λŠ” 관계 XX) 

 

ν•˜μ§€λ§Œ... ν•˜μœ„ /registration/about-us μ—μ„œ μƒˆλ‘œ 고침을 ν•˜κ²Œ 되면, ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μƒˆλ‘­κ²Œ νŒŒμΌμ„ μš”μ²­ν•˜λŠ”λ°,

ν•΄λ‹Ή μ—”λ“œν¬μΈνŠΈμ— λ“±λ‘λœ 처음 λ‘œλ”©λ˜μ–΄μ•Όν•  index.html νŒŒμΌμ„ 찾을 수 없기에 404 μ—λŸ¬κ°€ 뜨게 λ˜λŠ” 것이닀. 

 

ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ λ‹€μŒμ˜ 접근듀이 μžˆμ—ˆκ³ ... 채택 κ³Όμ •μ—μ„œ λ‹€μ–‘ν•œ νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μžˆμ—ˆλ‹€. 

(1) μ„œλ²„λ‘œ μš”μ²­μ„ 보내지 말고 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ²˜λ¦¬ν•˜μž, 

(2) μ„œλ²„μ—μ„œ 상세 url둜 μš”μ²­μ΄ λ“€μ–΄μ˜¬ λ•Œ index.html νŒŒμΌμ„ μ „λ‹¬ν•˜κ²Œ λ§Œλ“œλŠ” 방법

 

 

πŸ‹  μ ‘κ·Ό

1. react-router-dom λ‚΄ BrowserRouter vs HashRouter

BrowserRouterλ₯Ό μ‚¬μš©ν•  λ•Œ url:  /registration/about-us

HashRouterλ₯Ό μ‚¬μš©ν•  λ•Œ url:  /registration/#/about-us

해쉬(#) λ’· 뢀뢄은 ν•΄μ‹œ μ‹λ³„μž (fragment)라고 뢈리며 μ›Ή νŽ˜μ΄μ§€ λ‚΄ νŠΉμ • μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μš©λ„ (νŠΉμ • μš”μ†Œλ‘œ 슀크둀! ν•  λ•Œ)λ‘œλ„ μ‚¬μš©λœλ‹€. 즉 λ’€ 뢀뢄은 url의 μΌλΆ€λ‘œ μΈμ‹λ˜μ–΄ μ„œλ²„λ‘œ μ „μ†‘λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 의미!

λ”°λΌμ„œ /registration/에 접속 μ‹œ index.html을 λ°˜ν™˜ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄μžˆλ‹€λ©΄, /registration/#/about-us에 접속 μ‹œμ—λ„ μ„œλ²„μ—μ„œ /registration/λŒ€λ‘œ μΈμ‹ν•˜μ—¬ index.html을 λ°˜ν™˜ν•œλ‹€. 

 

ν•˜μ§€λ§Œ... 상세 도메인이 λ‹€μŒμ²˜λŸΌ κΉ”λ”ν•˜μ§€ λͺ»ν•˜κ³ ... (/registration/#/users?id=123)

ν”ŒλŸ¬ν„° μ•±κ³Ό 톡신해야 ν•˜λŠ” ν™˜κ²½μ—μ„œ μ•± 개발자 λΆ„κ»˜ λͺ¨λ“  λΈŒλ¦¬μ§€ url을 λ°”κΎΈμ–΄ λ‹¬λΌλŠ” μš”μ²­μ„ μ „λ‹¬ν• λ§Œν•œ 졜적의 방법이라 μƒκ°ν•˜μ§€ μ•Šμ•˜λ‹€...

 

2. λ°±μ—”λ“œ μ„œλ²„ ꡬ성

μ‘°κΈˆμ€ λ³΅μž‘ν•˜μ§€λ§Œ μ„œλ²„λ‘œ λ“€μ–΄μ˜€λŠ” μ–΄λ– ν•œ 상세 url이라도 μΊμΉ˜μ˜¬ν•˜μ—¬ index.html νŒŒμΌμ„ μ „λ‹¬ν•˜λ„λ‘ asp.net core둜 κ°„λ‹¨ν•œ λ°±μ—”λ“œ μ„œλ²„λ₯Ό κ΅¬μ„±ν•˜λŠ” 방법이 μžˆμ—ˆλ‹€. 배포 ν›„ μ—¬μ „νžˆ μ„œλ²„ 500.30 였λ₯˜κ°€ μžˆμ—ˆκ³ , 확인 ν›„ λ‹€λ₯Έ IIS μ„œλ²„μ— 정상 배포됨을 ν™•μΈν–ˆλ‹€. 결둠은 정상 λ™μž‘ν•˜λ˜ IIS μœˆλ„ μ„œλ²„ ν”Œλž«νΌμ€ Windows 11, 비정상 λ™μž‘ν•˜λ˜ ν”Œλž«νΌμ€ Windows 2016으둜 λ‹¬λžκ³ , κ·Έ 버전에 따라 μ„€μΉ˜ν•΄μ•Ό ν•  asp.net core ν˜ΈμŠ€νŒ… λ²ˆλ“€ 버전이 λ‹¬λžκΈ° λ•Œλ¬Έμ΄μ—ˆλ‹€....

 

 

 

πŸ‹  정리

같은 이슈λ₯Ό 맞λ‹₯뜨린 μ‚¬λžŒμ—κ²Œ 도움이 되길 바라며... 

글을 λ§ˆμΉ˜κ² μŠ΅λ‹ˆλ‹€... 끄-읕

(사싀 아직 보좩할 λ‚΄μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€... λΉ λ₯Έ μ‹œμΌ λ‚΄ μΆ”κ°€ν•˜κ² μŠ΅λ‹ˆλ‹€...)

 

 

 

 

.

.

.

μ°Έκ³ 

https://stackoverflow.com/questions/27928372/react-router-urls-dont-work-when-refreshing-or-writing-manually