본문 바로가기
Tech/Web

[JSP&Servlet] Servelt은 무엇인가?

by 소라소라잉 2019. 4. 12.

* 웹 서버 : 클라이언트로부터 (자원)요청을 받아, 요청한 것을 넘겨주는 일을 함.

 

* 자원(resource) : HTML페이지가 될 수도 있고 그림이나 소리 파일일수도 있고 ...

 

* 요청한 자원이 서버에 없거나 주소가 틀려 서버가 찾지 못한다면? -> 404 Not Found

 

* 클라이언트 : 사용자가 서버에 요청을 보낼 수 있는 기능과 서버가 보내온 요청의 결과를 화면에 출력하는 기능을 제공. 인간 또는 브라우저를 총칭하여 사용자가 요구한 대로 동작하는 웹 브라우저 라는 뜻으로 이해.

 

* HTTP(HyperText Transfer Protocol) : 웹 상에서 클라이언트와 서버가 서로 대화하기 위한 규약, 언어를 지칭.

'요청'과 '응답'으로 이루어진 단순한 구조. 웹상에서 일어나는 클라이언트와 서버간의 대화는 HTTP프로토콜로 이루어짐.

 

* HTML : 브라우저가 화면에 내용을 표시할 방법을 지정.  

클라이언트가 서버로 부터 요청을 받으면->서버는 브라우저에게 컨텐츠 타입이 무엇인지 알려줌->브라우저는 이 내용에 기초하여 이를 어떻게 화면에 출력할지 준비. 여기서 서버가 내려보내는 명령문은 HTML로, 브라우저가 화면에 컨텐츠를 어떻게 출력할지에 대한 명령으로 이루어져 있음. 모든 웹 브라우저는 HTML을 이해. 

웹 서버는 클라이언트에게 HTML페이지를 HTTP로 보냄. = HTTP응답 안에 HTML 컨텐츠가 데이터로 포함되어 있다고 이해.

 

 

--- 이하 클라이언트->서버로 보내는 요청에 관한 내용 ---

 

* GET,POST : HTTP의 메소드는 이름만으로 그것이 어떤것인지, 함께 들어올 정보가 어떻게 포맷되어있는지 알 수 있음. -> 그 중 가장 많이 사용하는 것은 GET과 POST(가끔씩 사용되는 메소드 : HEAD, TRACE, PUT, DELETE, CONNECT)

 

* GET방식 : HTTP메소드 중 가장 단순. 단순히 서버에게 자원을 요청하고 돌려받는다(get back).

글자수에 제한이 있음. 데이터 전송방식이 URL뒤에 붙이는 식이라 화면에 다 보임 -> 보안성 낮음. 이러한 이유로 GET으로 전송하는 URL은 즐겨찾기에 등록할 수 있지만 POST는 대부분 그렇지 못함.

<form method = "get" action="어쩌고저쩌고">

= get방식으로 "어쩌고저쩌고"파일을 불러냄. method를 명기하지 않으면 get이 디폴트.

 

*POST방식 : GET보다는 좀더 강력. 서버에게 GET보다 좀더 복잡한 요청도 가능.(가령 사용자가 자신의 정보를 폼에 입력하여 서버로 전송하면, 서버는 이 정보를 데이터베이스에 저장) 서버에게 자원을 요청할 때 필요한 정보를 함께 넘겨줌.

 

*GET & POST :

- GET : 자원에 대한 경로와 파라미터는 요청라인을 구성하는 요소.(요청라인 + 요청헤더)

- POST : 요청라인에 자원경로만 있고 메세지 몸체(Message Body or payload)에 파라미터를 기술.(so, 길이 제한이 없다) (요청라인 + 요청헤더 + 메세지 몸체(또는 짐))

 

 

* 서버 -> 클라이언트 : 

HTTP/1.1 200 OK (순서대로-웹 서버가 사용한 프로토콜 version,HTTP상태코드,상태코드의 텍스트 버젼)

Set-Cookie: JSESSIONID=0.....blah blah

Content-Type: Text/html  => Content-Type의 값을 보통 MIME타입이라고 부름.

.

.

.

<html>

...

</html>

 

* HTTP응답 : 간단히 헤더와 몸체로 구성되어있음.

 - 헤더 : 사용된 프로토콜이 무엇인가, 보내준 요청에 성공했는가, 몸체에 포함된 컨텐츠의 종류는 무엇인가.

 - 몸체 : HTML과 같은 컨텐츠

 -> 브라우저는 바로 이 정보를 화면에 출력

 

* MIME 타입 : Content-type의 값을 보통 MIME타입이라고 부름. 서버가 보낼 데이터에 대한 언질 이라고 할 수 있음.

클라이언트가 보낸 요청의 헤더 중 Accept란에 기술되어 있는 값과 관련 있음.

 

--- 응답, 요청 끝 --- 

 

* URL(Uniform Resource Locators) : 웹 상에 있는 모든 자원은 자신만의 고유한 이름을 가짐. 이 고유한 이름을 부여하는 방식.

http://www.smartsora.com:80/whatsoralooklike/select/cute.html

- http:// : 프로토콜 : 서버와 대화하기 위하여 사용하는 커뮤니케이션 프로토콜

