본문 바로가기
개발

[HTTP 완벽 가이드] 16장 국제화 16.4~16.6

by soyooooon 2025. 2. 4.
반응형

16.4 언어 태그와 HTTP

언어 태그는 언어에 이름을 붙이기 위한 짧고 표준화된 문자열이다. '한국어'를 표현한다고 할 때도 한국어, Korean, Ko, K 등 사용하는 사람에 따라 표시할 수 있는 방법이 다양하기 때문에 표준화된 이름을 사용한다. 모든 태그는 대소문자가 구분되지 않지만 관용적으로 언어를 나타낼 때는 소문자, 국가를 나타낼 때는 대문자를 사용한다.

Content-Language 헤더

엔터티가 어떤 언어 사용자를 대상으로 하고 있는지 서술한다.

# 프랑스어 사용자를 대상으로 하고 있을 때
Content-Language: fr

# 마오리 언어와 영어가 모두 사용되는 경우
Content-Language: mi, en

# 여러 언어를 다루지만 대상자가 영어 사용자인 경우 ex. 영어 사용자들을 위한 라틴 교재
Content-Language: en

Accept-Language 헤더

클라이언트가 서버에게 요청하는 언어. 웹 서버가 어떤 자원에 대해 여러 언어로 된 버전을 갖고 있다면 선호하는 언어로 된 콘텐츠를 전달할 수 있다.

서브태그

언어 태그는 하이픈으로 분리된 하나 이상의 서브태그로 이루어져 있다. 첫 번째와 두 번째 언어 서브태그의 값은 여러 가지 표준 문서와 이를 관리하는 조직에 의해 정의된다.

첫 번째 서브태그(주 서브태그) - 두 번째 서브태그 - 세 번째 서브태그

ex) 마서스 버니어드 섬의 수화
sgn-US-MA
수화-미국-매사추세츠 지역 변종
  • 첫 번째 서브태그 : 주 서브태그라고 불리며 표준화되어 있다.
  • 두 번째 서브태그 : 선택적, 자신만의 이름 표준을 따른다.
  • 세 번째 서브태그 : 이 이상의 서브 태그는 등록되어 있지 않다.

IANA 언어 태그 등록

IANA는 RFC 3066의 규칙에 따라 표준 언어 태그의 목록을 관리한다. 만약 언어 태그가 표준 국가와 언어 값의 조합이라면 해당 태그는 굳이 등록되지 않아도 되지만 표준 국가와 언어 값으로 구성될 수 없는 언어 태그들은 IANA에 등록될 필요가 있다.

첫 번째 서브태그

  • 두 글자라면 ISO 639와 639-1 표준의 언어 코드다
  • 세 글자라면 ISO 639-2 표준과 확장에 열거된 언어 코드다
  • 글자 'i'라면 IANA에 등록된 언어 코드다
  • 글자 'x'라면 특정 개인이나 집단 전용의 비표준 확장 서브태그다.

두 번째 서브태그

보통은 표준화된 국가 토큰이지만 IANA에 등록된 다른 문자열일 수도 있다.

  • 두 글자라면 ISO 3166에 정의된 국가/지역이다.
  • 3~8글자라면 IANA에 등록된 것이다.
  • 한 글자는 잘못된 것이다.

나머지 서브태그

8자 이하의 알파벳과 숫자로 이루어져야 한다.

 

16.5 국제화된 URI

국제적 가독성 vs 의미 있는 문자들

URI의 국제적 사용을 위해 설계자들은 제한된 공통 문자집합을 선택했고, 이 작은 문자집합은 전 세계 대부분의 소프트웨어와 키보드에서 지원되지만, 문자집합에는 제한이 있기 때문에 URI는 비영어권 사람들도 쉽게 사용하고 기억할 수 있도록 그들의 문자로 만들 수 있게 설계되지는 못했다. URI 저자들은 리소스 식별자의 가독성과 공유 가능성의 보장이 더 중요하다고 여겼기 때문에 ASCII 문자들의 제한된 집합으로 URI를 갖게 되었다.

이스케이핑과 역이스케이핑

URI 이스케이프는 예약된 문자나 스페이스와 같이 다른 지원하지 않는 글자들을 안전하게 URI에 삽입할 수 있는 방법을 제공한다. 이스케이프는 %하나와 뒤이은 16진수 글자 둘로 이루어진 세 글자 문자열이다. 16진수 두 글자는 US-ASCII 문자의 코드를 나타낸다.

내부적으로 HTTP 애플리케이션은 URI를 데이터가 필요할 때만 언이스케이핑 해야 한다. 데이터의 손실을 유발할 수 있기 때문에 URI는 두 번 언이스케이핑 되지 않도록 해야 한다. 또한 이스케이프 값들은 US-ASCII 코드의 범위에 있어야 오용이나 부정확성 등의 문제를 피할 수 있다.

 

16.6 기타 고려사항

  • 헤더와 명세에 맞지 않는 데이터 : HTTP 헤더는 반드시 US-ASCII 문자집합의 글자들로만 이루어져야 한다. 하지만 때때로 잘못된 문자 구분 라이브러리 사용 등의 이유로 때때로 127보다 큰 코드 값을 갖는 잘못된 문자를 받게 될 수도 있다.
  • 날짜 : HTTP 명세는 GMT 날짜 형식을 명확히 정의하고 있지만 모든 웹 서버와 클라이언트가 규칙을 따르고 있지는 않다.
  • 도메인 이름 : 국제화 문자를 포함하는 도메인 이름을 '국제화 도메인 이름'이라고 하는데, 오늘날 대부분의 웹브라우저가 퓨니코드를 이용해 이를 지원한다. RFC 3492로 정의되어 있다.
반응형