4 분 소요

서블릿 프로그래밍

자바와 웹

장점

  • 객체 지향 프로그래밍
  • 플랫폼에 독립적
  • 뛰어난 재사용성
  • 방대한 API
  • 보안 우수

웹서버 애플리케이션 개발

  • 서블릿, JSP

자바 개발 플랫폼

  • Java SE : 데스크톱, 서버, 임베디드 시스템 개발을 위한 표준 자바 플랫폼. JDK, JRE 두 가지로 나누어서 제공
  • Java EE : 자바의 기본적인 기능 정의한 SE에 웹서버 역할 추가한 것. 자바 애플리케이션을 동작하게 하는 컨테이너 등을 표준화한 스펙
  • Java ME : 모바일 장치나 내장형 장치(휴대전화, 셋톱 박스 PDA) 같은 소형장치에서 실행되는 자바 애플리케이션을 지원하기 위해 경량화된 기술 지원.(자바 VM 경량화한 KVM, CardVM)

웹에서의 자바 기술

  • 웹에서 실행되는 애플리케이션 기술
  • 애플릿
    • 서버에서 클라이언트 쪽으로 실행 파일을 내려받아서 실행되는 방식
    • 현재는 HTML5, CSS, jQuery 등의 기술들이 대체
  • 서블릿
    • 자바 언어로 구현되는 서버 프로그램
    • 클라이언트가 웹 브라우저를 통해 요청하면 서버에서 실행한 후 결과값만 클라이언트로 전송
    • HTTP 프로토콜로 통신하는 웹의 특징과 속성들을 자유롭게 활용할 수 있는 API 제공
    • 컨트롤러 페이지 만들 때 사용
    • 기존 CGI(Common Gateway Interface)가 가지던 성능적 약점, 메모리 문제, 단일 인스턴스로 인한 병목현상 등을 해결
  • JSP
    • 서블릿과 똑같은 기능
    • HTML 페이지 안에서 스크립트 형태로 구현
    • 간단한 코드로 구현
    • 뷰 페이지 만들 때 사용

웹 프로그래밍

웹문서

  • 클라이언트가 서버에 정보를 요청하면 응답하는 콘텐츠
    • 정적 웹 문서 : 클라이언트가 웹 문서를 요청하면 웹서버는 이미 만들어져 있는 문서를 클라이언트에 제공 - HTML, GIF, JPG, PDF, PPT 등
    • 동적 웹 문서 : 요청 시마다 다른 문서의 내용을 클라이언트로 전달하는 것 - CGI, ASP, PHP, 서블릿, JSP
      • 웹 문서에 동적인 요소를 포함(스크립트 방식) - JSP
      • 서버가 다른 애플리케이션을 통해 웹 문서를 재생성하여 제공하는 방식 - 서블릿
  • 웹 애플리케이션
    • 클라이언트 사이드 : 클라이언트에서 요청한 웹 애플리케이션이 클라이언트에 전송된 다음에 클라이언트 자원을 이용하고 클라이언트에 의해 수행
    • 서버 시아드 : 웹 애플리케이션이 서버에서 일차 수행되면서 서버의 자원을 활용하고 그 결과를 클라이언트에 전송
  • 웹 서비스
    • 네트워크 상에 분산된 자원들을 이기종 간에 서로 연동하여 자원을 공유하기 위한 추상적 서비스 형태
      • SOAP 기반 : SOA 개념을 실현하기 위한 대표적 기술. UDDI라는 전역 서비스 저장소에서 서비스 요청자가 검색 후 HTTP의 응용 프로토콜인 SOAP를 이용하여 메세지 주고받는 방식
      • RESTful 기반 웹 서비스 : SOAP의 문제점을 보완할 수 있는 REST 기반 웹 서비스. HTTP의 기본 기능만으로 원격 정보에 접근

웹 서버와 웹 애플리케이션 서버

웹 서버

  • 웹에서 서버 기능을 수행하는 프로그램. HTTP 프로토콜 기반으로 웹 클라이언트로부터의 요청을 서비스하는 기능 담당
    • 클라이언트가 요청한 웹 문서 찾아서 전달
    • 요청 파일이 없거나 문제가 발생하면 정해진 코드 값으로 응답
    • 클라이언트로부터의 요청에 대한 기본 사용자 인증 처리
    • 서버 프로그램에 대한 요청 웹 애플리케이션 서버에 수행시키고 그 결과 응답

웹 애플리케이션 서버

  • 여러 웹 클라이언트로부터의 요구를 웹 서버 단독으로 처리하면 처리량이 많아지고 성능에 문제
  • 웹 서버의 기능을 분리해서 처리하려는 목적으로 사용
    • 웹서버 기능 - 웹로직, 웹스피어, 제우스, 제이보스, 톰캣

