encodeURIComponent는 주소 한 칸에 넣을 글자를 포장하는 함수예요. 검색어에 &가 있으면 주소가 거기서 끊긴 걸로 읽히니, 깨지기 쉬운 글자를 %26 같은 안전한 모양으로 싸서 넣는 거죠.
비유의 한계 포장을 두 번 하면 %가 %25가 돼서 값이 깨져요. encodeURI는 주소 전체용이라 &나 = 같은 구조 문자를 그대로 두니, 쿼리 값엔 encodeURIComponent나 URLSearchParams를 써요.
encodeURIComponent()는 URL(Uniform Resource Locator)의 한 조각(쿼리 값, 경로 세그먼트)에 넣을 문자열을 퍼센트 인코딩(Percent-Encoding)하는 함수다. encodeURI()는 URL 전체를 인코딩하므로 &·=·?·/ 같은 구조 문자는 그대로 둔다.
Next.js App Router에서 loading.tsx는 같은 세그먼트의 page와 그 아래(하위 layout 포함)를 suspense로 감싸지만, **같은 세그먼트의 layout은 감싸지 않는다**. 그래서 데이터를 기다릴 필요가 없는 공통 UI(탭바, 필터 헤더)를 page에서 layout으로 끌어올리면 스켈레톤에 덮이지 않고 처음부터 실제 모습으로 보인다.
쿼리 키(Query Key)는 TanStack Query가 캐시 항목을 식별하고 무효화 범위를 고르는 배열이다. 키를 일반적인 것에서 구체적인 것 순서로 쌓고, 한 곳(키 팩토리)에서 만들게 하면 부분 일치(Partial Matching)로 원하는 범위만 정확히 무효화할 수 있다.
XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.