Study

[HTTP 완벽 가이드] 16장 : 국제화

이웃비 2021. 1. 28. 11:24

이 장에서는 HTTP가 어떻게 여러 언어 문자들의 체계 및 표준과 상호작용하는지 설명한다.

 


 

1 . 국제적인 콘텐츠를 다루기 위해 필요한 HTTP 지원

 

HTTP 메시지는 어떤 언어로 된 콘텐츠든, 이미지, 동영상 혹은 그 외 다른 종류의 미디어처럼 실어 나를 수 있다.

국제 콘텐츠를 지원하기 위해, 서버는 클라이언트에게 각 문서의 문자와 언어를 알려줘서, 클라리언트가 올바르게 문서를 이루고 있는 비트들을 문자들로 풀어내고, 올바르게 처리해서 사용자에게 콘텐츠를 제공해줄 수 있도록 할 필요가 있다.

 서버는 클라이언트에게 문서의 문자와 언어를HTTP Content-Type charset 매개변수와 Content-Language 헤더를 통해 알려준다. 동시에 클라이언트는 서버에게 사용자가 어떤 언어를 이해할 수 있고 어떤 알파벳의 코딩 알고리즘이 브라우저에 설치되어 있는지 말해줄 필요가 있다. 

 

2. 문자집합과 HTTP

 

 

2.1 차셋(Charset)은 글자를 비트로 변환하는 인코딩이다

 

  •  HTTP 차셋 값은 어떻게 엔터티 콘텐츠 비트들을 특정 문자 체계의 글자들로 바꾸는지 말해준다. 각 차셋 태그는 비트들을 글자들로 변환하거나 혹은 그 반대의 일을 해주는 알고리즘을 명명한다.
  • charset 매개변수는 클라이언트에게 어떻게 비트들을 글자들로 변환하는지 알려준다.

 

2.2 문자집합과 인코딩은 어떻게 동작하는가

 

  1. 문서를 이루는 비트들은, 특정 코딩된 문자집합의 특정 문자로 식별될 수 있는 문자 코드로 변환된다. 
  2. 문자 코드는 코딩된 문자집합의 특정 요소를 선택하기 위해 사용된다. 

 

2.3 잘못된 차셋은 잘못된 글자들을 낳는다

 

만약 클라이언트가 잘못된 charset 매개변수를 사용한다면, 클라이언트는 이상한 깨진 글자를 보여주게 될 것이다.

 

2.4 표준화된 MIME 차셋 값

 

특정 문자 인코딩과 특정 코딩된 문자집합의 결합을 MIME 차셋이라고 부른다. HTTP는 표준화된 MIME 차셋 태그를 Content-Type과 Accept-Charset 헤더에 사용한다. MIME 차셋의 값은 IANA에 등록되어 있다.

 

2.5 Content-Type charset헤더와 META 태그

 

웹 서버는 클라이언트에게 MIME 차셋 태그를 charset 매개변수와 함께 Content-Type 헤더에 담아 보낸다. 만약 문자집합이 명시적으로 나열되지 않았다면, 수신자는 문서의 콘텐츠로부터 문자지집합을 추측하려 시도한다

 

2.6 Accept-Charset 헤더

 

HTTP클라이언트는 서버에게 정확히 어떤 문자 체계를 그들이 지원하는디 Accept-Charset 요청 헤더를 통해 알려준다. Accept-Charset 헤더의 값은 클라이언트가 지원하는 문자 인코딩의 목록을 제공한다.

 

3. 다중언어 문자 인코딩에 대한 지침

3.1 문자집합 용어

 

  • 문자 : 알파벳 글자, 숫자, 구두점, 표의문자, 기호 등 글쓰기의 최소 단위
  • 글리프 : 하나의 글자를 표현하기 위한, 획의 패텅이나 다른 것과 구분되는 유일한 시각적 형태
  • 코딩된 문자 : 각 글자에 할당된 유일한 숫자
  • 코드 공간 : 문자 코드 값으로 사용하려고 계획해 둔 정수의 범위
  • 코드 너비 : 각 문자 코드의 비트 개수
  • 사용 가능 문자 집합 : 글자들에 대한 특정한 작업 집합
  • 코딩된 문자집합 : 사용 가능 문자집합을 받아서 각 글자에 코드 공간의 코드를 할당해주는 코딩된 문자들의 집합
  • 문자 인코딩 구조 : 숫자로 된 문자 코드들을 콘텐츠 비트의 연속으로 인코딩하는 알고리즘

 

3.2 '차셋(Charset)'은 형편없는 이름이다

 

MIME 차셋 값은 데이터 비트를 고유한 문자의 코드로 매핑하는 알고리즘의 이름이다. 이것은 문자 인코딩 구조와 코딩된 문자집합의 개념을 합친 것이다.이 용어는 엉성한데, 이미 문자 인코딩 구조와 코딩된 문자집합에 대한 출판된 표준이 존재하기 때문이다.

 

 

3.3 문자

 

  • 문자는 쓰기의 기본적인 구성요소다
  • 문자는 글꼴이다 스타일에 독립적이다
  • 한 글자는 여러 가지 다른 쓰기 형태를 가질 수 있다.

 

