카테고리 없음

Servlet&JSP_Chapter01_자바와 웹

강용민 2022. 9. 27. 12:43

웹에서의 자바 기술

서블릿과 JSP는 웹에서 실행되는 애플리케이션 기술이다.

웹에서 사용되고 활용되어온 자바 기술의 종류와 기능에 대해 알아보자.

 

애플릿(Applet)

초창기 웹은 정적인 페이지만 보여줄 뿐이였다. 즉, 실시간으로 보여주어야 하는 동적인 데이터들을 처리할 방법이 없었다.

그런데 자바 기반의 애플릿이 등장하면서 동적인 데이터들을 처리할 수 있는 작은 프로그램을 만들어 사용할 수 있게 되었다.

현재는 HTML5, CSS, jQuery 등의 기술들이 애플릿을 대신해 많이 사용되고 있지만, 초창기에는 많이 사용되었다.

 

서블릿(Servlet)

애플릿이 자바의 성장을 이끌었지만, 클라이언트 측에 내려받아서 실행되는 약점이 있었다.

이를 극복하기 위해 서블릿이라는 자바 언어로 구현되는 서버 프로그램이 등장했다.

서블릿은 클라이언트가 웹 브라우저를 통해 요청하면 서버에서 실행한 후 결과값만 클리언트로 전송한다. 또한, HTTp 프로토콜로 통신하는 웹의 특징과 속성들을 자유롭게 활용할 수 있는 API를 제공함으로써, 클라이언트의 요청과 서버의 응답에 관한 처리 작업을 쉽게 할 수 있다.

 

비교 애플릿(Applet) 서블릿(Servlet)
실행 클라이언트 측에서 실행된다. 서버 측에서 실행된다.
요구 사항 실행에 자바 호환 브라우저가 필요하다. 클라언트 측의 입력을 처리하고 HTML 페이지, JS, 애플릿의 관점에서 응답을 처리한다.
보안 클라이언트 시스템에 있는것처럼 위험이 높아진다. 서버 보안 아래에 있다.

 

JSP(JavaServer Page)

JSP는 서블릿과 똑같은 기능을 가지고 있다.

차이가 있다면 표현하는 방법과 웹 애플리케이션에서의 역할이 다르다.

  • 서블릿
    • 자바 언어로 구현
    • 컨트롤러(Controller) 페이지를 만들 때 사용한다.
      • 컨트롤러 : 뷰에서 들어온 요청을 받아서 처리하는 페이지
  • JSP
    • HTML 페이지 안의 스크립트 형태로 구현
    • 뷰(View)페이지를 만들 때 사용한다.
      • 뷰 : 클라이언트가 보는 화면으로서 클라이언트로부터 요청받거나 처리된 결과를 보여주는 페이지

 

웹 프로그래밍의 이해

웹 문서

웹에서 클라이언트가 서버에 정보를 요청하면 응답하는 콘텐츠라고 할 수 있으며, 정적인 웹 문서와 동적인 웹 문서로구분된다.

정적인 웹 문서는 클라이언트가 웹 문서를 요청하면, 웹서버는 이미 만들어져 있는 문서를 클라이언트에 제공한다.

동적인 웹 문서는 요청 시마다 다른 웹 문서의 내용을 클라이언트로 전달하는 것으로, 다음과 같은 두 가지 방법 중 하나에 의해 처리된다.

  • 클라이언트가 서버에 웹문서를 요청하면 웹 문서에 동적인 요소를 포함하는 방식(스크립트 방식)
  • 클라이언트가 서버에 웹문서를 요청하면 서버가 다른 애플리케이션을 통해 웹 문서를 재생성하여 제공하는 방식

JSP가 첫 번째 방식인 스크립트 방식이고 서블릿은 두 번째 방식을 지원하는 기술이다.

 

웹 애플리케이션

웹에서 수행되는 애플리케이션으로 수행 위치에 따라 Server Side와 Client Side로 나뉘며, 구현 방식에 따라 컴파일 방식과 스크립트 방식으로 나뉜다.

  • Server Side : 웹 애플리케이션이 서버에서 일차 수행되면서 서버의 자원을 활용하고, 그 결과를 클라이언트에 전송
  • Client Side : 클라이언트에서 요청한 웹 애플리케이션이 클라이언트에 전송된 다음 클라이언트 자원을 이용하고 클라이언트에 의해 수행
  • 컴파일 방식 : 웹 애플리케이션이 미리 컴파일되고 실행 파일이 만들어진 후 사용된다.
  • 스크립트 방식 : 요청이 있을 떄마다 해석(Interpret)되거나 컴파일이 필요없다.

 

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

웹 서버

웹에서 서버 기능을 수행하는 프로그램으로서 HTTP라는 프로토콜을 기반으로 하여 웹 클라이언트(브라우저)로부터의 요청을 서비스하는 기능을 담당한다.

웹서버의 역할은 클라이언트로부터의 요청을 받는 일과 처리된 결과(서비스)를 클라이언트를 응답하는 일로 나누니며, 구체적으로 다음 기능들을 처리한다.

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

웹 애플리케이션 서버(Web Application Server, WAS)

웹 서버의 기능을 분리해서 처리하려는 목적으로 사용된다.

클라이언트로부터 요청받을 일과 화면에 표현하는 로직(Presentation Logic)까지만 웹서버에서 담당하고, 다양한 기능을 수행하는 로직(Business Logic)은 컨테이너가 담당하도록 WAS에서 일을 나누어 역할을 분담한다.

