JSP를 이해하기 위한 자바와 웹 기초 지식

2020. 5. 21. 22:12자바 Java/JSP(Java Server Page)

반응형

자바의 웹 서버 애플리케이션 기술인 서블릿과 jsp는 기존의 기술들 보다 구현상 그리고 수행상 많은 장점이 있는 기술 이다. HTTP에 대한 자세한 스펙을 알지 못해도 웹 서버 애플리케이션을 쉽게 구현할 수 있는 다양한 기능의 API를 지원하며, 웹 클라이언트의 요청에 빠르게 응답하고 효과적인 멀티스레드 수행구조를 지원한다. 아래에서 자바 기술의 종류와 웹에서 지원하는 자바의 웹 기술에 대해 알아보자 

 

 

자바 언어가 많이 사용 되는 이유는 썬마이크로시스템즈에서 자바를 GPL라이선스로 오픈하였기 때문이다. 

GPL(General Public License)라이선스는 free software foundation 에서 만든 자유 소프트웨어 라이선스로 가장 널리 알려진 사용 허가(카피레프트) 이다. 카피 레프트는 " 지식과 정보는 소수 독점이 아니라 모든 사람이 사용할 수 있어야 한다" 는 개념이다.  GPL코드를 이용해 개발된 프로그램 역시 동일한 카피레프트를 가져야 한다는 조건이 있다. 

 

<자바 개발 플랫 폼> 

1. Java SE ( Java Platform, Standard Edition) 플랫폼에는 자바 개발 환경인 JDK와 자바 런타임 환경이 JRE 두가지로 나누어 제공한다. 

 

2. Java EE( Java Enterprise Edition) 은 Java SE에 웹서버 역할을 추가한 것으로 자바 애플리케이션을 동작하게 하는 컨테이너 등을 표준화 한 스펙이다. Java EE의 기술로는 웹 프로그래밍에서 사용하는 JSP, servlet과 비지니스 모듈을 담당하는 EJB, 데이터베이스를 연동하는 JDBC, 서버의 자원을 관리해주는 JNDI, JTA,EJB 등의 많은 기술이 있다. 

 

이러한 Java EE 스펙에 따라 제품으로 구현한 것을 WAS(Web Application Server) 라 부른다. 

많이 사용되는 WAS를 보면 상용 제품으로는 한국 티맥스 소프트의 제우스, 미국 오라클의 웹로직, 미국 IBM의 웹 스피어 등이 있고, 오픈소스로는 아파치 소프트웨어의 아파치 톰캣이 있다. 

 

3. Java ME 

Java ME(Java Micro Edition)는 모바일 장치나 내장형 장치와 같은 소형 장치에서 실행되는 자바 애플리케이션을 지원하기 위해 경령화된 기술들을 지원하는 플랫폼이다. 

 

<웹에서의 자바기술>

1. 애플릿(Applet) : 초창기 웹은 정적인 페이지만 보여주었다. 자바 언어로 구현된 애플릿 등장하면서 소규모 애니메이션, 그림그리기, 날씨변화 표시하기, 주가 정보 표시등의 간단한 기능을 처리하는 작은 프로그램을 만들어 사용 할수 있게 되었다. 애플릿은 서버에서 클라이언트 쪽으로 실행파일을 내려받아서 실행되는 방식이다. 

2. 서블릿(Servlet) : 애플릿은 클라이언트 축에 내려받아서 실행되는 약점이 있었다. 이를 극복하기 위해 서블릿이라는 자바언어로 구현되는 서버프로그램이 등장하였다. 서블릿은 클라이언트가 웹 브라우저를 통해 요청하면 서버에서 실행한 후 결괏값만 클라이언트로 전송한다. 또한, HTTP 프로토콜로 통신하는 웹의 특징과 속성들을 자유롭게 활용할 수 있는 API를 제공함으로써, 클라이언트의 요청과 서버의 응답에 관한 처리 작업을 쉽게 할 수 있다. 

