🔗 URL 쿼리스트링 파서
URL이나 ?뒤 문자열을 붙여 넣으면 도메인·경로·해시와 파라미터를 표로 나누고 한글·특수문자를 디코딩해 JSON으로 바꿔 줘요.
사용법
- 분석할 URL 전체를 입력칸에 붙여 넣어요.
?a=1&b=2처럼 물음표 뒤 부분만 붙여 넣어도 돼요. - 바로 아래에 주소가 프로토콜·도메인·포트·경로·해시로 나뉘고, 파라미터가 이름·값 표로 보여요. 값은 한글과 특수문자로 풀어서(디코딩) 보여 줘요.
- 오른쪽 JSON 칸은 파라미터를 객체로 바꾼 결과예요. 같은 이름이 여러 번 나오면 배열로 묶어요. copy 로 복사해서 코드나 테스트 데이터에 쓰세요.
쿼리스트링의 구조
주소창의 ? 뒤에 붙는 이름=값 묶음을 쿼리스트링이라고 해요. 여러 개는 & 로 이어 붙이고, 맨 뒤에 # 이 붙으면 그 뒤는 해시(페이지 안 위치)라서 서버로 전송되지 않아요. 예를 들어 https://shop.example.com/search?q=%EA%B0%95%EC%95%84%EC%A7%80&page=2#reviews 는 프로토콜 https, 도메인 shop.example.com, 경로 /search, 파라미터 q=강아지 와 page=2, 해시 reviews 로 나뉘어요. 한글이나 공백, 특수문자는 주소에 그대로 쓸 수 없어서 %EA%B0%95 같은 퍼센트 인코딩으로 바뀌어 있어요. 직접 인코딩·디코딩을 하려면 URL 인코더·디코더를 쓰세요.
알아 두면 편한 규칙
- + 는 공백이에요. 폼 전송 방식(application/x-www-form-urlencoded)에서는 공백이
+로 쓰이므로 이 도구도%2B가 아닌+는 공백으로 풀어요. 진짜 플러스 기호는%2B로 인코딩돼요. - 값이 비어 있어도 이름만 있으면 파라미터로 취급해요.
?c와?c=는 둘 다 이름 c, 값 빈 문자열이에요. - 같은 이름을 여러 번 쓰면 순서대로 모두 유지돼요.
tag=a&tag=b는 JSON 으로"tag": ["a", "b"]가 돼요. 서버 프레임워크마다 첫 값만 쓰거나 마지막 값만 쓰거나 배열로 받는 차이가 있어서, 이 표시를 보고 어떻게 처리되는지 확인하세요. - 대소문자는 구분해요.
Page=1과page=1은 다른 파라미터예요. - 길이 제한: 표준에는 정해진 한계가 없지만 브라우저·서버·프록시마다 URL 길이 제한이 있어서 수천 자를 넘기는 주소는 문제가 될 수 있어요. 긴 데이터는 POST 본문으로 보내는 것이 안전해요.
UTM 파라미터 구분
마케팅 링크에 붙는 utm_source, utm_medium, utm_campaign, utm_term, utm_content 는 표에서 "UTM" 으로 따로 표시해요. 광고·뉴스레터 링크에서 어떤 유입 경로가 붙어 있는지 확인할 때 편해요. UTM 링크를 직접 만들고 싶다면 UTM 링크 빌더를 이용하세요. 참고로 개인정보나 로그인 토큰을 쿼리스트링에 담으면 브라우저 기록, 서버 로그, 공유 링크로 새어 나갈 수 있어서 주의해야 해요.
실제 분해 예시
아래 주소를 이 도구에 넣으면 이렇게 나눠져요.
https://shop.example.com:8080/search/list?q=%EA%B0%95%EC%95%84%EC%A7%80+%EC%82%AC%EB%A3%8C&page=2&tag=a&tag=b&utm_source=naver#reviews 프로토콜 https 도메인 shop.example.com 포트 8080 경로 /search/list 해시 reviews q 강아지 사료 (%EA%B0%95… 풀이, + 는 공백) page 2 tag a, b (같은 이름 2회 → 배열) utm_source naver (UTM)
파라미터가 5개로 세어지는 것은 tag 가 두 번 나오기 때문이에요. 표에는 5줄이 모두 나오고, JSON 에서는 tag 가 하나의 배열로 합쳐져 4개의 키가 돼요.
자주 보는 파라미터 이름
| 이름 | 흔한 쓰임 | 비고 |
|---|---|---|
q, query, keyword | 검색어 | 사이트마다 이름이 달라요 |
page, p, offset | 페이지 번호·건너뛸 개수 | 1부터인지 0부터인지는 서비스 규칙 |
sort, order | 정렬 기준 | 값 목록은 서비스 문서 참고 |
utm_* | 광고·캠페인 유입 구분 | 분석 도구가 읽는 값, 페이지 내용엔 영향 없음 |
ref, from | 유입 경로 표시 | 서비스 자체 규칙 |
token, key, session | 인증·식별 | 링크를 공유하면 노출되니 주의 |
위 이름은 관례일 뿐 표준이 아니에요. 같은 p 가 어떤 사이트에서는 페이지 번호이고 다른 사이트에서는 상품 코드일 수 있어서, 의미는 해당 서비스의 문서나 동작을 보고 판단해야 해요. 파라미터 순서도 대부분 결과에 영향이 없지만, 서명(signature)이 붙은 링크는 순서나 값이 한 글자만 달라져도 무효가 될 수 있으니 수정할 때 조심하세요.
값이 이상하게 보일 때 점검 순서
- 이중 인코딩인지 보세요. 디코딩한 값이 또
%EA%B0%95처럼 보이면 인코딩이 두 번 된 거예요. 값을 한 번 더 디코딩하면 원래 글자가 나와요. - 값 안에
&나=가 들어 있는데 인코딩되지 않았다면, 그 뒤가 별개의 파라미터로 쪼개졌을 가능성이 커요. 이름·값 표에서 엉뚱한 이름이 보이는지 확인하세요. - 한글이 깨져
%C0%CC같은 값으로 보이면 UTF-8 이 아니라 EUC-KR 같은 옛 인코딩일 수 있어요. 옛 사이트 주소에서 가끔 나타나요. - 해시(
#) 뒤에?가 한 번 더 나오는 단일 페이지 앱 주소(/#/list?page=2)는 쿼리스트링이 해시 안에 들어 있어요. 이 경우 해시 부분만 따로 복사해 넣어 보세요.
이럴 때 써요
- 광고·추적 링크에 어떤 값들이 붙어 있는지 확인할 때
- API 요청 주소를 디버깅할 때 값이 제대로 들어갔는지 눈으로 볼 때
- 검색 결과 주소에서 검색어(
q,query)나 페이지 번호를 뽑아 볼 때 - URL 의 파라미터를 JSON 으로 옮겨 테스트 데이터나 설정 파일을 만들 때
- 공유받은 링크에 이상한 추적 파라미터나 개인 식별 값이 없는지 점검할 때
코드에서 직접 다룰 때는 문자열을 잘라 붙이지 말고 언어가 제공하는 도구를 쓰는 편이 안전해요. 자바스크립트는 new URL(주소).searchParams 로 읽고 searchParams.set('page', 3) 처럼 바꾸면 인코딩을 알아서 처리해요. 이 도구의 결과 JSON 은 같은 방식으로 읽은 것이라, 코드가 받을 값과 거의 같다고 보면 돼요. 서버 언어마다 같은 이름 반복이나 빈 값을 처리하는 방식이 다르니 중요한 로직은 직접 로그를 찍어 확인하세요.
입력한 주소는 이 브라우저 안에서만 분석되고 서버로 전송되지 않아요. 프로토콜 없이 example.com/path?x=1 처럼 도메인으로 시작하면 https 로 간주해 분석해요. 아주 특이한 형식의 주소(예: 같은 키에 대괄호 배열 a[]=1)는 이름을 그대로 a[] 로 보여 줘요.