WAS는 크게 웹서버 기능과 컨테이너 기능으로 구성된다.

 

컨테이너

서블릿과 JSP와 같은 웹서버 애플리케이션들은 동적 콘첸츠를 생성하는 웹 컴포넌트이다.

이러한 웹 컴포넌트를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램이 바로 컨테이너이다.

 

HTTP 프로토콜의 이해

HTTP

HTTP(Hyper Text Transfer Protocl)는 TCP/IP 4계층에서 애플리케이션 계층(Application Layer)에 해당하는 프로토콜로서, 전송 계층(Transport Layer)에서 TCP를 사용하여 웹 브라우저와 웹 서버 간에 통신하는 프로토콜이다.

HTTP는 신뢰성 있는 통신과 처리 효율이 높은 프로토콜로서 다음과 같은 특징이 있다.

  • 무연결(Connectionless)
    • 일반적으로 클라이언트와 서버가 통신하려면 연결을 유지한 상태에서 통신해야 하지만,HTTP는 연결을 유지하지 않은 상태로 데이터를 주고받을 수 있다.
      HTTP는 클라이언트로부터 요청이 들어와 서버가 응답하면 클라이언트와 서버의 연결을 끊고 클라이언트가 새로 요청하면 또 다른 연결을 맺는다.
      그래서 클라이언트와 서버의 요청 단위로 새로운 연결을 처리해야 하는 단점이 있다.
  • 무상태(Stateless)
    • HTTP는 무연결 특징이 있어서 요청이 있을 떄마다 독립적인 트랜잭션으로 취급하기 때문에 이전 연결에서 했던 작업내용을 다음 요청에서 그대로 사용할 수 없다.
      그래서 HTTP를 사용하는 웹 프로그래밍에서는 이전 요청 시 사용한 정보를 다른 요청에서도 계속 사용하고 싶다면, 서버나 클라이언트 측에 정보를 저장해 두고 계속 상태정보를 유지한 후 사용하는 정보 유지기술이 필요하다.
  • 요청 / 응답(Request / Response)
    • 클라이언트가 서비스를 요청하면 서버는 요청 정보를 받고 요청을 처리한 후 응답함으로써 서비스가 완료되는 방식 즉 요청정보와 응답정보를 주고받으며 통신이 이뤄지는 방식이다.
      그래서 웹서버 프로그래밍을 하려면 웹서버와 클라이언트가 주고받는 요청 및 응답 메시지에 대한 이해가 우선으로 이뤄저야 한다.

 

HTTP 요청정보

HTTP 요청정보는 크게 헤더와 바디로 구성되며 헤더의 가장 첫 번째 줄은 요청 줄(Request-Line)로서 3개의 정보가 들어간다.

  • 요청 방식(Get / Post / Put / Delete 등)
  • URI
  • HTTP 버전

요청 줄 이후 공백 행이 삽입되며 다음 줄부터 헤더 정보이다. 헤더에는 General , Request / Response, Entity Header가 있으며 각각 정보가 담겨있다. [참고]https://hazel-developer.tistory.com/145

 

HTTP 요청방식

  • GET
    • GET 방식의 요청은 브라우저에서 캐시(cache)가 가능하며 클라이언트가 서로 전송하는 문자열이 있을 떄는 요청정보 헤더의 요청 줄에 포함되는 URL 뒤에 '?' 기호와 함께 추가되어 전달된다.
    • 그래서 클라이언트에서 서버로 보내는 모든 문자열 정보들이 웹 브라우저에 노출되는 특징이 있으며, 헤더에 포함되므로 전달되는 문자열의 크기에 제한이 있다.
    • 가장 단순한 요청방식으로 서버에 빠른 속도로 요청할 때 사용한다.
  • POST
    • 데이터가 HTTP 요청정보의 몸체에 포함되어 전달된다. 따라서 데이터 크기에 제한이 없고, 화면에 노출되지 않는다.
    • 그러나 POST 방식은 웹클라이언트 측에서 보내는 데이터를 인코딩하고, 서버 측에서 디코딩해야 하므로 GET 방식보다 상대적으로 처리속도가 느리다.
    • 주로 서버 측의 정보를 새로 생성하는 작업에 사용한다.
  • PUT
    • 파일 업로드 할 떄 이용할 수 있다.
    • 일반적으로 서버의 리소스를 새로 생성할 때 POST 방식으로 요청하고, 서버의 리소스를 수정할 때는 PUT 방식으로 구분하여 요청한다.
  • DELETE
    • 서버의 리소스를 삭제하는 작업을 요청할 때 사용하는 방식이다.

 

URI

요청 URI는 웹 클라이언트가 웹서버에 요청한 서비스 문서의 정보이다.

프로토콜 서버주소 포트번호 Request-URI 순으로 이뤄져있다.

 

HTTP 응답정보

웹서버에서 클라이언트로 보내지는 응답정보 메시지의 구조는 다음과 같다.

HTTP 응답정보 상태 줄은 HTTP 버전, 상태 코드(Status-Code), 상태 코드 설명(Reason-Phrase)으로 구성되어 있다.

 

상태 코드

상태 코드는 클라이언트의 요청에 대한 처리 결과를 의미한다.

클라이언트는 응답정보 메시지를 받으면 상태 코드를 보고 처리 결과인 응답정보 메시지를 처리한다.

[참고]https://www.whatap.io/ko/blog/40/