Web-서버의 동작원리

2 분 소요

Apache Tomcat

  • 아파치 톰캣(Apache Tomcat)은 아파치 소프트웨어 재단(Apache Software Foundation, ASF)에서 개발한 세계에서 가장 많이 사용되는 WAS(Web Application Server)이다.
  • 컴퓨터에 운영체제를 설치해야만 컴퓨터를 사용할 수 있는 것처럼, 자바를 이용하여 작성된 웹 어플리케이션은 WAS가 있어야만 실행할 수 있다.
  • 이때 가장 많이 사용되는 WAS가 아파치 톰캣이라고 말할 수 있다.
  • 아파치 톰캣은 오픈소스 소프트웨어로써 누구나 무료로 사용할 수 있다.

자바 웹 어플리케이션이란?

  • WAS에 설치(deploy)되어 동작하는 어플리케이션
  • html, css, servlet, 이미지파일 등이 포함되어있다.
  • 블로그, 카페, 쇼핑몰 등등이 각각의 웹 어플리케이션이다.
  • WAS라는 미들웨어의 도움을 받아 만들어내는 것이기 때문에 지정된 약속을 꼭 지켜줘야한다.
  • 지켜야할 것은 폴더구조
  • WEB-INF폴더 아래에 web.xml이라는 배포기술자는 무조건 필요한 아이인데 만드려는 웹어플리케이션의 모든 정보들을 모아놓은 상태라고 할 수 있다.
  • WEB-INF폴더 아래에 lib과 classes라는 폴더가 꼭 있어야한다.
  • lib폴더 아래에는 jar파일들이 있는거고 classes폴더 아래에는 실제 클래스들이 있는거다.

Servlet이란

  • url요청을 처리 (동적인 처리를) 하는 프로그램
  • WAS에서 동작하는 JAVA클래스이다.
  • HttpServlet클래스를 무조건 상속받아야한다.
  • 웹페이지를 개발할 때에는 Servlet과 Jsp 두가지를 조화롭게 사용해야한다.
    • 복잡한 프로그래밍은 Servlet으로 웹페이지구성 화면(html)은 Jsp로~~

버전에 따른 Servlet 작성 방법

1. Servlet 3.0 spec 이상에서 사용하는 방법

  • web.xml 파일을 사용하지 않는다.
  • 자바 어노테이션(annotation)을 사용한다.

2. Servlet 3.0 spec미만에서 사용하는 방법

  • servlet을 등록할 때 web.xml 파일에 등록한다
  1. url에 ttt가 있으면 web.xml에 가서 servlet-mapping안에 ttt가 있는지를 찾는다.
  2. 있으면 servlet-name을 찾는다.
  3. 이번엔 위에 있는 servlet에 가서 똑같은 짝궁 servlet-name이 있는 걸 찾는다.
  4. 만약에 똑같이 있으면 servlet-class에 있는 패키지.클래스라고 되어있는 컴파일된 파일을 실행시킨다.

※sysout과 PrintWriter out = response.getWriter(); 의 차이점은 목적지가 다른다. sysout은 콘솔창에 보내주는거고 후자는 서버의 응답결과로 보내주기이다.

Servlet의 생명주기

  • 서블릿은 서버에 서블릿 객체를 여러 개 만들지 않는다. 요청이 들어오면 매번 생성하는 것이 아니라 요청된 객체가 있는지 없는지만 ㄴ체크한 후에 있으면 service메소드만 호출한다. 없으면 만들구
  • destroy는 서블릿이 수정되어 메모리에 다시 존재해야할 때 또는 WAS가 종료될 때 destroy하고 다시 생성하고 init하고 service하고 그런다.

  • WAS는 서블릿 요청을 받으면 해당 서블릿이 메모리에 있는지 확인합니다.
  • if (메모리에 없음) {
  • 해당 서블릿 클래스를 메모리에 올림 (객체가 생성되는 작업 - 생성자를 통해)
  • init() 메소드를 실행
  • }
  • service()메소드를 실행
  • was가 종료되거나, 웹 어플리케이션이 새롭게 갱신될 경우 destroy() 메소드가 실행됩니다.

service(request, response) 메소드

HttpServlet의 service메소드는 템플릿 메소드 패턴으로 구현합니다.

  • 클라이언트의 요청이 GET일 경우에는 자신이 가지고 있는 doGet(request, response)메소드를 호출
  • url에서 직접 요청했을 때엔 메소드값이 Get이라는 값으로 넘어간다. (약간 디폴트느낌)
  • 클라이언트의 요청이 Post일 경우에는 자신이 가지고 있는 doPost(request, response)를 호출
  • 그니까 서블릿에 service()메소드가 없어도 모든 서블릿은 HttpServlet을 상속받고 있고 HttpServlet에는 service()메소드가 있으며 그 안에는 doPost와 doGet이 있기때문에 이 둘중 하나만 만드려는 서블릿에 오버라이딩해도 알아서 그게 service()메소드로 취급되어 실행된다.

request와 response 이해하기

  • WAS는 웹 브라우저로부터 Servlet요청을 받으면,
    • 요청할 때 가지고 있는 정보를 HttpServletRequest객체를 생성하여 저장합니다.
    • 웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성합니다.
    • 생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿에게 전달합니다.
  • HttpServletRequest
    • 클라이언트가 서버에게 보낸 요청을 추상화한 객체
    • http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용한다.
    • 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있다.
    • Body의 Stream을 읽어 들이는 메소드를 가지고 있다.
  • HttpServletResponse
    • 서버가 클라이언트에게 응답하기 위한 정보를 추상화한 객체
    • WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달한다.
    • 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송한다.
  • 요청할 때 - request
    1. 클라이언트가 웹브라우저의 헤더정보를 request에 담아 요청한다.
    2. 클라이언트가 웹브라우저에 입력한 파라미터정보와 값을 request에 담아 요청한다.
    3. 그 외의 request에 담을 정보들
      • uri : 도메인과 포트 이하에 있는 정보들

카테고리:

업데이트:

댓글남기기