컨테이너

  • 웹 컴포넌트(서블릿, jsp)를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기 관리 / JSP를 서블릿으로 변환하는 기능
  • 서블릿 컨테이너
    • 클라이언트의 요청에 따라 서블릿을 수행하는 프로그램
  • JSP 컨테이너
    • JSP를 서블릿으로 변환하는 프로그램

HTTP 프로토콜

  • 서버와 클라이언트 간의 통신 방식

HTTP

  • TCP/IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜
  • 웹 브라우저와 웹서버가 통신할 때 서로 약속도니 요청, 응답 메세지를 주고받으면서 통신
  • 신뢰성 있는 통신과 처리 효율이 높은 프로토콜
  • 무연결성 : 클라이언트와 서버 간에 요청이 있을 때마다 독립적으로 연결하여 통신 ⇒ 요청 단위로 새로운 연결 처리
  • 무상태성 : 이전 연결에서 했던 작업 내용을 다음 요청에서 사용할 수 없음
  • 요청, 응답 : 요청 정보와 응답 정보를 주고받으면서 통신

HTTP 요청정보

  • 웹 클라이언트가 웹서버에 서비스를 요청하면 HTTP에 의하여 자동으로 만들어져 서비스 요청받는 웹서버에 전달
  • 요청정보 구조

    요청 줄 요청방식 URI HTTP 버전
    헤더 name : content
    몸체  
  • 요청방식
    • GET, POST, PUT, DELETE, HEAD, OPTIONS, HEAD, TRACE, CONNECT
  • 요청 URI
    • 웹 클라이언트가 웹서버에 요청한 서비스 문서의 정보
    • 프로토콜 서버주소 포트번호 서버자원정보 ⇒ http://www.mysite.com:80/edu/index.html
  • 헤더
    • Accept, Accept-Encoding, Accept-Language, User-Agent, Cache-Control

HTTP 응답정보

  • 상태코드
    • 200, 400, 401, 403, 404, 405, 500
  • 헤더
    • 클라이언트 서비스 요청에 대한 실행 결과를 웹 클라이언트가 올바르게 처리할 수 있게 하기 위한 정보

서블릿 구현 및 실행

웹 애플리케이션

  • 서블릿을 만드는 목적 : 클라이언트에 서비스 하기 위해
  • 구조 : 디렉터리, 디렉터리가 압축된 형태로 웹서버에 올려서 서비스
  • web.xml : 웹 애플리케이션의 서비스 처리에 관한 내용 정의

서블릿 구현

  • javax.servlet.http 반드시 상속
  • 서블릿 인터페이스 : 서블릿 프로그램을 개발할 때 반드시 구현해야 하는 메소드를 선언하고 있는 인터페이스
    • init(), service(), destroy(), getServletConfig(), getServletInfo()
  • GenericServlet 클래스
    • sevlet 인터페이스를 상속하여 클라이언트-서버 환경에서 서버단의 어플리케이션으로서 필요한 기능을 구현한 추상 클래스
  • HttpServlet 클래스
    • GenericServlet 클래스 상속해서 service() 메소드를 재정의함으로써 HTTP 프로토콜에 알맞은 동작을 수행하도록 구현해야 하는 클래스

실행 순서

  • IoC : 개발자가 아닌 제 3자가 프로그림의 실행 흐름을 제어하는 것(제어의 역전)
  • 클라이언트로 처리 요청 받음 → 최초의 요청 여부 판단 → 서블릿 객체 생성 → init() 메소드 실행 → service() 메소드 실행

콜백 메소드와 서블릿 객체의 생명주기

  • 콜백 메소드 : 어떤 객체에서 어떤 상황이 발생하면 컨테이너가 자동으로 호출하여 실행되는 메소드
    • init(), service, destroy()
  • 서블릿 객체가 메모리에 생성되는 시점 ⇒ 서버 입장에서 클라이언트로부터 최초로 서블릿 실행 요청이 있을 때
    • 서블릿이 생성된 뒤 같은 요청이 있으면 최초 요청시 생성한 서블릿 객체 service() 메소드 사용
  • 서블릿 객체 삭제 ⇒ 서버를 중지시켜 웹 애플리케이션 서비스를 중지할 때
    • destroy() : 자원을 해제하는 내용 구현

서블릿 실행

  • 클라이언트가 서블릿에 접근하는 방법
    • web.xml에 <servlet><servlet-mapping> 태그로 경로 설정
    • @WebServlet 어노테이션 설정