응용프로그램 초기화 모듈에 대한 대안 찾기 - WebPing 서비스

응용프로그램 초기화 IIS 모듈은 Windows Server 2012에 포함된 IIS 8에서 처음 소개된 모듈입니다. ASP.NET 기반 웹 애플리케이션을 실행할 때 고질적으로 문제가 되는 현상 가운데 초기 실행 속도 저하가 대표적인데, 이 부분을 해결할 수 있도록 도움을 주기 때문입니다.

응용프로그램 초기화 모듈에 대한 아쉬움

그렇지만 실제 프로젝트 등에서 응용프로그램 초기화 모듈을 적용할 때 불편하거나 문제가 될 수 있는 부분이 생각보다 많았습니다.

  1. Windows Server 2012부터 포함되는 IIS 8에서 응용프로그램 초기화 모듈과 설정 애플릿을 공식적으로 사용할 수 있습니다.
  2. Windows Server 2008에서는 사용할 수 없고, Windows Server 2008 R2에서는 별도의 응용프로그램 초기화 모듈을 설치하고, IIS에 별도의 설정 애플릿을 추가 설치하거나 web.config 등을 수동으로 편집해야 합니다.
  3. 일부 웹 애플리케이션에서는 이 모듈을 사용할 경우 COM Exception이 발생합니다. 결과적으로 응용프로그램 초기화 모듈이 정상 동작하지 않았으며 모듈의 사용 효과를 볼 수 없게 되었습니다. (이 부분이 제가 진행하는 프로젝트에서 다른 대안을 찾게 된 큰 이유였습니다.)

위와 같은 이유로 응용프로그램 초기화 모듈을 대체하면서 좀 더 일반적이고 이해하기 쉬운 설정 방법을 제공하는 컴포넌트를 아이디어 차원에서 새로 만들게 되었습니다.

Web Ping

그래서 응용프로그램 초기화 모듈처럼 주기적으로 웹 응용프로그램에 대해 GET이나 POST 요청 등을 보내고 그 결과를 로그로 기록하도록 해 주는 백그라운드 서비스를 하나 만들게 되었습니다. 이름은 생각나는대로 지어서 Web Ping이라고 했습니다. :-D

https://github.com/rkttu/webping

Web Ping을 만들면서 염두에 두었던 내용들은 다음과 같습니다.

  • 복잡한 스크립트 언어를 사용하지 않고 누구든지 쉽게 구성 가능할 것
  • 설정 파일을 바꾸었다고 해서 서비스나 시스템을 다시 시작해야 할 필요가 없게 만들 것
  • 본래 Ping 도구의 목적에 부합하는 설정만 받아들일 것 (로드 테스트나 네트워크 시뮬레이터 같은 것이 아닙니다.)
  • .NET Framework 4.0 Client Profile 버전 이상의 Framework만 설치하면 어떤 컴퓨터에서든 사용 가능할 것 (이 글을 작성하는 현재 최신 .NET Framework 버전인 .NET 4.6.1을 포함하여)
  • 일반적인 Win32 응용프로그램이면서도 동시에 NT SCM이 인지할 수 있는 NT 서비스이기도 할 것

프로젝트는 Visual C# 2010 Express를 사용하여 개발한 것으로 Visual Studio 2010 이후의 IDE 및 .NET 4.0 지원 IDE에서 빌드할 수 있습니다.

이 프로젝트를 빌드하면 서비스 설치, 제거, 시작, 정지에 관한 배치 스크립트와 돌려볼 수 있는 예제 구성 파일들이 자동으로 실행 파일과 함께 생성됩니다.

설치와 사용

우선 AppSettings.config과 SiteList.txt 파일을 생성합니다.

AppSettings.config에서 intervalTimeSpan 정도의 설정이 커스터마이징에 필요한 설정이 될 것 같습니다.

그리고 SiteList.txt 파일에 실제로 워밍업을 하려는 웹 사이트 URL들의 목록을 지정하게 되는데, 다음의 문법을 지원합니다.

# 주석
GET http://www.example.com/
POST http://www.example.com/
http://www.example.com/

보시다시피 #으로 시작하면 주석임을 의미하는 것이고, GET, POST 등의 HTTP 동사와 함께 전체 URL을 지정할 수 있습니다. 그리고 URL만 지정하면 GET으로 요청을 보내는 것을 전제로 할 수 있습니다.

이렇게 설정하고나면 webping.exe 파일을 직접 실행하여 구성에 이상이 없는지 확인할 수 있습니다. 구성에 이상이 없다면 Install.cmd 파일을 더블 클릭하여 서비스를 설치하고, Start.cmd 파일을 더블 클릭하여 서비스를 시작할 수 있습니다.

더 업그레이드한다면

프로젝트의 소스 코드 자체는 Apache License로 공개하였습니다. 혹시 더 좋은 아이디어나 제안 사항이 있으시다면 Pull Request 등으로 의견을 직접 주시면 더 좋을 것 같습니다. :-)

Show your support

Clapping shows how much you appreciated ClouDeveloper@medium’s story.