็„ก์ œ

Hash URL ๋ณธ๋ฌธ

<React>

Hash URL

yo-u-loo 2026. 7. 14. 12:47

 

๐ŸŸก Hash URL (Fragment Identifier)

URL์—์„œ # ๋’ค์— ์˜ค๋Š” ๋ถ€๋ถ„์„ ํ•ด์‹œ(Hash) ๋˜๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ ์‹๋ณ„์ž(Fragment Identifier, Fragment) ๋ผ๊ณ  ํ•œ๋‹ค.

 

โ—ผ๏ธ ์›๋ž˜ ์šฉ๋„ (์•ต์ปค ์ด๋™)

Hash๋Š” ์›๋ž˜ HTML ๋ฌธ์„œ ๋‚ด๋ถ€์˜ ํŠน์ • ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

<h2 id="chapter3">3์žฅ</h2>

<a href="#chapter3">3์žฅ์œผ๋กœ ์ด๋™</a>
https://example.com/page.html#chapter3
  • ์œ„ URL์— ์ ‘์†ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” id="chapter3"์ธ ์š”์†Œ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์Šคํฌ๋กคํ•œ๋‹ค. SPA๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ์ด ๊ธฐ๋Šฅ์„ ๋ผ์šฐํŒ… ์šฉ๋„๋กœ ํ™œ์šฉํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

 

โ—ผ๏ธ ์ฃผ์š” ํŠน์ง•

1๏ธโƒฃ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š์Œ (Client-Side Routing)

URL์˜ ํ•ด์‹œ(#) ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด HTML ๋ฌธ์„œ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š์•„ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ € ๋‹จ์—์„œ ํ™”๋ฉด์ด ์ „ํ™˜๋œ๋‹ค.

https://example.com/#/home
        ↓
https://example.com/#/about
  • ๋™์ž‘ ์ˆœ์„œ:
    1. URL ๋ณ€๊ฒฝ: ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ URL์˜ Hash ๊ฐ’ ๋ณ€๊ฒฝ.
    2. ์ด๋ฒคํŠธ ๊ฐ์ง€: ๋ธŒ๋ผ์šฐ์ €์—์„œ hashchange ์ด๋ฒคํŠธ ๋ฐœ์ƒ.
    3. ํ™”๋ฉด ๊ฐฑ์‹ : JavaScript๊ฐ€ ๋ณ€๊ฒฝ๋œ Hash๋ฅผ ์ธ์‹ํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ(ํ™”๋ฉด)๋งŒ ๋ถ€๋ถ„ ๋ Œ๋”๋ง.
  • ์ฐธ๊ณ : ํ™”๋ฉด ์ „ํ™˜์„ ์œ„ํ•œ HTML ๋ฌธ์„œ ์ž์ฒด๋Š” ๋‹ค์‹œ ์š”์ฒญํ•˜์ง€ ์•Š์ง€๋งŒ, ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด JavaScript๊ฐ€ API ์š”์ฒญ(Fetch, AJAX ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

 

2๏ธโƒฃ ๋ธŒ๋ผ์šฐ์ € ํžˆ์Šคํ† ๋ฆฌ ์ง€์›

ํ•ด์‹œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €์˜ History Stack์— ์ƒˆ๋กœ์šด ๊ธฐ๋ก์ด ์ถ”๊ฐ€๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ๋’ค๋กœ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ์ด์šฉํ•˜์—ฌ SPA ๋‚ด๋ถ€์˜ ํ™”๋ฉด ์ด๋™์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3๏ธโƒฃ ๋ถ๋งˆํฌ ๋ฐ URL ๊ณต์œ 

ํ˜„์žฌ ํ™”๋ฉด์˜ ํ•ด์‹œ ๊ฐ’์„ ํฌํ•จํ•œ URL์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋ถ๋งˆํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์‹œ ์ ‘์†ํ•˜๋ฉด JavaScript๊ฐ€ ํ•ด์‹œ ๊ฐ’์„ ์ฝ์–ด ๋™์ผํ•œ ํ™”๋ฉด์„ ๋‹ค์‹œ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

4๏ธโƒฃ ์ •์  ํ˜ธ์ŠคํŒ… ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

History API๋Š” ์„œ๋ฒ„ ์„ค์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ, Hash URL์€ ์„œ๋ฒ„ ์„ค์ • ์—†์ด๋„ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ž˜์„œ GitHub Pages, ๋‹จ์ˆœ ์ •์  ์›น์‚ฌ์ดํŠธ, ์„œ๋ฒ„ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ํ™˜๊ฒฝ ๋“ฑ์—์„œ๋Š” ์ง€๊ธˆ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

โ—ผ๏ธ History API์™€์˜ ์ฐจ์ด

ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ React, Vue, Angular ๋“ฑ์˜ SPA๋Š” Hash ๋ฐฉ์‹ ๋Œ€์‹  HTML5 History API๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • Hash ๋ฐฉ์‹: https://example.com/#/products/10
  • History API ๋ฐฉ์‹: https://example.com/products/10

History API๋Š” ์‹ค์ œ ์›น์‚ฌ์ดํŠธ URL์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, SSR(Server Side Rendering), SSG(Static Site Generation) ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ๊ฒ€์ƒ‰ ์—”์ง„์ด ์ผ๋ฐ˜ URL์ฒ˜๋Ÿผ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SEO์— ์œ ๋ฆฌํ•˜๋‹ค.

์„œ๋ฒ„์—์„œ /products/10์ฒ˜๋Ÿผ ์ง์ ‘ ์ ‘๊ทผํ•œ ์š”์ฒญ๋„ index.html์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

 

๐Ÿ“‹ Hash URL vs HTML5 History API ๐Ÿ“‹

๊ตฌ๋ถ„ Hash URL HTML5 History API
URL ํ˜•ํƒœ example.com/#/home example.com/home
์„œ๋ฒ„ ์š”์ฒญ Hash ๋ณ€๊ฒฝ ์‹œ ๋ฌธ์„œ ์žฌ์š”์ฒญ ์—†์Œ pushState ํ˜ธ์ถœ ์ž์ฒด๋Š” ์„œ๋ฒ„ ์š”์ฒญ ์—†์Œ
์„œ๋ฒ„ ์„ค์ • ํ•„์š” ์—†์Œ ํ•„์š”ํ•จ (๋ชจ๋“  ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ)
URL ๊ฐ€๋…์„ฑ ์ƒ๋Œ€์ ์œผ๋กœ ๊น”๋”ํ•˜์ง€ ์•Š์Œ ์‹ค์ œ URL์ฒ˜๋Ÿผ ์ž์—ฐ์Šค๋Ÿฌ์›€
SEO ์ œํ•œ์  SSR·SSG์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ์‹œ ์œ ๋ฆฌ
ํ˜„์žฌ ์‚ฌ์šฉ ์ •์  ํ˜ธ์ŠคํŒ…, ๋ ˆ๊ฑฐ์‹œ SPA ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  SPA

 

'<React>' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React Router (react-router-dom)  (0) 2026.07.14
React์—์„œ map ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ  (0) 2026.07.14
State (์Šคํ…Œ์ดํŠธ)  (0) 2026.07.08
Event (์ด๋ฒคํŠธ)  (0) 2026.07.08
Props (Properties, ํ”„๋กญ์Šค)  (0) 2026.07.07