Response.CodePage

Classic ASP에서 UTF-8을 사용하기 위해서 Response.CodePage = 65001 을 했더니 “Object doesn’t support this property” 란 오류가 발생한다.

MSDN에서는 IIS 5.0에서 되어있는데 지원을 안하네. 윈도우 2000 서버라서 그런가?
해결방법을 찾는 중…..

HTTP 1.1은 동호스트에 대해 동시 접속최대수가 2개인데 IFrame이 있는 경우는?

HTTP 1.1 스펙에 의해 대부분의 브라우저는 동일 호스트에 대해 최대 2개의 동시접속을 허용하고 있다. 그래서 속도를 빠르게 하기 위해 대부분 도메인을 분리하여 서비스를 한다. 만기일 등 다른 이유도 있겠지만.

근데 만약 HTML 내분에 IFrame이 있고 이 src가 동일 호스트인 경우는 어떻게 될까? 오늘 테스트 해보니깐 IFrame이 있는 경우는 별도로 2개의 동시접속을 가져갈수 있었다. 만약 HTML내에 2개의 IFrame이 있다면 동시에 6개의 접속이 가능한 걸 확인할 수 있었다.

이를 잘 활용하여 동시접속수를 늘릴 수 있을 것도 같은데, 이 장점보다는 단점이 많은 것 같다. 위의 예처럼 하나의 페이지를 보기 위해서 6개의 접속이 가능하다면 IFrame을 사용하지 않았을 때 2개의 접속보다 3배의 접속을 사용하게 되고, 이는 또한 동시에 서비스할 수 있는 사용자 수가 3분의 1로 줄어든다는 것을 의미하기도 하기 때문이다.

결국 동시 접속자수가 많고, IFrame을 사용해야만 한다면 IFrame은 다른 웹서버로 분리하는 게 필요할 것 같다.

Apache와 IIS 5 한집 살림하기

하나의 윈도우 서버에 아파치와 IIS를 동시에 돌려야 할 경우가 있다. 우리회사는 웹서버로 IIS를 사용하는데 요번에 블로그 서비스를 기획하면서 텍스트큐브를 도입하기로 결정을 했다. 하지만 아직까지 IIS에서 텍스트큐브를 돌리기가 여의치 않아서 결국 아파치를 선택할 수 밖에 없었다. 서버를 따로 구입해서 블로그 전용서버로 사용하는게 제일 좋은 방법이겠지만, 서버를 구입하지 않고 어떻게 하면 같이 돌릴 수 있을까 고민을 해봤다.

두가지 방법을 생각해 볼 수 있다. 가장 쉬운 방법으로 포트를 서로 다르게 갖고 가는 것이다. 예를 들면 IIS는 80포트, 아파치는 8080포트로 돌리는 거다. 가장 쉽기는 한데, URL에 8080이 들어가는 게 좀 찜찜하다. 물론 프레임을 사용해서 8080포트가 붙은 주소를 감출 수는 있다.

다른 방법은 여유의 IP가 하나 더 있는 경우이다. IP가 하나더 있다면 각각에 IP를 할당하면 될테니깐.

나름 후자가 더 바람직한 방법 같아서 하나의 윈도우 서버에 IP를 두개 부여하고, IIS와 아파치에 IP를 각각 따로 설정했다. 그런 다음 잘 되겠지 하고, 먼저 IIS를 재시작하고, 다음에 아파치를 시작했더니 웬걸 이미 IP 주소가 사용되고 있어서 시작할 수 없다는 오류가 떨어지는 거다. 음 … IIS가 왜 다른 주소를 잡고 있을까?

한참을 고민하다가 IIS는 socket pooling을 한다는 사실을 알아냈다. 즉 IIS는 기본적으로 서버에 있는 모든 IP 주소에 리슨을 한다는 거다. 이를 방지하는 방법은 간단했다.

cd \inetpub\Adminscripts
cscript adsutil.vbs set w3svc/disablesocketpooling true

위 명령을 실행하면
disablesocketpooling : (BOOLEAN) True
이라는 결과를 볼 수 있다.

이렇게 설정을 하고 IIS를 재시작하니 드디어 IIS와 아파치가 사이좋게 지내는 거다. 대량의 트래픽이 발생하는 사이트는 당연히 이렇게 사용을 할 수 없을 테지만, 간단한 개인 블로그 정도는 이렇게 써도 무방하지 않을까?

Windows 2003에서는 IIS 6가 제공되고 있다. IIS 6에서 socket pooling을 방지하는 방법은 IIS 5와 틀리다. IIS 6에서 socket pooling 방지하는 방법을 참고하면 된다.