서블릿은 기존의 CGI(Common Gateway Interface)가 가지던 성능적인 약점, 메모리 문제, 단일 인스턴스로 인한 병목현상 등을 해결함으로써 자바의 사용 점유율을 더욱 높였다. 

3. JSP(JavaServer Page) : JSP는 서블릿과 똑같은 기능을 가지고 있다. 차이가 있다면 표현하는 방법과 웹 애플리케이션에서의 역할이 다르다.

 

첫번째 차이는 서블릿은 완벽하게 자바 언어로 구현해야 하지만, JSP는 HTML 페이지 안에서 스크립트 형태로 구현한다. 

두번째 차이는 웹 애플리케이션에서의 역할이 다르다는 것이다. 서블릿은 컨트롤러(Controller)페이지를 만들때 사용하지만, JSP는 뷰(View) 페이지를 만들 때 사용한다. 뷰에서 들어온 요청을 받아서 처리하는 페이지가 컨트롤러 페이지이며, 이는 서블릿으로 구현한다. 

 

 

 

 

< 웹문서> 

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

 

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

정적인 웹문서의 예 - HTML, GIF, JPG, PDF , PPT 등이며, 이중에서도 웹에서만 사용되는 대표적인 웹문서 기술은 HTML(Hyper Transfer Markup Language)이다. 

 

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

1. 클라이언트가 서버에 웹 문서를 요청하면 웹 문서가 동적인 요소를 포함하는 방식 ( 스크립트 방식)   ex) JSP

2. 클라이언트가 서버에 웹문서를 요청하면 서버가 다른 애플리케이션을 통해 웹 문서를 재생성하여 제공하는 방식 

ex) 서블릿 

 

동적인 웹 문서 작성 기술로는 CGI, ASP, PHP, 서블릿, JSP등 이 있다. 

 

 

<웹 애플리케이션>

간단히 웹에서 수행되는 애플리케이션이다.  수행되는 위치에 따라 웹서버에서 수행되는 기술 ( Server side) 과 대표적인 웹클라이언트인 브라우저에서 수행되는 기술 ( Client side) 로 나뉘며 구현하는 방식에 따라 컴파일 방식과 비컴파일방식(스크립트방식) 으로 나누어진다. 

 

클라이언트에서 요청한 웹 애플리케이션이 클라이언트에 전송된 다음에 클라이언트 자원을 이용하고 클라이언트에 의해 수행되면 Client side 라고 하며, 웹 애플리케이션이 서버에서 일차 수행되면서 서버의 자원을 활용하고, 그 결과를 클라이언트에 전송 할 때는 Server side 로 분류한다. 

 

웹 애플리케이션이 미리 컴파일 되고 실행 파일이 만들어진 후 사용되면 컴파일 방식이라고 하며, 요청이 있을 때 마다 해석( Interpret) 되거나 컴파일이 필요 없을 때는 비컴파일 방식으로 분류한다. 

 

<웹서비스> 는 넘어가도록 한다. 

 

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

1. 웹서버

웹서버란 웹에서 서버기능을 수행하는 프로그램으로서 HTTP라는 프로토콜을 기반으로 하여 웹 클라이언트(브라우저)로부터의 요청을 서비스하는 기능을 담당한다. HTTP라는 프로토콜을 기반으로 동작하므로 웹서버를 HTTP서버라고도 한다. 웹서버의 역할은 클라이언트로부터의 요청을 받는 일과 처리된 (서비스) 결과를 클라이언트로 응답하는 일로 나뉘며 구체적으로 아래의 기능들을 처리한다. 

                 (1) 클라이언트가 요청한 웹문서를 찾아서 전달하는 기능을 처리한다. 

                 (2) 요청파일이 없거나 문제가 발생하면 정해진 코드값으로 응답한다. 

                 (3) 클라이언트로부터의 요청에 대한 기본 사용자 인증 (Basic Authentication)을 처리한다. 

                 (4) 서버 프로그램에 대한 요청을 웹 애플리케이션 서버에 수행시키고 그 결과를 응답한다. 

 