- www.smartsora.com : 서버 : IP주소에 매핑됨.

- 80 : 포트 : 옵션사항임. 포트번호로 어떤 서버 애플리케이션이 서비스 되는지 알 수 있음. 포트가 없다면 디폴트로 80이고 대부분 80포트에는 웹 서버 애플리케이션이 할당 됨.

- whatsoralooklike/select : 서버에서의 자원 위치

- cute.html : 자원 : 요청된 컨텐츠 이름. 여기서는 html페이지를 요청함. 자원에는 HTML, Servlet, 이미지 등 서버가 제공하는 모든 것이 다 포함됨. 자원을 명시하지 않으면 거의 대부분의 웹서버들은 index.html을 기본으로 넘겨줌.

 

* TCP포트 : 서버 하드웨어 상에서 돌아가는 소프트웨어를 구별하기 위한 16비트 숫자 값.

웹 서버(HTTP)는 대부분 80포트 위에서 돌아감. (21:FTP / 23:Telnet / 25:SMTP / 37:Time / 443:HTTPS / 110:POP3)

포트를 구분하기 위한 식별자&서버 하드웨어상에서 돌아가는 특정 소프트웨어에 대한 논리적인 연결을 나타냄. (포트로 쓸 수 있는 값의 범위는 0~65535)

그렇다고 하드웨어에 65535개의 물리적인 포트가 있는 것이 아니라 서버 애플리케이션을 대표하는 논리적인 숫자에 불과함. 포트를 통해 서버는 클라이언트가 지금 어느 애플리케이션에 접속하기를 원하는지 알수 있고 애플리케이션과의 통신은 정해진 프로토콜로 이루어짐. 대개 0번에서 1023번까지 TCP포트는 이미 널리 알려진 서비스를 위하여 예약되어있음. 가급적 이 범위의 포트는 사용하면 안됨.

 

* 정적인 페이지만을 서비스 : 웹 서버는 디렉토리에 있는 파일 그대로의 정적인 페이지만을 서비스함. 서버는 단지 파일을 찾아서 있는 그대로 클라이언트에게 넘겨줄 뿐임.= 모든 클라이언트가 동일한 결과를 본다. = 요청이 날아가기 바로 전까지 존재하지 않았던 페이지를 만들 수 없다. = 파일이나 데이터베이스에 데이터를 저장할 수 없다.

 

* 웹 서버가 혼자 할 수 없는 것

 - 동적인 컨텐츠 생성(ex.웹 방문 로그, 실시간 도서목록, 이미지 디렉토리에서 임의로 그림을 하나 골라 제공하는 것 등)

 - 서버 상에 데이터 저장

 

* 웹 서버가 혼자서 할 수 없는 것들을 도와주는 애플리케이션(CGI 프로그램 - Common Gateway Interface) : 웹 서버와 협력해서 동적인,실시간으로 작성한 페이지를 제공 가능.

 

* CGI를 가지고 어떻게 클라이언트에게  동적인 정보를 제공해주는가? (현재시간을 제공하는 프로세스)

(1)사용자는 정적인 페이지가 아닌 CGI프로그램에 대한 URL을 클릭

(2)웹 서버는 들어온 요청이 CGI프로그램을 호출하는 것임을 파악하고 해당 프로그램 실행.(GET 또는 POST로 넘어온 파라미터 그대로 CGI프로그램에게 넘겨줌)

(3)CGI프로그램은 현재 시간이 들어간 동적페이지를 만들어 서버에 HTML형식으로 넘겨줌. 이 시점에서 웹 서버가 CGI프로그램으로 부터 받은 페이지는 정적인 페이지임.

(4)CGI프로그램은 종료되고 클라이언트는 정적인 페이지가 된 HTML 페이지를 서버로부터 받음.

 

* 서블릿은 무엇인가? : 서블릿과 CGI는 둘다 웹 서버가 혼자서 할 수 없는 것들을 도와주는 도우미 애플리케이션임.

HttpServlet을 상속받은 클래스 -> 접근제어자는 무조건 public(브라우저를 통해 외부에서 실행되어야 하기 때문) 

(*.java but extends HttpServlet)

Server+let(little) => 작은 서버 프로그램 

 

JSP란?

Java 파일에서 Response를 html코드로 작성해야 하는 Servlet의 단점을 보완하기 위해 만들어 졌다.

JSP도 컴파일시 Servlet으로 변환되며, 따라서 JSP는 Servlet의 업그레이드 버전이라고 할 수 있다.

Java코드 안에 HTML코드를 삽입하는 Servlet과 반대로, HTML 코드 안에 Java코드를 넣어서 동적 Webpage를 생성할 수 있는 프로그래밍 기술이다. 따라서 비즈니스로직 처리에 적합한 Servlet과 달리 JSP는 화면 로직 처리에 적합하다.

Servlet은 수정시 재컴파일(서버 리부팅)을 해야하지만, JSP는 동적으로 컴파일 하기 때문에 서버를 리부팅할 필요 없이 유연하게 작업할 수 있다.   

 

2. JSP 지시자(directive) 

컨테이너가 페이지(JSP)를 자바 코드로 변환할 때 특별한 지시를 내릴 수 있도록 고안된 것. 

page, include, taglib가 있다. 

댓글