01. 서블릿 개요

  1. 서블릿(Servlet)이란?
    • 서블릿은 자바 플랫폼에서 컴포넌트를 기반으로 하는 웹 애플리케이션 개발의 핵심 기술
    • JSP는 서블릿 기반의 웹 프로그래밍 기술로 내부적으로 JSP는 서블릿으로 변환되어 실행
    • 따라서 JSP를 보다 잘 이해하고 고급 웹 프로그래밍 개발을 위해서는 서블릿에 대한 이해가 필요함
    1. 서블릿의 장점
      1. 자바를 기반으로 하므로 자바 API를 모두 사용할 수 있다.
      2. 운영체제나 하드웨어에 영향을 받지 않으므로, 한 번 개발된 애플리케이션은 다양한 서버 환경에서도 실행할 수 있다.
      3. 웹 애플리케이션에서 효율적인 자료 공유 방법을 제공한다.
      4. 다양한 오픈소스 라이브러리와 개발도구를 활용할 수 있다.
    2. 웹 애플리케이션 개발에 서블릿 사용 시 이점
      1. MVC 패턴을 쉽게 적용할 수 있고 컨테이너와 밀접한 서버 프로그램을 구현할 수 있다.
      2. MVC 패턴을 적요할 때 콘텐츠와 비즈니스 로직을 분리할 수 있으며 컨트롤러와 뷰가 역할을 분담함으로써, 웹 디자이너와 개발자 간에 작업을 원활하게 할 수 있다.
      3. 리스너 및 필터 서블릿 등 고급 프로그래밍 기법을 통해 더욱 효과적인 웹 애플리케이션을 설계할 수 있다.
  2. 서블릿과 서블릿 컨테이너
    • 서블릿 컨테이너는 서블릿을 실행하기 위한 서버 소프트웨어를 말하는 것으로 JSP나 서블릿으로 만들어진 웹 프로그램을 개발하고 실행하기 위한 환경
    • 아파치 톰캣이 대표적임
  3. 서블릿 동작 과정
    • 서블릿은 개발자가 소스 작성 후 컴파일 과정을 거쳐 컨테이너에 배치(deploy)하게 되면 컨테이너에 의해 실행되어 관리된다.
    • 이후 사용자 요청에 따라 스레드 단위로 실행되면서 데이터베이스 연동 등 필요한 작업을 수행하고 처리 결과를 사용자에게 HTML 형식으로 전달하는 구조로 동작한다.
    • 서블릿은 일반적인 애플리케이션처럼 버튼을 누르면 시작되고 처리를 마치면 종료되는 구조가 아님
    • 서버에서 컨테이너에 의해 실행 되면서 생명주기를 가지며 특정 이벤트와 상태가 존재하는 구조
    • 서블릿 개발은 해당 생명주기 메서드를 오버라이딩하거나 doGet(), doPost()와 같은 사용자 요청 처리 메서드를 구현하는 것임
    • init()은 서블릿 실행시 한번만 실행되는 메서드이고 service() 메서드는 사용자 요청시 매번 호출되는 메서드이다. destroy()는 서블릿 종료 시 실행되는 메서드이다.
02. 서블릿 구조와 생명주기
  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.hanb.co.kr/index.html 이라는 URL 요청은 HTTP프로토콜에서는 GET/index.html과 같이 서버에 전달됨
      • HTTP 프로토콜에는 GET,POST,PUT,HEAD,DELETE,OPTIONS,TRACE와 같은 요청이 정의되어 있으며 서블릿에도 각각doGet(), doPOST()와 같은 대응 메서드가 존재함
    1. GET 방식
      • 서버에 있는 정보를 클라이언트로 가져오기 위한 방법이다. 예를 들어 HTML, 이미지 등을 웹 브라우저에서 보기 위한 요청
      • 서버에는 최대 240Byte까지 데이터를 전달할 수 있다.
      • QUERY_STRING 환경변수를 통해서 서버로 전달되는데, 다음 형식을 따른다.
        • http://www.xxx.co.kr/servlet/login?id=hj&name=hong
      • '?'이후의 값들은 서버에서 QUERY_STRING을 통해 전달된다. '속성=값'형태로 사용해야 하며 '&'는 여러 속성 값을 전달할 때 연결해주는 문자열이다.
      • URL이 노출되기 때문에 보안에 문제가 생길 수 있다.
    2. POST 방식
      • 서버로 정보를 올리기 위해 설계된 방법이다. 예를 들어 HTML 폼에 입력한 내용을 서버에 전달하기 위한 요청
      • 서버에 전달 할 수 있는 데이터 크기에는 제한이 없다.
      • URL에는 매개변수가 표시되지 않는다.
  2. 서블릿 생명주기
    1. 서블릿 초기화 : init() 메서드
      • 서블릿 실행시 호출되는 메서드로 초기에 한 번만 실행된다. 공통적으로 필요한 작업 등 수행
    2. 요청/응답 : service() 메서드
      • 사용자 요청에 따라 스레드로 실행되는 메서드로 각각 service() 메서드를 통해 doGet() 혹은 doPoser() 메서드가 호출된다.
      • 파라미터인 HttpServletRequest 와 HttpServletResponse를 통해 사용자 요청을 처리한다.
    3. 서블릿 종료 : destroy() 메서드
      • 컨테이너로부터 서블릿 종료 요청이 있을 때 호출되는 메서드
      • init()와 마찬가지로 한 번만 실행되며, 서블릿이 종료되면서 정리할 작업이 있다면 destroy()를 오버라이딩해서 구현함


