2018년 3월 20일 화요일

서블릿이란?

1. 서블릿이란??


  • 자바 플랫폼에서 컴포넌트를 기반으로 하는 웹 애플리케이션 개발의 핵심 기술 
  • JSP는 서블릿 기반의 웹 프로그래밍 기술로 내부적으로 JSP는 서블릿으로 변환되어 실행 
  • 고급 웹 프로그래밍 개발을 위해서는 서블릿에 대한 이해가 필요
  • 서블릿의 장점 
    • 자바를 기반으로 하므로 자바API를 모두 사용
    • 운영체제나 하드웨어에 영향을 받지 않으므로, 한번 개발된 애플리케이션은 다양한 서버 환경에서도 실행
    • 웹 애플리케이셔네서 효율적인 자료 공유 방법을 제공
    • 다양한 오픈소스 라이브러리와 개발도구를 활용

1.1. 웹 애플리케이션 개발에 서블릿 사용 시 이점

  1. MVC 패턴을 쉽게 적용할 수 있고 컨테이너와 밀접한 서버 프로그램을 구현
  2. MVC 패턴을 적요할 때 콘텐츠와 비즈니스 로직을 분리할 수 있으며 컨트롤러와 뷰가 역할을 분담함으로써, 웹 디자이너와 개발자 간에 작업을 원활하게 작업
  3. 리스너 및 필터 서블릿 등 고급 프로그래밍 기법을 통해 더욱 효과적인 웹 애플리케이션을 설계

2. 서블릿과 서블릿 컨테이너

  • 서블릿 컨테이너는 서블릿을 실행하기 위한 서버 소프트웨어를 말하는 것으로 JSP나 서블릿으로 만들어진 웹 프로그램을 개발하고 실행하기 위한 환경 
  • 대표적으로 아파치, 톰캣 

3. 서블릿이 동작과정


  • 서블릿은 개발자가 소스 작성 후 컴파일 과정을 거쳐 컨테이너에 배치(deploy)하게 되면 컨테이너에 의해 실행
  • 사용자 요청에 따라 스레드 단위로 실행되면서 비즈니스 로직 및 데이터베이스 연동 등 작업을 수행하고 처리 결과를 사용자에게 HTML 형식으로 전달하는 구조로 동작한다. 



  • 서버에서 서블릿 컨테이너에 의해 실행 되고 생명주기를 가지며 특정 이벤트와 상태가 존재하는 구조 
  • 서블릿 개발은 해당 생명주기 메서드를 오버라이딩하거나 doGet(), doPost()와 같은 사용자 요청 처리 메서드를 구현
  • init()은 서블릿 실행시 한번만 실행되는 메서드이고 service() 메서드는 사용자 요청시 매번 호출되는 메서드이다. destroy()는 서블릿 종료 시 실행되는 메서드이다. 


4. 서블릿 구조와 생명주기

4.1. 서블릿 구조와 API


  • JSP와 달리 서블릿은 일반적인 자바 클래스 구조를 뜻하며 컴파일 과정이 필요함 
  • 서블릿은 컨테이너에 의해 실행되므로 특정 클래스를 상속 받아야만 구현할 수 있는 구조
  • 서블릿 개발을 하려면 서블릿 클래스의 상관 관계나 API의 기본 구조를 이해해야 한다. 
  • API(Application Programming Interface)는 특정 클래스를 다른 프로그램에서 사용하기 위해 필요한 정보를 규격
  • 일반적으로 서블릿은  java.servlet.HttpServlet 클래스를 상속
  • javax.servlet.http.HttpServlet 구조 
    • GenericServlet에 비해 HTTP 프로토콜 지원이 포함되어 일반적인 웹 프로그램에 적합
    • HttpServlet도 javax.servlet.GenericServlet을 상속받고 있음
    • 사용자 요청에 따라 GET,POST 방식으로 구별해 처리하지만 경우에 따라서는 구분없이 처리하기도 함 
    • http://www.lalwr.co.kr/index.html 이라는 URL 요청은 HTTP프로토콜에서는 GET/index.html과 같이 서버에 전달됨 
    • HTTP 프로토콜에는 GET,POST,PUT,HEAD,DELETE,OPTIONS,TRACE와 같은 요청이 정의되어 있으며 서블릿에도 각각doGet(), doPOST()와 같은 대응 메서드가 존재함

4.2. Get 방식

  • 서버에 있는 정보를 클라이언트로 가져오기 위한 방법이다. ex) HTML, 이미지 등
  • 서버에는 최대 처리할수 있는 Byte는 브라우저마다 다르다.(http 2.0기준)
  • QUERY_STRING 환경변수를 통해서 서버로 전달되는데, 다음 형식을 따른다. http://www.lalwr.co.kr/servlet/login?id=admin&name=lalwr 
  • '?'이후의 값들은 서버에서 QUERY_STRING을 통해 전달된다. '키=값'형태로 사용해야 하며 '&'는 여러 속성 값을 전달할 때 연결해주는 문자열이다. 
  • URL이 노출되기 때문에 보안에 문제가 생길 수 있다. 

4.3. Post 방식

  • 서버로 정보를 전달하기 위해 설계된 방법이다. ex) HTML 폼에 입력한 내용을 서버에 전달
  • 서버에 전달 할 수 있는 데이터 크기에는 제한이 없다. 
  • URL에는 매개변수가 표시되지 않는다.

5. 서블릿 구조와 생명주기

5.1. 서블릿 초기화 : init() 메소드


  • 서블릿 실행시 호출되는 메서드로 초기에 한 번만 실행

5.2. 요청, 응답 : service() 메소드


  • http 요청에 따라 스레드로 실행되는 메서드
  • service() 메소드를 통해 doGet() 혹은 doPost() 메서드를 호출
  • 파라미터인 HttpServletRequest 와 HttpServletResponse를 통해 사용자 요청을 처리한다. 

5.3. 서블릿 종료 : destory() 메소드


  • 컨테이너로부터 서블릿 종료시 호출되는 메소드 
  • init()와 마찬가지로 한 번만 실행되며
  • 서블릿이 종료되면서 정리할 작업이 있다면 destroy()를 오버라이딩해서 구현

5.4. 서블릿 구조 예시


Hello Servlet이 HttpServlet를 상속 하고 있다고 가정할때 요청이 오면 서블릿 컨테이너가 servicer() 메소드를 호출하여 처리한 후 HttpServletResponse객체에 응답을 보낸다.


Share:

0 개의 댓글:

댓글 쓰기