본문 바로가기

시스템

IIS 재시작시 클라이언트 요청 없이 자동로딩 설정

IIS의 경우, 기본설정된 상태에서는 재시작을 하면, 클라이언트의 요청이 들어오면 어플리케이션을 로딩한다.

이 기능은 Tomcat 같은 다른 WAS에도 존재하는 것으로 사실 좋은 기능이다. 

서버가 메모리를 효율적으로 관리하도록 도와주는 것이니까.

이것은 사용자의 요청이 일정시간이 지나면 Sleep 상태가 되도록 하는 설정과 함께 사용하면 매우 좋다.

그러나 어플리케이션 백그라운드에서 스케줄링 업무가 있을 경우에는 매우 답이 안나오는 기능이 된다.

클라이언트로부터 처음 요청이 들어오기 전에는 스케줄링 업무도 동작하지 않을 것이기 때문이다. 

그럼 이렇게 말하는 사람이 있을 수 있다. IIS에 설정에 일정시간 지나면 Sleep 설정을 해제하고, 관리자가 웹으로 처음 요청을 보내서 어플리케이션을 로딩한 다음에 서버를 계속 켜두면 문제가 되지 않냐고...

하지만 내가 현업에 있어보니 아무것도 건드리지 않았음에도 서버는 생각보다 자주 재시작을 하고, 가끔 먹통이 되어서 관리자가 재시작을 하는 경우도 상당했다. 관리자가 서버를 재시작한다고 해도 매번 저 작업을 하는 것이 귀찮거나 혹은 까먹으면 난감한 일이 아닐수 없다.

그래서 지금부터 클라이언트 요청이 없어도 자동으로 어플리케이션을 로딩하는 방법을 설명하도록 하겠다.


먼저 윈도우 검색에서 IIS를 검색해서 'IIS 관리자'를 실행한다.

다음에 해당 서버 하단에 '응용 프로그램 풀' 에서 설정하고자 하는 어플리케이션을 선택하고 마우스 우클릭하여 고급설정으로 가자.

그리고 아래와 같이 '일반 > 시작모드' 를 'AlwaysRunning' 으로 설정한다.


그 상태에서 스크롤을 좀더 내려보면 '재생 > 표준시간간격'과 '프로세스 모델> 유휴시간제한'을 모두 '0'으로 셋팅해준다.

(사실 이 설정은 필요에 따라 설정하면 될듯하다.)



다음으로 왼쪽의 응용 프로그램 풀 아래에 사이트에서 설정하고자 하는 어플리케이션을 선택하고 창 전체에서 오른쪽에 보면 고급설정이 있다.(우클릭을 통해서도 접근가능하다.) 

거기서 아래와 같이 '일반 > 미리 로드 활성화됨'의 값을 'True'로 변경해준다.



거의다 왔다. 이제 하나만 더 해주면된다.

윈도우 검색화면에서 'windows 기능 켜기/끄기'(제어판 > 프로그램 추가/삭제 메뉴을 통해서도 접근 가능)를 실행하고, 아래와 같이 'World Wide Web 서비스 > 응용프로그램 개발기능 > 응용프로그램 초기화' 에 체크를 한다. (영문일 경우, WWW Service > application development > application initialization')



마지막으로 IIS 서버를 재시작하거나, 서버를 재부팅시켜준다.


구글에서 찾았던 stack overflow에 양키님의 답변은 링크는 아래와 같다.

https://stackoverflow.com/questions/34634659/how-to-properly-autostart-an-asp-net-application-in-iis10