Backends PHP

웹개발자를 위한 문자 인코딩 기초 #2 – EUC-KR

한글 문자 인코딩

ASCII는 대소문자를 합하여도 52개 밖에 되지 않는 알파벳을 사용하는 영어를 위한 인코딩 방식이었습니다. 그러나 불행히도 아랍어·한자·한글과 같이 문자 개수가 많은 언어는 1바이트 만으로 표시하기에는 공간이 부족합니다.

이 때문에 2바이트를 사용하여 문자를 표시하는 인코딩 방식들이 언어마다 등장하기 시작하였습니다. 그 중에서 가장 유명한 것이 동아시아 언어들을 위하여 만들어진 Extended Unix Code(약칭 EUC)인데, 94개의 값을 2바이트씩 붙여서 사용하는 방법입니다. 이 방법으로 중국 간체를 위한 EUC-CN, 대만 번체를 위한 EUC-TW, 일본어를 위한 EUC-JP 등이 만들어졌습니다.

이 글에서 소개할 EUC-KR은 EUC 중에서도 한글을 위하여 만들어진 인코딩 방식이며, 현재도 널리 사용되고 있습니다.

(more…)

Continue reading

Backends PHP

웹개발자를 위한 문자 인코딩 기초 #1 – ASCII 코드

문자 인코딩의 등장과 ASCII 코드

컴퓨터는 문자를 이진수로 바꾸어서 저장하거나 처리합니다. 이 때 어떤 이진수 숫자가 어떤 문자로 바꾸어어야 하는지는 미리 정해놓은 규칙들이 있습니다. 이것을 문자 인코딩이라고 합니다.

가장 대표적인 문자 인코딩에는 흔히 “아스키 코드”라고 부르는 ASCII(American Standard Code for Information Interchange)가 있습니다. ASCII 코드는 1967년에 처음 제정된 유서깊은 인코딩 방식으로, 미국에서 영문, 숫자, 특수문자들을 위하여 고안한 방식입니다.

ASCII 코드는 본래 7비트로 되어 있습니다. 그러나 현대의 컴퓨터는 1바이트(=8비트)를 기준으로 정보를 처리하기 때문에, 현재는 ASCII 코드 가장 앞 비트에 0을 넣어 8비트로 만들어 사용합니다. 이렇게 만들어진 8비트의 ASCII 코드를 ISO 8859 방식이라고 하는데, 보통 ASCII 코드라고 하면 바로 이 ISO 8859 방식을 말합니다. 16진수로 보면 0x00~0x7F까지 총 128개의 값을 문자를 위해 사용하는 셈이 됩니다. (숫자 앞에 붙은 0x는 10진수 숫자와 혼동하지 않기 위해서 16진수 숫자 앞에 붙여주는 기호같은 것입니다.)

(more…)

Continue reading

Backends PHP

PHP 스크립트에서의 HTTP 통신 #3 – 리눅스 명령어 wget

wget 소개

wget은 URL 만으로 웹 상의 콘텐츠를 가져올 수 있는 간편한 리눅스 명령어입니다. 대부분의 리눅스 버전에는 wget 명령어도 기본으로 포함되어 있으나, 그렇지 않더라도 새로 설치하는 것은 어렵지 않을 것입니다. PHP에는 쉘 스크립트를 실행하는 실행 연산자 backtics(`  `)가 있기 때문에, wget 명령어 역시 PHP 스크립트 상에서 실행이 가능합니다.

(more…)

Continue reading

Backends PHP

PHP 스크립트에서의 HTTP 통신 #2 – fsockopen

fsockopen 소개

PHP의 fsockopen 함수는 소켓 통신을 위한 간단하고 유용하며 특이한 함수입니다. 호스트명과 포트 번호를 입력받은 fsockopen 함수의 반환값은 재미있게도 파일 포인터입니다. 이후부터는 fwrite와 fread 등의 함수로 마치 파일입출력을 하듯이 통신을 할 수 있습니다.

물론 fsockopen은 좀더 많은 프로토콜에 범용적으로 사용하는 만큼, 앞서 소개한 cURL에 비해 무척 번거롭습니다. fsockopen으로 통신을 하기 위해서는 반환받은 파일 포인터에 fwrite로 보낼 데이터를 프로토콜 스펙에 따라 정확하게 입력해야 하기 때문입니다. 스펙과 글자 하나라도 달라지면 응답을 받을 수 없는 것은 물론입니다.

HTTP 스펙에 대해서는 W3C에 공식문서가 있습니다만, 필요한 내용을 발췌독하기 어렵기 때문에 PHP 매뉴얼에 세계의 여러 개발자들이 올려놓은 예제들을 참고하는 것이 빠르게 문제를 해결하는 데에 더 큰 도움이 됩니다.

(more…)

Continue reading

Backends PHP

PHP 스크립트에서의 HTTP 통신 #1 – cURL 라이브러리

cURL 소개

PHP 상에서 URL을 가지고 HTTP 통신을 해야 하는 경우가 있습니다. 이를테면 타 이미지 호스팅 서버의 이미지를 가져와야 한다던가, 블로그의 RSS를 가져와서 최근 글을 추려내야 한다던가, XML 포멧으로 반환되는 API와 통신해야 한다던가, 어느 페이지에 값을 보내야 한다던가, 적용할 수 있는 상황은 무척 많습니다.

방법은 여러 가지가 있는데, 그 중에 간단하고도 널리 사용되는 방법은 바로 cURL 라이브러리를 이용하는 것입니다. cURL은 라이브러리 제작자 Daniel Stenberg이 command line과 URL을 합성하여 만든 이름인데, 이름 그대로 본래는 커맨드라인 상에서 URL을 통해 통신할 때에 사용하는 라이브러리입니다.

(more…)

Continue reading