/* https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+css-extras+markdown+scss+sql&plugins=line-highlight+line-numbers+autolinker */
많은 해 동안 이것들이 URL의 유일한 구성 요소로 간주되었습니다. 이것은 텍스트 조각의 도입으로 변경되었습니다. 이것은 페이지 내의 특정 텍스트 부분으로 직접 링크할 수 있는 기능입니다. 제 기사 더 똑똑한 'Ctrl+F': 웹 페이지 콘텐츠로 직접 링크하기에서 더 자세히 읽을 수 있습니다.
/path/to/myfile.html). 계층적 리소스 네비게이션에 가장 잘 사용됩니다:/users/123/posts - 사용자 123의 게시물/docs/api/authentication - 문서 구조/dashboard/analytics - 애플리케이션 섹션?key1=value1&key2=value2). 필터, 옵션, 구성에 완벽합니다:?theme=dark&lang=en - UI 기본 설정?page=2&limit=20 - 페이지 매김?status=active&sort=date - 데이터 필터링?from=2025-01-01&to=2025-12-31 - 날짜 범위#SomewhereInTheDocument). 클라이언트 측 네비게이션 및 페이지 섹션에 이상적입니다:#L20-L35 - GitHub 라인 강조 표시#features - 섹션으로 스크롤#/dashboard - 단일 페이지 앱 라우팅 (요즘은 거의 사용되지 않음)?languages=javascript+typescript+python?tags=frontend,react,hooks?filters=status:active,owner:me,priority:high?config=eyJyaWNrIjoicm9sbCJ9== (base64로 인코딩된 JSON)?debug=true&analytics=false?mobile (존재 = true)?tags[]=frontend&tags[]=react&tags[]=hooks[]를 추가하면 여러 값이 함께 그룹화되어야 함을 나타냅니다.?tags[]=frontend&tags[]=react&tags[]=hooks?ids[0]=42&ids[1]=73qs 라이브러리나 Express 미들웨어 같은)는 여전히 이 패턴을 자동으로 인식합니다. 그러나 URL 사양에서 공식적으로 표준화되지 않았으므로 서버 또는 클라이언트 구현에 따라 동작이 다를 수 있습니다. 제 웹사이트의 구문 강조 표시를 어떻게 깨뜨리는지 주목하세요.https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript&plugins=line-numbershttps://github.com/zepouet/Xee-xCode-4.5/blob/master/XeePhotoshopLoader.m#L108-L136https://www.google.com/maps/@22.443842,-74.220744,19zhttps://www.figma.com/file/abc123/MyDesign?node-id=123:456&viewport=100,200,0.5https://store.com/laptops?brand=dell+hp&price=500-1500&rating=4&sort=price-asc// URL 매개변수 읽기const params = new URLSearchParams(window.location.search);const view = params.get('view') || 'grid';const page = params.get('page') || 1;// URL 매개변수 업데이트function updateFilters(filters) { const params = new URLSearchParams(window.location.search); // 개별 매개변수 업데이트 params.set('status', filters.status); params.set('sort', filters.sort); // 페이지 새로 고침 없이 URL 업데이트 const newUrl = `${window.location.pathname}?${params.toString()}`; window.history.pushState({}, '', newUrl); // 이제 새 필터를 기반으로 UI 업데이트 renderContent(filters);}// 뒤로/앞으로 버튼 처리window.addEventListener('popstate', () => { const params = new URLSearchParams(window.location.search); const filters = { status: params.get('status') || 'all', sort: params.get('sort') || 'date' }; renderContent(filters);});import { useSearchParams } from 'react-router-dom';// 또는 Next.js 13+의 경우: import { useSearchParams } from 'next/navigation';function ProductList() { const [searchParams, setSearchParams] = useSearchParams(); // URL에서 읽기 (기본값 포함) const color = searchParams.get('color') || 'all'; const sort = searchParams.get('sort') || 'price'; // URL 업데이트 const handleColorChange = (newColor) => { setSearchParams(prev => { const params = new URLSearchParams(prev); params.set('color', newColor); return params; }); }; return ( <div> <select value={color} onChange={e => handleColorChange(e.target.value)}> <option value="all">All Colors</option> <option value="silver">Silver</option> <option value="black">Black</option> </select> {/* 필터링된 제품이 여기에 렌더링됩니다 */} </div> );}// 나쁨: URL이 기본값으로 복잡해짐?theme=light&lang=en&page=1&sort=date// 좋음: URL에는 기본값이 아닌 값만 있음?theme=dark // light가 기본값이므로 생략function getTheme(params) { return params.get('theme') || 'light'; // 코드에서 처리된 기본값}import { debounce } from 'lodash';const updateSearchParam = debounce((value) => { const params = new URLSearchParams(window.location.search); if (value) { params.set('q', value); } else { params.delete('q'); } window.history.replaceState({}, '', `?${params.toString()}`);}, 300);// replaceState를 사용하여 히스토리를 넘치지 않도록 함pushState와 replaceState 중에서 선택할 때 브라우저 히스토리가 어떻게 동작하기를 원하는지 생각하세요. pushState는 새 히스토리 항목을 만들며, 이는 필터 변경, 페이지 매김, 새 보기로의 네비게이션 같은 뚜렷한 네비게이션 작업에 적합합니다 — 사용자는 뒤로 버튼을 사용하여 이전 상태로 돌아갈 수 있습니다. 반면 replaceState는 새 항목을 추가하지 않고 현재 항목을 업데이트하며, 검색 입력 중이나 사소한 UI 조정 같은 개선 사항에 이상적입니다. 여기서 모든 키 입력으로 히스토리를 넘치고 싶지 않습니다.https://example.com/p?id=x7f2k&v=3https://example.com/products/laptop?color=silver&sort=price/products → /products?category=laptops → /products?category=laptops&price=500-1000 (카테고리 선택) (가격 필터 추가)?v=2 // API 버전?beta=true // 베타 기능?experiment=new-ui // A/B 테스트 변형// 사용자가 새로 고침을 누르면 모든 것을 잃음const [filters, setFilters] = useState({});// 절대 이렇게 하지 마세요?password=secret123// 불명확하고 일관성 없음?foo=true&bar=2&x=dark// 자체 문서화되고 일관성 있음?mobile=true&page=2&theme=dark?config=eyJtZXNzYWdlIjoiZGlkIHlvdSByZWFsbHkgdHJpZWQgdG8gZGVjb2RlIHRoYXQ_IiwiZmlsdGVycyI6eyJzdGF0dXMiOlsiYWN0aXZlIiwicGVuZGluZyJdLCJwcmlvcml0eSI6WyJoaWdoIiwibWVkaXVtIl0sInRhZ3MiOlsiZnJvbnRlbmQiLCJyZWFjdCIsImhvb2tzIl0sInJhbmdlIjp7ImZyb20iOiIyMDI0LTAxLTAxIiwidG8iOiIyMDI0LTEyLTMxIn19LCJzb3J0Ijp7ImZpZWxkIjoiY3JlYXRlZEF0Iiwib3JkZXIiOiJkZXNjIn0sInBhZ2luYXRpb24iOnsicGFnZSI6MSwibGltaXQiOjIwfX0==// 잘못된 상태 교체history.replaceState({}, '', newUrl); // pushState가 필요했을 때 사용됨pushState를 사용하세요. 개선 사항이면 replaceState를 사용하세요.아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!

Directive와 플랫폼 경계
Inkyu Oh • Front-End

Partial Prerendering
Inkyu Oh • Front-End

플랫폼을 넘어서: Vercel이 설계하는 미래의 프로그래밍 언어
Inkyu Oh • Front-End

React와 Remix가 선택한 서로 다른 미래
Inkyu Oh • Front-End