3.4 글리프, 연자 그리고 표현 형태

 

  • 문자는 유일하고 추상화된 언어의 요소이며, 글리프는 각 글자를 그리는 특정한 방법이다.
  • 각 문자는 미적인 양식과 스크립트에 따라 여러 글리프를 가진다.
  • 일반적인 규칙은, 글리프 하나를 다른 것으로 바꾸었을 때 텍스트의 의미가 바뀐다면 그 두 글리프들은 서로 다른 글자다

 

3.5 코딩된 문자집합

 

코딩된 문자집합은 보통 코드 번호로 인덱싱된 배열로 구현된다.

 

  •  US-ASCII :모든 문자집합의 어머니  - 아스키는 '정보교환을 위한 미국 표준 코드'로 표준화된 가장 유명한 코딩된 문자집합니다
  •  iso-8859 - 국제적인 글쓰기를 위해 글자들을 하이 비트를 이용해서 추가한, US-ASCII의 8비트 확대집합들이다
  •  JIS X 0201 - 아스키를 일본어 가타카나 반각문자를 더해 확장한 극단적으로 작은 문자집합이다
  •  JIS X 0208 과 JIS X 0212 
  •  UCS - 전세계의 모든 글자를 하나의 코딩된 문자집합으로 통합하려고 노력하는 세계적인 표준이다

 

3.6 문자 인코딩 구조

 

  • 고정폭 - 각 코딩된 문자를 고정된 길이의 비트로 표현한다
  • 가변폭(비모달) - 다른 문자 코드번호에 다른 길이의 비트를 사용한다
  • 가변폭(모달) - 다른 모드로의 전환을 위한 특별한 'escape' 패턴을 사용한다

인코딩 구조

  • 8비트 - 간단히 각 문자 코드를 그에 대응하는 8비트 값으로 인코딩한다
  • UTF-8 인키있는 UCS를 위해 설계된 문자 인코딩 구조다. 문자코드의 값을 위해 비모달 가변길이 인코딩을 사용한다
  • iso-2022-jp - 일본어 인터넷 문서를 위해 널리 사용되는 인코딩이다
  • euc-jp - 일본어 인코딩이며, 'Extended Unix Code'의 약자로, 유닉스 운영체제에서 아시아 문자들을 지원하기 위해 처음 개발되었다.
  • euc-kr - 한글 인터넷 문서를 위해 널리 사용되는 가변길이 인코딩으로, KS X 1003 과 KS X 1001 의 두 가지 문자 집합을 지원한다

 

4. 언어 태그와 HTTP

 

4.1 Content-Language 헤더

 

  • 엔터티가 어떤 언어 사용자를 대상으로 하고 있는지 서술한다.
  • Content-Language 헤더는 텍스트 문서만을 위한 것이 아니라 오디오 크립, 동영상 그리고 애플리케이션도 특정 언어 사용자를 대상으로 할 수 있다.

 

4.2 Accept-Language 헤더

 

클라이언트는 자신이 이해할 수 있는 콘텐츠를 요청하기 위해 Accept-Language와 Accept-Charset을 사용할 수 있다.

 

4.3 언어 태그의 종류

 

  • 일반적인 언어의 종류

  • 특정 국가의 언어

  • 방언

  • 지방어

  • 그외의, 다른 언어의 변형이 아닌 표준 언어

  • 비표준 언어

4.4 서브 태그

 

  • 첫번째 서브태그 : 주 서브태그. 표준화되어있다.
  • 두번째 서브태그 : 선택적이고 자신만의 이름 표준을 따른다
  • 세번째 서브태그 : 등록되어 있지 않다

 

4.5 대소문자의 구분 및 표현

 

모든 태그는 대소문자가 구분되지 않으나, 관용적으로 언어를 나타낼 때는 소문자를 사용하고, 국가를 나타낼 때는 대문자를 사용한다.

 

 

5. 국제화된 URI

 

5.1 URI에서 사용될 수 있는 문자들

 

URI에서 사용할 수 있는 US-ASCII 문자들의 부분집합은 예약된 문자들, 예약되지 않은 문자들, 이스케이프 문자들로 나뉜다. 예약되지 않은 문자들은 그것들을 허용하는 URI의 어떤 구성요소에서 일반적으로 사용될 수 있다.

 

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

 

  • URI 이스케이프는 예약된 문자나 다른 지원하지 않는 글자들을 안전하게 URI에 삽입할 수 있도록 방법을 제공한다. 이스케이프는 퍼센트 글자 하나와 뒤이은 16진수 글자 둘로 이루어진 세 글자 문자열이다.
  • 내부적으로 HTTP애플리케이션은 URI를 데이터가 필요할 때만 언이스케이핑 해야한다.
  • 애플리케이션은 어떤 URI도 결코 두번 언이스케이핑 되지 않도록 해야 한다
  • 이스케이프 값들은 US-ASCII 코드의 범위에 있어야 한다

 

6. 기타 고려사항

 

  • 헤더의 명세와 맞지 않는 데이터 - HTTP헤더는 반드시 US-ASCII 문자집합의 글자들로만 이루어져야 한다.
  • 날짜 - HTTP애플리케이션은 명세에 맞지 않는 날짜를 관대하게 받아들여야 한다
  • 도메인 이름 - 웹 브라우저들은 퓨니코드 기법을 이용하여 사용자가 입력한 다국어로 된 도메인 이름을 알파벳과 숫자 들으로 된 도메인 이름으로 변환한다.

 

 


출처 : 데이빗 골리 외 4인HTTP 완벽 가이드 :웹은 어떻게 동작하는가이응준 , 정상일 옮김, 인사이트, 2014