2. 웹 애플리 케이션 서버 

여러가지 이유로 여러개의 서버를 병럴로 처리하는 방법을 쓰기도 하지만, 웹서버의 기능을 분류해서 처리하려는 목적으로 웹 애플리케이션 서버( Web Application Server)를 사용한다. 클라이언트로부터 요청받은 일과 화면에 표현하는 로직까지만 웹서버에서 담당하고 다양한 기능을 수행하는 로직은 컨테이너가 담당하도록 WAS에서 일을 나누어 역할을 분담하는 것이다. 

 

WAS는 크게 웹서버 기능과 컨테이너 기능으로 구성된다. 대부분 상용화된 WAS는 웹 서버나 컨테이너 기능 외에 엔터프라이즈 환경에서 필요한 트랜잭션, 보안, 트래픽 관리, DB 커넥션 풀, 사용자 관리 등의 다양하고 강력한 기능을 제공한다. 즉, Java EE기술을 지원하는 서버로서 웹서버 기능에 서블릿/JSP컨테이너 그리고 EJB 컨테이너 기능까지 지원하는 서버를 제공한다. 그래서 WAS를 Java EE서버 라고도 한다. 

 

현재 많이 사용되는 자바 웹 애플리케이션 서버 =웹로직, 웹 스피어, 제우스, 제이보스 ,톰캣 

