Network

웹 프로그램의 실행 순서

로픽 2017. 2. 20. 15:50
300x250

웹 프로그램의 실행 순서

웹 프로그램의 실행 순서를 이야기하기 전에 콘솔 프로그램의 실행 순서를 정리해 보겠습니다. 콘솔 프로그램은 이제껏 우리가 작성한 로컬 응용 프로그램을 이야기한다. 파일의 확장자가 JAVA이고, 이 파일을 컴파일하면 확장자가 CLASS가 되어서 명령어 java로 실행되는 프로그램 말이다. 콘솔 프로그램은 실행 순서가 다음과 같다. static 초기화 구문, public static void main(String[] arg)메서드, protected void finalize()메서드 void main() 메서드가 잇는 클래스에 메서드가 모두 있으면 실행 순서는 앞서와 같을 것이다. void main()메서드의 시작 블록에서 프로그램이 시작되어 종료 블록에서 프로그램이 종료된다는 식으로 이야기한다. 만약 여러 개의 클래스를 만들어서 실행한다고 해도 실행의 시작과 종료는 바뀌지 않는 것이다. 여러 개의 클래스를 만들더라도 이들을 실행하는 void main()메서드는 하나로 작성한다. 그러나 웹 프로그램은 양상이 조금 다르다. 웹프로그램은 콘솔 프로그램에서 void main()과 비슷한 역할을 하는 메서드를 모든 실행 클래스가 가진다. 그래야 정상저으로 실행이 된다. 콘솔 프로그램의 void main()메서드와 비숫한 역할을 웹 프로그램에서는 void service()메서드가 한다. 웹 프로그램이 이런 특징을 갖는 이유는 웹에서 사용자가 어느 클래스로든 진입이 가능해야 하기 때문이다. 어떤 사용자는 A클래스로 진입할 테고, 다른 사용자는 B 클래스로 진입할 테니 말이다. 웹에서 모든 페이지는 실행이 가능해야 한다. 그러려면 앞서 설명한 것 처럼 모든 실행 클래스가 저마다 void service()메서드를 가져야 한다. 웹 프로그램의 실행 순서 init, service, destroy 이다.


첫번째로 init() 메서드는 멤버필드의 값을 초기화한다. 단, 서버를 구동하고 최초 호출하는 클라이언트에 의해서 한 번 실행된다. 즉, A라는 서블릿 클래스가 있을 때 kimsh과 leesh라는 사람이 웹 브라우저를 통해 A크래스를 호출하면 먼저 호출한 사람에 의해 처음 한 번 init()메서드가 실해오딘다는 이야기이다. kimsh라는 사람이 먼저 호출하면 kimsh라는 사람에 의해서는 init()메서드와 service()메서드 순서로 실행되지만 leesh라는 사람에 의해서는 service()메서드만 실행되게 한다. 두번째로 init()메서드가 한번 실행되어 있다고 가정할 때 service()메서드는 다른 모든 사용자가 접속할 때 실행되는 시작점이 된다. 앞서 설명한 것처럼 service()메서드는 콘솔 프로그램의 main()함수와 같은 역할을 한다. 세 번째로 destroy()메서드는 init()메서드에 초기화된 멤버 필드의 값을 소멸시킨다. 서버구동을 종료할때 한 번 실행된다. 만약 서버를 비정상적으로 종료하면 destroy()메서드가 호출되지 않아서 프로그램의 값들이 꼬이는 경우도 있을 것이다. destroy()메서드는 사용자가 호출하여 실행하지 않는다.

반응형