■ URL 인코딩
──────
▶ 7비트만 처리할 수 있는 장비를 사용하는 경우, 8비트 데이터를 보낼 수 있게 만드는 인코딩 기술이 있습니다. 여기서 8비트 값을 7비트화 시키는 기술을 'URL 인코딩'이라고 부릅니다.
▶ 4비트 숫자를 첫 비트가 0인 8비트 숫자로 바꾸는 것이 URL 인코딩입니다.
▶ 숫자를 7비트 아스키 코드로 바꾸는 것이 URL 인코딩입니다.
▶ 방법
보내려는 데이터가 영어 알파벳 'A'라고 가정해봅시다.
'A'의 코드 값 : 0x41 (01000001) <-- 7비트 장비를 통과하더라도 데이터를 잃지 않습니다. 7비트 장비에 통과된 값은 첫번째 비트 '0'을 제외한 1000001 이지만 데이터를 인코딩하면서 다시 맨 처음에 0 값을 추가하기
때문이죠. 그래서 결과적으로 01000001 이 출력됩니다.
▶ but!
──────
한글의 경우 첫번째 비트 값이 '1'이 들어가기 때문에 7 비트 장비를 통과하면 앞자리 비트가 0으로 바뀌어 깨지게 됩니다.
'가'의 코드 값 : 0xAC00(10101100 00000000) <-- 7비트 장비를 통과 후 00101100 0000 의 값이 출력되어 데이터가 깨집니다.
▶ 해결
'가'의 코드 값(0xAC00)을 ASCII 코드로 문자화 시킵니다.
만약 유니코드 값을 그대로 ASCII 코드로 문자화 시킨다면,
%AC%00 : '%' -> 25 'A'- > 41 'B' -> 43 'C' -> 25 '0' -> 30 '0' -> 30이 될 것입니다. 물론 2바이트로 보내면 될 것을 ASCII 코드로 문자화 시키면 6 바이트로 보내야 합니다. 이에 따라 보내는 데이터의 크기는 커지지만 7비트 장비를 무사히 통과할 수 있습니다.
GET 또는 POST 요청을 할 때 보내는 데이터는 웹 브라우저가 자동으로 URL
인코딩을 합니다. 그 후에 서블릿 컨테이너가 자동으로 디코딩을 합니다.
개발자가 따로 인코딩/디코딩을 할 필요가 없어집니다.
▶ 단, 쿠키로 데이터를 보낼 때는 개발자가 인코딩을 해주어야 하고,
그것을 다시 읽을 때는 개발자가 디코딩 해주어야 합니다.
'Programming > java' 카테고리의 다른 글
[Java] JSP란 무엇일까? JSP를 사용하는 이유와 사용법을 익혀보자! (0) | 2017.06.19 |
---|---|
[Java] 쿠키(Cookie)의 개념과 사용 방법을 쉽게 알아보자! (0) | 2017.06.12 |
[Java] 웹 어플리케이션 구성 요소 (1) ServletListener (0) | 2017.06.09 |
[Java][Gradle] 이클립스를 이용해 gradle에 대해 배워보자 ! :: gradle 사용법과 이클립스 설정 파일 만들기 (0) | 2017.06.08 |
[Java] 서블릿(Servlet)과 생명주기 메소드란? : init(), destroy(), service() (0) | 2017.06.02 |