PHP에서 배열이 색인 배열인지 연관 배열인지 구별하기

흔히 배열은 색인 배열(Indexed Array)과 연관 배열(Associative Array)로 구분됩니다. 색인 배열은 키(key)가 0부터 시작하여 순차적으로 증가하는 정수인 배열을 의미합니다. 이 때문에 색인 배열은 순차 배열(Sequential Array)이라고 부르기도 합니다. 그 외의 모든 배열은 연관 배열로 분류할 수 있습니다.

사실 PHP는 내부적으로 색인 배열과 연관 배열을 구분하지 않습니다. 이 점은 PHP Manual의 Arrays 항목에서도 언급하고 있는 내용입니다.

PHP arrays can contain integer and string keys at the same time as PHP does not distinguish between indexed and associative arrays.

그럼에도 종종 어떤 배열이 색인 배열과 같은 형태인지 연관 배열인지를 알아내야 하는 경우가 있습니다. 웹 상에서 코드서칭을 해보면 무척 다양한 해법들을 찾아볼 수 있는데요. 다소 복잡한 방법이 있는가하면, 무릎을 탁치게 하는 방법들도 존재합니다. 금번 포스팅에서는 그 중에 몇 가지를 간추려 소개하고자 합니다.

Continue reading

코멧(Comet) #1 – 웹 페이지를 실시간으로 업데이트하는 방법

코멧(Comet)이란?

웹 페이지가 다시 로드되지 않고도 실시간으로 변동사항을 반영해 변화하게 하려면 어떻게 해야할까요. 이런 고민들은 의외로 많은 곳에서 만나게 됩니다. 웹에서 실시간 모니터링 도구를 만들어야 한다던가, 스포츠 실황중계처럼 매우 짧은 시간간격으로 변화하는 상황을 사용자에게 보여주어야만 하는 서비스를 만든다던가 할 때, 우리는 이와 같은 고민에 빠지게 됩니다. 함께 접속한 사용자들이 작성한 글을 거의 실시간에 가깝게 다른 사용자들에게 보여주어야만 하는 채팅 서비스에서도 물론 같은 고민에 직면할 것입니다.

만약에 서버가 모니터링하고 있다가 그 상태를 수시로 클라이언트 측에 전달할 수 있다면, 특별히 고민할 이유가 없을 것입니다. 이런 방식을 서버 푸시(Server Push)라고 부릅니다. 그러나 불행히도 웹에서 사용하는 HTTP로는 서버 푸시를 구현할 수 없습니다. HTTP는 기본적으로 클라이언트(웹 브라우저)가 서버에 요청(Request)을 하면, 서버가 그에 대해 응답(Response)을 한 후에 연결을 끊습니다. HTTP에서는 클라이언트가 먼저 요청을 하지 않는 이상, 서버는 결코 먼저 움직일 수 없는 것이지요.

하지만 궁하면 통하는 법! 이 문제를 해결하기 위해서 전세계의 많은 개발자들이 만들어놓은, 약간은 편법처럼 느껴지는 방법들이 있습니다. 이러한 방법을 묶어서 코멧(Comet)이라고 합니다.

Continue reading

웹개발자를 위한 문자 인코딩 기초 #8 – UTF-8

ASCII와의 호환성을 확보한 UTF-8

이전 편에서 소개한 UTF-16은 서러게이트를 활용한 방법으로 문자열이 잘못되었을 때 쉽게 파악할 수 있으면서도, 동시에 기본 다국어 평면 안의 문자를 2바이트 만으로 표현할 수 있는 효율성도 갖추었습니다. 그러나 UTF-16에는 아쉬운 부분이 바로 ASCII와의 호환성입니다.

ASCII에는 전통적으로 전산처리에서 특별한 기능을 하는 문자들이 있습니다. 이를테면 C언어를 비롯해 많은 언어에서 문자열이 끝났음을 의미하는 NULL 문자(U+0000), 줄바꿈에 사용되는 개행문자(U+000A), 띄어쓰기 등에 사용하는 공백문자(U+0020) 등이 그것입니다. 그런데 UTF-16에서는 문자 중간에 이들 문자의 ASCII 값이 섞여 들어가는 일이 발생합니다.

Continue reading

웹개발자를 위한 문자 인코딩 기초 #7 – UTF-16

기본 다국어 평면과 그 외의 문자에 다른 규칙을 적용한 UTF-16

UTF-32은 유니코드 값을 그대로 32비트로 옮겨서 만든 인코딩으로, 심플하다는 장점에도 불구하고 몇 가지의 단점이 있었습니다. UTF-16는 특별한 규칙들을 통해 유니코드의 값을 변형하여 이 문제들을 해결한 인코딩입니다. UTF-16 인코딩의 규칙은 크게 기본 다국어 평면에 속하는 문자와, 그렇지 않은 문자들로 구분됩니다.

Continue reading

Windows 환경에서 MongoDB를 PHP에서 사용할 수 있도록 설정하기

이전 글 Windows에 MongoDB 설치하기를 따라서 WIndows에 MongoDB를 설치하고, 데몬을 서비스로 잘 등록하였다면, 이제 PHP에서 이를 사용할 수 있도록 해야 합니다. 여기에 관하여서는 공식문서에도 간결하게 핵심이 정리되어 있습니다. 이 포스트에서는 이러한 설치과정에 익숙하지 않은 분들을 위해 스탭 바이 스탭으로 과정을 설명합니다.

Continue reading