(톰캣은 일반 상용 WAS제품 처럼 Java EE스펙을 모두 갖추고 있지 않고, JSP와 서블릿을 실행하는 컨테이너와 웹 서버만을 제공한다. 

 

 

3. 컨테이너 

서블릿과 JSP와 같은 웹서버 애플리케이션들은 동적 컨텐츠를 생성하는 웹 컴포넌트이다. 이러한 웹 컴포넌트를 저장하는 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 수행하는 프로그램이 바로 컨테이너 이다. 대부분의 WAS에서는 서블릿 컨테이너와 JSP컨테이너를 내장하고 있다. 

                 (1) 서블릿 컨테이너 : 변환된 서블릿의 수행을 담당한다. 

                 (2) JSP컨테이너 : JSP파일을 서블릿 소스로 변환 및 컴파일 까지만 담당하는 프로그램이다. 

 

 

<HTTP프로토콜의 이해>

웹은 서버와 클라이엍느로 구성되며 서로간에 HTTP프로토콜을 기반으로 동작한다. 

1. HTTP(Hyper Text Transfer Protocol)란?

TCP/IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜로서, 전송계층에서 TCP를 사용하여 웹 브라우저와 웹 서버간에 통신하는 프로토콜이다. HTTP는 웹브라우저와 웹서버가 통신(요청, 응답) 할때, 서로 약속된 요청, 응답 메세지를 주고받으면서 통신이 이루어진다. 

HTTP는 신뢰성있는 통신과 처리 효율이 높은 프로토콜로서 인터넷 환경에서 가장 적합한 통신 구조로 인정받으며 다음과 같은 특징이 있다. 

                 (1) 무연결 (Connectionless) : 일반적으로 클라이언트가 서버와 통신하려면 연결을 유지한 상태에서 통신해야 한다 그러나 HTTP는 연결을 유지하지 않은 상태로 데이터를 주고받을 수 있다. HTTP는 클라이언트로부터 요청이 들어와 서버가 응답하면 클라이언트와 서버의 연결을 끊고 클라이언트가 새로 요청하면 또다른 연결을 맺는다. 이때의 연결은 이전과는 아무 상관이 없는 새로운 연결이다. 즉, HTTP는 클라이언트와 서버간에 요청이 있을 때마다 독립적으로 연결하여 통신하는 방식이다. 그래서 클라이언트와 서버의 요청 단위로 새로운 연결을 처리해야 하는 단점이 있다. 

                 (2) 무상태 (Stateless) : HTTP는 무연결 특징이 있어 요청이 있을 때마다 독립적인 트랜잭션으로 취급하기 때문에 이전 연결에서 했던 작업내용을 다음 요청에서 그대로 사용할 수 없다. 이처럼 요청마다 서로다른 연결로 인식되어 요청간에 정보를 공유해서 사용할 수 없는 상태, 즉 상태정보가 유지되지 않는 특성을 무상태(Stateless)라고 한다. 그래서 HTTP를 사용하는 웹 프로그래밍에서는 이전 요청시 사용한 정보를 다른 요청에서도 계속 사용하고 싶다면, 서버나 클라이언트 측에 정보를 저장해 두고 계속 상태정보를 유지한 후 사용하는 정보 유지기술이 필요하다. 

 

                 (3) 요청, 응답 (Request, Response)

 

2. HTTP 요청정보 

웹 클라이언트가 서비스를 요청한다는 것은 웹 브라우저 주소줄에 URL을 입력한 후 엔터키를 누르거나, 웹 브라우저 화면의 링크 또는 버튼을 클릭하는 동작을 말합니다. 

                 (1) HTTP 요청 방식 : GET, POST, PUT, DELETE , OPTIONS, HEAD, TRACE, CONNECT 

                 (2) 요청 URL : 프로토콜  서버주소 포트번호 서버자원정보(Request-URI)            

                 프로토콜은 서버와 통신하기 위한 규약으로 서버마다 사용하는 프로토콜 정해져있다. 

                 웹서버는 URL에 HTTP:// 로 표현하며 오라클 DBMS는 jdbc:oracld:thin:@ 으로 표현한다.

                서버주소는 IP주소 또는 도메인 이름으로 표현한다. 서버가 동작하고 있는 컴퓨터 정보이다.

                URI(Uniform Resource Identifier)는 서버에서 서비스하는 서버의 자원정보 URL에서 포트번호 이후가 URI이다.

 

 

3. HTTP 응답정보 

HTTP의 응답정보의 상태줄은 HTTP버전, 상태코드, 상태코드 설명 으로 구성되어 있다. HTTP버전은 서버가 응답하기 위해 사용하는 HTTP버전 정보이고, 상태코드는 요청한 처리결과를 숫자 세자리로 나타내며, 상태 코드 설명은 처리결과를 이해하기 쉬운 텍스트로 표현한 것이다. 

           상태코드 

           (1) 200 OK : 클라이언트의 요청을 성공적으로 처리했음을 나타내며, 서버는 요청한 데이터를 포함하여 응답.

           (2) 400 Bad Request : 클라이언트의 요청에 문법적인 오류 등 잘못된 요청으로 서버가 요청을 해석할 수 없는 경우 

           (3) 401 Unauthorized : 인증오류 로서 클라이언트가 잘못된 인증 정보를 Authorization 헤더에 넣었음을 나타낸다.

           (4) 403 Forbidden : 사용자 허가모드오류로 클라이언트의 인증 정보에 상관없이 페이지에 대한 접근을 거부 나타냄

           (5) 404 Not Found : 클라이언트가 요청한 문서가 존재하지 않음을 의미한다.

                                            즉 클라이언트의 요청에 대해 서비스 하는 요청 URL를 서버가 찾지 못한 경우 

           (6) 405 Method Not Allowed : 클라이언트가 요청한 서비스 요청방식을 웹서버에서 지원하지 않음을 의미

           (7) 500 Internal Server Error : 서버 프로그램 실행시 오류가 발생하여 서버 프로그램이 실행을 멈췄거나,

                                                            올바르지 않은 응답 헤더 정보가 설정되었을 때 발생한다. 

 

 

출처:  처음해보는 Servlet&JSP 웹 프로그래밍  오정임 지음  / 루비페이버 

반응형