URL - Google에서 '안녕하세요' 검색

YJ·2023년 4월 7일

Google 브라우저에서 '안녕하세요'라고 한글로 검색해보았다.

URL

URL이란?

  • 사용자가 원하는 정보의 위치가 어디인지, 정보의 종류는 무엇인지 파악할 수 있도록 웹페이지의 정보 구조를 반영한 것

  • 웹에 존재하는 자원, 리소스를 구분하는 식별자

URL 세부 구성

  • 프로토콜
    • 서브 도메인
    • 도메인 및 도메인 확장자
    • 포트
    • 서브 디렉토리
    • 웹 페이지
  • url 필수 구성
    • 프로토콜
    • 서브 도메인
    • 도메인 및 도메인 확장자
    • 서브 디렉토리
  • 각 구조의 의미
    • 프로토콜
      - 서버와 클라이언트 사이에 어떤 방법으로 자원에 접근할지 정한 통신 규약
      - scheme이라고도 함
      - URL의 가장 앞 부분 위치
      - 웹 브라우저에서 가장 많이 사용하는 프로토콜
      - http:
      - https:
      - http 보다 보안이 강화된 버전
      - 웹 브라우저와 웹 서버 사이에서 웹 문서 및 구성 자원을 전송하는 프로토콜
    • 사용자 정보
    • 도메인
      • URL에서 웹 서버의 위치를 지정
      • 도메인 명, IP 주소로 사용 가능
      • 호스트명:포트번호 or 호스트명 형태로 사용
      • 표준 포트 번호를 사용하면 보통 생략
      • ex> https: 443, http: 80
      • 구분
        • 서브 도메인
          - 특정 웹 사이트 접근 시 사용
          - ex> www.
          • 도메인 및 도메인 확장자
            - 호스트를 식별하는 호스트명
    • 포트번호
      • 웹 서버에서 자원에 접근하기 위해 사용하는 게이트 번호
    • 서브 디렉토리
      • 해당 페이지가 위치한 파일 시스템의 경로
      • 디렉토리, 폴더로 생각
      • 서브 디렉토리를 통해 페이지가 현재 어느 페이지의 하위로 들어가 있는지 확인 가능
    • 매개 변수
      • 웹서버에 보내는 추가 매개변수
      • 구성
        • Query
        • Parameters
      • 형태
        • key=value 형태
        • 여러 개면 & 문자로 구분
        • 웹 서버마다 어떤 query, parameter를 지원하는 지는 다름
        • 지원하지 않는 query, parameter는 무시
        • ex> key1=value1&key2=value2
    • 부분 식별자
      • #으로 시작하는 부분 식별자
      • 자원의 세부 부분 지정

url 특징

  • ASCII
    • ASCII 코드 표의 문자들만 허용
    • ASCII 코드 표에서 허용되지 않는 문자의 경우 %로 시작하는 16진수로 문자코드를 넣음
      • 공백문자는 +, %20 으로 치환
    • 다국어 지원
      • ASCII 코드 표의 문자들 외에도 utf-8과 같은 유니코드에서 지원하는 문자도 사용가능
      • 하지만, 복잡해짐
      • 각 바이트의 16진수에 %를 붙여 사용

