IIS7.5 Application Warm-Up
안녕하세요, IISKOREA 팀블로그의 송원석 입니다.
윈도우 서버 2008 R2, 그리고 윈도우 7 에서 제공되는 IIS 7.5에 흥미로운 기능이 한 가지 추가되어 소식을 전합니다. 바로 Application Warm-Up 이라는 기능인데요, 현재 Beta 상태로 관련 모듈을 다운로드 받아 설치할 수 있습니다. 과거 URL Rewrite 모듈 역시도 별도의 다운로드 모듈 형태로 제공되다가 정식으로 포함된 사례를 감안해 볼 때, 이번 Application Warm-Up 모듈도 같은 수순을 밟게 될 것으로 예상됩니다. 보다 정확하고 상세한 내용은 다음의 문서를 참고하시면 될 것 같습니다.
Getting Started with the IIS 7.5 Application Warm-Up Module
이 문서에서는 Applcation Warm-Up 에 대한 개요를 보여주고 있습니다만, 아쉽게도 대부분의 진행이 파워쉘를 기반으로 하고 있어서, 개발자분이시거나 평소 파워쉘에 대해 관심을 갖고 계셨던 분이 아니시라면 조금 난해할 수도 있을 것 같습니다. (나중에 저희가 캡춰로 도배된 따라하기 문서를 한 번 만들어 보는 것고 좋을 것 같습니다.)
그리고, 실제 모듈은 다음 경로에서 다운로드 받으실 수 있습니다. 아직 Beta 버전이며, IIS 7.0에서도 동작하는지는 확인해보지 못했습니다.
간단히 그 내용을 살펴보자면 이렇습니다.
일반적으로, IIS 에 배포된 웹 응용 프로그램은 사용자의 요청에 의해 실행이 됩니다. 즉, 평소에는 메모리에 올라와 있지 않은 상태인 것이죠. 그러다가, 임의의 사용자가 처음으로 해당 웹 응용 프로그램을 요청하는 순간, 초기화가 수행되고 비로소 메모리에 올라와서 작업을 수행하게 됩니다. 일반적으로 이 초기화 과정 중에 이루어지는 작업에는 대략 다음과 같은 작업들이 있을 겁니다.
- 먼저, 당연히 ASP.NET 프로그램의 JIT 컴파일이 이루어져야 하겠죠.
- 그리고, 필요하다면 데이터베이스 연결도 얻어야만 합니다. (한 번 생성해 놓으면 커넥션 풀을 이용할 수 있으므로 첫 번째 요청과 두 번째 요청에서의 속도에는 확실히 차이가 존재합니다.)
- 일부 코드 Set 을 미리 로드해 놓는 웹 응용 프로그램들도 존재합니다. 이를테면 미리 캐시를 해놓는 거죠. (지금 제가 참여중인 프로젝트가 바로 그렇습니다.)
- 필요한 HTTP 모듈이나 핸들러도 로드되어야 하구요. (사용자 정의 모듈이나 핸들러 뿐만 아니라, IIS 7.x 자체의 모듈들도 모두 HTTP 모듈이나 핸들러라는 점을 유의하십시오.)
- 그 밖에 기타 필요한 작업들이 처리되겠죠.
그런데, 만약 해당 응용 프로그램이 초기화에 많은 비용이 소모되는, 상대적으로 무거운 축에 속한다면, 운나쁘게도 가장 먼저 웹 응용 프로그램을 요청한 사용자는 제법 긴 시간동안 대기를 해야하게 될 것입니다.바로 이런 문제점을 해결하기 위해 제공되는 기능이 Application Warm-Up 입니다. 흔히 우리는 운동을 하기 전에 워밍업을 한다는 표현을 쓰곤 합니다. 마치 이처럼 웹 응용 프로그램도 워밍업을 해두는 것이죠. 그리고 요청이 들어왔을 때 신속하게 서비스를 제공한다는 개념입니다.
일반적인 웹 사이트의 경우에는 이 기능의 장점이 확연하게 느껴지지 않을 수도 있을 것입니다. 그러나, 클라우드 서비스를 제공해야 되는 시스템이라던지, n 티어 시스템의 비즈니스 로직 계층의 경우라면 그 응답성 향상이 눈에 띌 정도가 되지 않을까 생각해봅니다.
그리고, Application Warm-Up 기능을 설정할 수 있는 단위는 웹 응용 프로그램이라고 하는데요, 사실 이건 당연한 얘기일 것입니다. 왜냐하면 웹 응용 프로그램이 바로 작업자 프로세스의 단위이기 때문이죠.
보다, 자세한 내용은 후에 기회가 닿으면 한 번 다시 말씀드리도록 하겠습니다.
감사합니다.
P.S 그리고 보니 이 포스트가 제 인생 최초의 포스트네요.