Posted by OnewayK
,

01. JSP 개요

  1. 서블릿(Servlet)과 JSP(Java Server Page)
    • 서블릿은 자바를 이용한 서버 프로그래밍 기술이다.
    • 초기 웹 프로그래밍 기술인 CGI(Common Gateway Interface)를 대체하기 위해 개발되었으나, 느린 처리 속도, 많은 메모리 요구, 불편한 화면 제어 등의 한계로 PHP, ASP 등 서버 스크립트 언어 등장
    • JSP는 PHP와 유사한 형태로 HTML을 중심으로 자바 프로그램과의 유기적인 연결을 지원
    1. JSP의 특징
      1. 자바의 모든 기능을 사용할 수 있어 발전 가능성이 무한하다
      2. 서블릿으로 컴파일된 후 메모리에서 처리되기 때문에 많은 사용자의 접속도 원활하게 처리할 수 있다.
      3. JSP 또는 다른 서블릿 간의 데이터를 쉽게 공유 할 수 있다.
      4. 빈즈(Beans)라고 하는 자바 컴포넌트를 사용할 수 있다.
      5. 커스텀 태그를 만들어 사용할 수 있으며, JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리를 이용할 수 있다.
      6. 스트러츠, 스프링 @MVC 등 다양한 프레임워크와 결합하여 개발할 수 있다.
  2. JSP 학습에 필요한 기술
    • JSP는 웹 프로그래밍 기술로 HTML, 자바스크립트, CSS와 같은 기본 웹 프로그래밍 경험이 요구됨
    • JSP는 자바언어 기반이며 개발 시 순수 자바 코드가 50% 이상으로 탄탄한 자바 기본기가 요구
    • 이외 추가적으로 다음 기술들에 대한 경험이 있다면 고급 웹 프로그래밍 학습에 도움이 됨
02. JSP 처리 과정의 이해
  1. JSP 전체 동작 과정
    • JSP는 HTML과 유사한 처리 과정을 거치나 HTML이 단순 서버 파일을 브라우저로 보내주는 것에 비해 JSP는 서버에서 프로그램이 실행된 결과를 웹 브라우저로 전달하는 차이가 있음                                                        
      1. 웹 브라우저에서 URL을 입력한다
      2. DNS 서버로부터 입력한 URL을 변환한 IP 주소를 받는다
      3. 받은 IP 주소의 웹 서버 8080번 포트에 JSP 페이지를 요청한다
      4. 웹 서버가 요청 내용을 분석하고 서블릿 컨테이너에 요청을 넘겨 처리한다
      5. 화면에 보일 내용을 HTML 문서 혀애로 웹 브라우저에 전송한다.
  2. 서블릿 컨테이너 내부 과정
    1. JSP와 서블릿 차이
      • JSP는 HTML과 같은 일반적인 텍스트 파일 구조
      • 서블릿은 자바 소스로 작성된 클래스 파일 구조
      • JSP는 서블릿 컨테이너에 의해 서블릿 형태의 자바 소스로 변환되어 클래스로 컴파일 됨
    2. 서블릿 컨테이너
      • 서블릿 컨테이너는 서블릿을 실행하고 JSP를 서블릿 코드로 변환하는 기능을 수행
      • 변환된 JSP의 서블릿 클래스를 실행하고 웹 서버의 메모리에 적재하고 사용자 요청에 따라 실행
        1. 웹 서버로부터 JSP에 대한 사용자 요청이 컨테이너로 전달된다.
        2. 요청 JSP에 대한 서블릿이 존재하면 다음 단계로 진행하고, 존재하지 않을 경우 JSP를 .java 파일로 변환한 다음 .class 파일로 컴파일한다.
        3. 컴파일된 서블릿 클래스를 컨테이너의 메모리에 적재하고 실행한다.
        4. 데이터베이스 처리 혹은 별도의 기능을 위한 클래스 호출 등이 있다면 실행하고 결과를 취합해 HTML 형태로 구성한다.
        5. 4번과 동일
        6. HTML 형태의 결과를 웹 서버를 경유해 사용자 브라우저에 전달한다.
      • JSP 파일은 일반 텍스트를 비롯해 HTML 코드와 특수태그, 자바 코드가 섞여 있다.
      • 서블릿으로 변환된 JSP는 컨테이너에 의해 생명주기가 관리된다.
      • 서블릿으로 변환된 JSP는 jspInit() 메서드에 의해 실행되고 Ready 상태가 되며 이후 사용자 요청은 _jspService() 메소드가 쓰레드 형태로 호출되어 실행된다.
      • 컨테이너에 의해 JSP 서블릿이 종료될 때에는 jspDestroy() 메서드가 실행된다.
    • JSP에 관해 이것만은 알고 있자.
      1. JSP는 일반 텍스트 파일로 되어 있다.
      2. JSP는 HTML 코드와 몇몇 특수한 태그, 그리고 자바 코드가 섞여 있다.
      3. 사용자가 요청할 경우 JSP는 컨테이너(톰캣)에 의해 서블릿 형태의 .java 소스로 변환되고 컴파일 된다.
      4. 컴파일된 .class는 컴퓨터에서 실행할 수 있는 형태로 특정한 기능을 수행할 수 있게 된다. 이후 소스 변경 전까지 해당 파일은 메모리에 상주하면서 다시 컴파일 되지 않고 서비스된다.
