클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

서블릿의 기초 6 - 서블릿의 동작 원리와 라이프 사이클 본문

웹 · 앱 개발/JSP & Servlet

서블릿의 기초 6 - 서블릿의 동작 원리와 라이프 사이클

huenuri 2024. 8. 24. 12:28

이제 서블릿의 동작 원리와 get, post 방식 등에 대해서 학습해보려고 한다. 여전히 공부는 재미없지만 말이다.


 

 

 

서블릿의 동작 원리

서블릿의 동작 원리를 알기 위해서는 우선 서블릿 컨테이너에 대한 이해를 해야 한다. 아파치 톰캣을 서블릿/JSP 컨테이너라고 규정하고 있다. 톰캣이 구동되면 자바가상머신이 구동되어 자바 문법을 따르는 서블릿을 처리할 수 있는 환경을 제공하여 서블릿 컨테이너라는 별칭이 붙어있다.

서블릿의 실행은 이렇게 서블릿 컨테이너에 의해 이루어진다.

 

 


 

 

서블릿의 라이프 사이클

서블릿이 다른 웹 기술보다 주목을 받게 된 이유는 수행 속도가 빠르다는 점이다. 수행 속도가 빠를 수 있는 이유는 두 번재 이상의 요청이 첫 번째 요청인 경우와 다르게 처리되기 때문이다.

다른 웹 기술들을 클라이언트들의 요청이 있을 때만 작업을 처음부터 새롭게 하여 제공하지만 서블릿은 그렇지 않다. 서블릿이 첫번째 요청인 경우에는 서블릿 클래스를 찾아 메모리에 로딩하여 인스턴스(객체)를 생성한다. 이때 생성된 서블릿 인스턴스는 메모리에 계속 남아 있게 되므로 이후부터는 서블릿이 호출되어도 서블릿 인스턴스가 다시 생성되지 않고 이미 메모리에 로딩된 서블릿으로부터 서비스만 받기 때문에 수행 속도가 빠르다.

반면 PHP나 ASP는 요청될 때마다 인터프리터 방식으ㄷ로 코드가 재해셕되기 때문에 수행 속도가 느리다.

 

우선 객체가 생성되면서 init() 메소드가 단 한번 호출된다. init() 메소드에서는 주로 초기화 작업을 한다. 그 후에는 클라이언트 요청이 있을 때 doGet() 혹은 doPost() 메소드가 실행된다. 여러 클라이언트가 동시에 요청을 하더라도 스레드가 생성되므로 동시에 doGet() 혹은 doPost() 메소드가 실행되기 때문에 수행 속도가 빠르다.

서블릿이 더이상 서비스를 하지 않을 경우 destroy() 메소드가 호출되는데, 예를 들면 서블릿 컨테이너가 종료되거나 서블릿 내용이 변경되어 다시 컴파일해서 클래스 파일이 바뀌는 경우이다.


 

 

 

 

서블릿이 라이프 사이클 테스트

 

화면에 아무것도 나타나지 않지만, 콘솔창에서는 출력문이 출력된다. 그리고 새로고침을 할 때마다 호출되고 있다.

 

 

처음 할 때는 종료 호출이 되었는데 두번째부터는 되지 않았다.


 

 

 

 

서블릿의 한글 처리와 데이터 통신

조금 전에 이 예제를 혼자서 진행했는데 책에 예제가 따로 있어서 한번 실습해보기로 했다.

 

한글 메시지를 출력하는 서블렛 만들기

 

 

한글이 깨져서 보이는 것을 볼 수 있다.

 

 

 

콘텐츠 타입에 UTF-8을 넣었다.

 

공백을 넣으러면 한글 글자 앞에 한칸을 띄어주어야 한다.


 

 

 

학습을 마치고

get과 post 방식은 다음 포스트에서 학습하려고 한다. 진도가 너무 안나가지만 그래도 조금이라마 해보고 있다. 난 아마도 벡엔드 개발자는 못할 것 같다. 너무나도 지루하고 하기가 싫다. 아마도 이런 쪽에 흥미가 있는 사람들은 기계적인 일들을 좋아하고 알고리즘을 분석하는 걸 선호하는 사람인 것 같다.

어제 면접볼 때도 느꼈는데 나와는 성향자체가 많이 달랐다. 창의적인 것과는 거리가 멀고 뭔가 세밀하게 반복적인 것들을 좋아하는 사람들이었다.