Google 브라우저에서 '안녕하세요' 검색 시 발생하는 URL 분석

  • URL
    https://www.google.com/search?q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94&oq=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94&aqs=chrome.0.35i39j46i433i512j0i512l4j46i340i512l2j0i512l2.2245j0j15&sourceid=chrome&ie=UTF-8

  • 프로토콜: https

  • 프로토콜과 도메인 구분 : //

  • 서브 도메인: www

  • 도메인 및 도메인 확장자: google.com

  • 포트 번호: 아마 443(https여서)

  • 서브 디렉토리: /search...

  • 매개변수, 부분 식별자

    • 서브 디렉토리 부분의 URL의 문자가 이해하기 어려운 형태인 이유

      • URL에는 특수문자를 사용하면 이해하기 어려움

        • 인코딩 후 사람이 이해할 수 있는 문자로 인코딩 되는 경우
          • 영어, 숫자, 특수문자 중 (-) 등
        • 인코딩 후 사람이 이해할 수 없는 문자로 인코딩 되는 경우
          • 쉼표, [], 한글 등
      • URL 공유 시 위의 특수문자의 경우 인코딩되어 길이가 길어져 이해하기 어려운 형태가 됨

      • 위의 경우도 '안녕하세요'라는 한글이 인코딩되어 사람이 이해하기 어려운 url로 변환

      • 유니코드 한글 코드표로 query에 들어간 '안녕하세요' 분석

        • 한글
          - 조합형 방식
          - 한글의 편리함을 그대로 가지고 있는 방식입니다. 자음과 모음을 초성, 중성, 종성으로 구분하여 문자를 작성하는 방식을 이야기 합니다. 초성, 중성, 종성을 각기 따로 인식하고 그 것들을 하나의 바이트로 인식하고 조합되어, 총 3바이트의 문자로 인식합니다. (다른 종류도 있긴 하지만 3바이트 방식이 가장 일반적인것 같습니다.)

        • url에서 한글의 표현
          - %초성%중성%종성
          - 초성, 중성, 종성은 1바이트
          - 1바이트는 8개의 비트
          - 따라서, 16진수 표현으로 1바이트를 표현

        • '안녕하세요' url에서 한글 표현

          • key: q
            - value를 확인하니 이 부분은
            - 검색 엔진에 '검색한 단어'에 대한 key 인 것 같다.
            - value로 '검색한 단어'가 들어감

          • value

            • '안'

              • UTF8: 236, 149, 136;
              • 초성: %EC
              • 중성: %95
              • 종성: %88
                - 'q=%EC%95%88' 부분 완성
            • '녕'

              • UTF8: 235, 133, 149;
              • 초성: %EB
              • 중성: %85
              • 종성: %95
                - 'q=%EC%95%88%EB%85%95' 부분 완성
            • '하'

              • UTF8: 237, 149, 152;
              • 초성: %ED
              • 중성: %95
              • 종성: %98
              • 'q=%EC%95%88%EB%85%95%ED%95%98' 부분 완성
            • '세'

              • UTF8: 236, 132, 184;

              • 초성: %EC

              • 중성: %84

              • 종성: %B8

              • 'q=q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8' 부분 완성

            • '요'

              • UTF8: 236, 154, 148;
              • 초성: %EC
              • 중성: %9A
              • 종성: %94
            • 'q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94' 부분 완성

          • key: 검색한 문장을 담은 key

          • value: 검색한 문장을 url에 형식으로 encoding하여 담음

          • 필자는 '안녕하세요'를 검색 엔진에 입력

          • url은 ASCII 문자에 있는 것은 그대로 인코딩 됨

          • ASCII 문자에 있지 않은 것은 %00과 같이 한 바이트씩 나눠서 인코딩

          • 한글은 초성, 중성, 종성 3부분을 1바이트씩 나눠서 url로 인코딩

          • 그래서, 한글의 한글자는 총 3바이트를 차지

            • 형태: %xx%xx%xx
            • x는 16진수
          • Google은 ASCII 코드 표에 없는 문자는 UTF-8 인코딩을 사용한다고 함
            Google URL 구조 가이드라인

          • key: oq

          • value: 'q' key와 동일한 value가 들어감

          • &sourceid=chrome&ie=UTF-8

          • key: sourceid

          • value: chrome

            • 웹의 자원의 호스트가 chrome인 것을 나타내는 것 같다.
          • key: ie

          • value: UTP-8

            • url 인코딩 방법이 UTF-8 형식을 따라서 인코딩 했다는 것 같다.

참조
URL이란 무엇인가?
더 나은 웹
한글 인코딩 종류 및 문제점 파악
유니코드(UTF-8) 한글 코드표

profile
dev

0개의 댓글