03. JSP 프로그램 기술 변천
  1. 서블릿과 JSP 기술 변천
    • 서블릿 : 일반 자바 프로그램을 통해 웹 컨텐츠를 표현함
    • JSP : HTML 기반으로(즉 화면을 중심으로) 프로그램과의 연동을 지원함
    • JSP와 HTML 코드의 혼용으로 인한 문제점 해결을 위한 MVC 패턴 등장
    • 개발 생산성과 확장성 등 개발 수준 향상을 위한 오픈소스 프레임워크 등장
    • 새로운 웹 기술과 새로운 디바이스의 보급 확산
  2. JSP 프로그램 모델 유형 비교
    • 프로그램 모델은 구조와 관련된 것으로 실행결과는 동일하나 프로그램 개발 및 유지보수에는 많은 차이가 있을 수 있다.
    • 빈즈를 이용한 JSP 처리 과정
      1. 웹 브라우저 요청에 대해서 웹 서버가 http 프로토콜에 따라 사용자 요청을 처리한다.
      2. 웹 서버는 HTML과 JSP인 경우를 구분해서 처리한다
      3. 2번과 동일
      4. JSP의 경우 useBean 액션을 이용해서 빈즈 클래스와 연동한다.
      5. 필요한 경우 데이터베이스 관련 작업 등을 처리한다.
      6. 처리한 결과를 보여주는 JSP를 호출한다.
      7. 필요한 경우 결과를 보여주는 JSP에서도 빈즈를 사용할 수 있다.


Posted by OnewayK
,
01. JSP 개발 환경 개요
  • JSP 개발 환경을 구축하려면 여러 개발 툴을 상호 연동하여 설치해야 한다.
  • JSP는 자바로 구현되므로 자바 개발환경이 필요하다.
  • 또한 작성한 코드를 웹 서버에서 실행하려면 JSP 운영환경이 필요하고, 자바를 이용한 편리한 개발을 위해 통합 개발환경도 필요하다.
  • 개발환경을 구축할 때는 안정적인 하드웨어와 검증된 운영체제를 사용하는 것이 좋다. 문제가 생기면 개발 중인 중요한 소스를 날릴 수도 있고, 개발이 지연될 경우 전체 프로젝트에 막대한 지장을 초래

02. JSP 개발 환경 구축

  1. 자바 개발환경 구축 : JDK
    • 자바는 객체지향 언어로서, 하드웨어와 운영체제에 영향을 받지 않는 특징이 있다. 이는 '한 번 만든 프로그램은 어디에서나 실행 가능하다(Write once run anywhere)'는 자바의 모토이기도 하다. 실제 자바는 이러한 특징은 서버 컴퓨터에서 휴대폰과 같은 다양한 장치(Device)에 이르기까지 폭넓게 적용 될 수 있는 기반이 된다.
  2. JSP 운영환경 구축 : 아파치 톰캣
    • 아파치 톰캣(Apache Tomcat)은 웹 서버 소프트웨어의 하나로, 서블릿 컨테이너라고도 한다.
    • 서블릿 컨테이너는 서블릿과 JSP를 실행할 수 있는 환경을 말한다. 기본적으로 웹 서버의 기능도 포함하고 있으며 자바로 개발되어 있다.
    • 개발용이 아닌 실제 서비스용으로 웹 서버를 운영하려면 아파치 웹 서버를 설치하고 서블릿 컨테이너로 톰캣을 사용할 수 있도록 설정하는 것이 좋음
  3. 통합 개발환경 구축 : 이클립스
    • 이클립스(Eclipse)는 IBM에서 개발해 오픈소스 프로젝트로 기증한 통합 개발환경이다.
      • 이클립스는 자바, JSP 및 C/C++ 개발도 가능하고 안드로이드 모바일 앱 개발에서 사용된다.
03. 이클립스 기본 환경 설정
  1. 작업공간
    • 작업 공간(Workspace)은 이클립스에서 프로젝트 및 소스코드를 관리하는 영역
    • 만일 여러 명의 사용자가 하나의 컴퓨터 계정을 사용하거나 혹은 하나의 실습실에서 여러 종류의 자바 강의가 동시에 이뤄질 경우, 프로젝트 단위로 구분하는 것도 가능하지만, 소스 관리나 개인적인 프로젝트 설정 등을 유지 하려면 작업공간 자체를 바꿔서 관리하는 것이 좋다.


Posted by OnewayK
,