~ / developer / query-string-parser

🔗 URL 쿼리스트링 파서

URL이나 ?뒤 문자열을 붙여 넣으면 도메인·경로·해시와 파라미터를 표로 나누고 한글·특수문자를 디코딩해 JSON으로 바꿔 줘요.

JSON
광고

사용법

  1. 분석할 URL 전체를 입력칸에 붙여 넣어요. ?a=1&b=2 처럼 물음표 뒤 부분만 붙여 넣어도 돼요.
  2. 바로 아래에 주소가 프로토콜·도메인·포트·경로·해시로 나뉘고, 파라미터가 이름·값 표로 보여요. 값은 한글과 특수문자로 풀어서(디코딩) 보여 줘요.
  3. 오른쪽 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 인코더·디코더를 쓰세요.

알아 두면 편한 규칙

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)이 붙은 링크는 순서나 값이 한 글자만 달라져도 무효가 될 수 있으니 수정할 때 조심하세요.

값이 이상하게 보일 때 점검 순서

  1. 이중 인코딩인지 보세요. 디코딩한 값이 또 %EA%B0%95 처럼 보이면 인코딩이 두 번 된 거예요. 값을 한 번 더 디코딩하면 원래 글자가 나와요.
  2. 값 안에 & 나 = 가 들어 있는데 인코딩되지 않았다면, 그 뒤가 별개의 파라미터로 쪼개졌을 가능성이 커요. 이름·값 표에서 엉뚱한 이름이 보이는지 확인하세요.
  3. 한글이 깨져 %C0%CC 같은 값으로 보이면 UTF-8 이 아니라 EUC-KR 같은 옛 인코딩일 수 있어요. 옛 사이트 주소에서 가끔 나타나요.
  4. 해시(#) 뒤에 ? 가 한 번 더 나오는 단일 페이지 앱 주소(/#/list?page=2)는 쿼리스트링이 해시 안에 들어 있어요. 이 경우 해시 부분만 따로 복사해 넣어 보세요.

이럴 때 써요

코드에서 직접 다룰 때는 문자열을 잘라 붙이지 말고 언어가 제공하는 도구를 쓰는 편이 안전해요. 자바스크립트는 new URL(주소).searchParams 로 읽고 searchParams.set('page', 3) 처럼 바꾸면 인코딩을 알아서 처리해요. 이 도구의 결과 JSON 은 같은 방식으로 읽은 것이라, 코드가 받을 값과 거의 같다고 보면 돼요. 서버 언어마다 같은 이름 반복이나 빈 값을 처리하는 방식이 다르니 중요한 로직은 직접 로그를 찍어 확인하세요.

입력한 주소는 이 브라우저 안에서만 분석되고 서버로 전송되지 않아요. 프로토콜 없이 example.com/path?x=1 처럼 도메인으로 시작하면 https 로 간주해 분석해요. 아주 특이한 형식의 주소(예: 같은 키에 대괄호 배열 a[]=1)는 이름을 그대로 a[] 로 보여 줘요.

자주 묻는 질문

쿼리스트링이 뭐예요?
주소 맨 뒤 ? 다음에 이름=값 형태로 붙는 정보예요. 여러 개는 & 로 구분해요. 검색어, 페이지 번호, 광고 유입 정보 같은 값을 서버나 페이지에 전달하는 데 써요.
한글이 %EA%B0%95 처럼 보이는 이유는요?
URL 에는 한글과 공백, 일부 특수문자를 그대로 쓸 수 없어서 UTF-8 바이트를 퍼센트(%) 인코딩으로 바꿔 쓰기 때문이에요. 이 도구는 자동으로 풀어서 보여 줘요.
+ 가 공백으로 바뀌어요.
폼 형식(x-www-form-urlencoded)에서는 공백을 +로 써서 이 도구도 같은 규칙으로 풀어요. 진짜 + 문자는 %2B 로 인코딩돼 있어야 해요.
같은 이름이 여러 번 있으면요?
표에는 모두 그대로 나오고 JSON 에서는 배열로 묶여요. 서버 쪽에서 첫 값, 마지막 값, 배열 중 어떻게 받는지는 프레임워크마다 달라요.
# 뒤는 왜 파라미터에 안 들어가요?
# 뒤(해시, 프래그먼트)는 브라우저 안에서 페이지 위치를 가리키는 용도라 서버로 전송되지 않아서 쿼리스트링과 분리해서 보여 줘요.
URL 이 너무 길면 문제가 되나요?
표준에는 정해진 한계가 없지만 브라우저·서버·프록시마다 길이 제한이 달라 매우 긴 주소는 오류가 날 수 있어요. 많은 데이터는 POST 로 보내는 것이 안전해요.

관련 도구

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →