URLSearchParams.sort()로 쿼리 정렬: 같은 키의 값 순서는 바뀌지 않습니다

쿼리 정렬 같은 키 순서 유지라는 제목과 b=7&a=2&a=5가 a=2&a=5&b=7로 정렬되는 코드 카드의 개념 이미지.

URLSearchParams.sort()는 쿼리의 키를 기준으로 현재 객체를 정렬합니다. 같은 키가 여러 번 나오면 그 값들의 상대적인 순서는 유지하며, 정렬된 문자열을 반환하지는 않습니다.

추출한 링크 목록을 비교하려고 정렬할 때는 ‘키 정렬’과 ‘값 정렬’, ‘중복 제거’를 같은 작업으로 생각하지 마세요. 원본과 작업용 객체를 구분하면 무엇이 바뀌었는지 설명하기 쉽습니다.

1. 키 정렬과 안정 정렬의 의미

MDN은 sort()가 객체를 제자리에서 변경하며 키의 UTF-16 코드 단위 값을 기준으로 정렬한다고 설명합니다. 같은 키끼리는 기존 상대 순서를 보존하는 안정 정렬입니다.

따라서 이름이 같은 키의 값을 작은 숫자부터 다시 배열하는 기능으로 읽으면 안 됩니다. 아래 자체 예제에서는 a 값 2와 5가 그 순서대로 남습니다. 반복된 키가 하나로 합쳐지는 작업도 아닙니다.

2. 원문을 보존하는 짧은 예제

const original = "b=7&a=2&a=5";
const working = new URLSearchParams(original);
const returned = working.sort();

console.log(original);
// b=7&a=2&a=5
console.log(working.toString());
// a=2&a=5&b=7
console.log(returned);
// undefined

원문 문자열은 별도의 변수에 남겨두고 작업용 객체를 정렬하는 예시입니다. 실제 주소를 수집했다면 원래 주소를 보관하는 열과 정렬 결과를 보는 열을 나눠두세요. 정렬한 결과를 원본 자료인 것처럼 덮어 적지 않는 방식입니다.

실제 업무에 적용하기 전에는 공개해도 되는 연습용 쿼리로 동작을 확인하세요. 고객정보나 인증 토큰이 들어 있는 실제 링크를 공유 예제로 옮길 필요는 없습니다. 이 글의 키와 숫자는 설명용으로 구성한 값입니다.

3. 반환값과 결과를 나눠 기록

원문 쿼리, 정렬한 쿼리, sort 메서드의 undefined 반환값을 나눠 보여주는 자체 예제 도표.

읽는 대상예제 결과의미
originalb=7&a=2&a=5보관한 입력 문자열
working.toString()a=2&a=5&b=7현재 객체를 문자열로 읽은 결과
returnedundefinedsort()의 반환값

‘정렬 함수가 undefined를 줬다’는 사실만 보고 정렬 실패라고 기록하지 마세요. 메서드가 무엇을 반환하는지와 작업용 객체가 어떻게 바뀌었는지는 다른 확인 항목입니다. 예제의 세 값을 나란히 출력하면 두 질문을 나눠볼 수 있습니다.

정렬 결과가 보기 좋다는 이유로 두 실제 링크의 동작까지 같다고 단정하지 않습니다. 링크를 어떤 기준으로 비교할지와 정렬 결과를 어느 곳에 사용할지는 별도의 작업 규칙으로 남겨두세요. 이 예제는 서버의 URL 처리 방식이나 실제 클릭 결과를 판정하는 도구가 아닙니다.

MDN sort() 정렬 기준·반환값 확인하기

4. 자주 묻는 질문

a 값도 숫자 순서로 정렬하나요?
키를 기준으로 정렬하며 같은 키의 상대 순서를 유지합니다. 값 정렬로 해석하지 않습니다.

같은 키가 두 번 있으면 하나를 없애나요?
정렬과 중복 제거는 별개의 작업입니다. 예제의 a 키 두 개는 그대로 남습니다.

정렬 결과를 바로 변수로 받으면 되나요?
sort() 반환값은 undefined입니다. 변경된 객체의 문자열은 toString() 등 필요한 방식으로 별도 읽습니다.

확인일: 2026년 10월 20일. 출처: MDN URLSearchParams.sort(). 코드·비교표·작업 메모는 직접 구성했습니다.

대표 썸네일은 AI로 제작한 개념 이미지입니다. 본문 예제 도표는 직접 구성했습니다.

이 블로그의 인기 게시물

디노 블로그 링크 추출기

디노 글자수 계산기

URL에 앰퍼샌드 표기가 남을 때: HTML 원문과 추출한 href를 구분하세요