How Servlet & JSP work with a Web Browser?

MisCaminos·2021년 2월 13일
0

Server & Web

목록 보기
3/23

Servlet은 Java로 작성된 하나의 executable로서 HTML page로부터 온 invocation에 응답하기위해 execute된다. JSP(JavaServer Page or Jakarta Server Page)는 HTML를 기반으로 작성되는 page이고 user에게 server에서 처리한 결과를 보여주거나 처리에 필요한 값을 입력받는 역할을 한다.

예를 들어 HTML으로 작성된 JSP에서 user가 작성한 form의 button을 눌러서 input을 보내면, servlet은 form의 data를 collect해서 application과 연동된 database로 전송하여 form에 입력되었던 data를 저장한다. 또는, JSP에서 user가 data를 요청하면 servlet을 invoke해서 data를 database로부터 받아온다. Servlet이 database에서부터 data를 가져오고 JSP를 통해 user의 web browser에 data가 display되도록 하는것이다.

Java와 동일하게 Servlet도 "Write Once, Run Anywhere"이 가능하다. 예전의 CGI(Common Gateway Interface)와는 다르게 servlet은 별도의 modification없이 어느 platform에서든 실행이 가능하다. 또한 Servlet은 실행할때마다 새로운 process를 생성하지않는다. Servlet은 Web server process안에서 separate threads로 인해 다루어지기 때문이다. Web server 자신의 process에서 servlet이 실행되기때문에 server log files를 작성할 수 있고, 다른 여러가지 server의 capabilities를 활용할 수 있는 advantage가 있다.

Servlet은 Java의 Servlet API로 지원된다. Servlet을 작성하기위해서는 javax.servlet.Servlet interface가 구현되어야한다. 요즘 작성되는 거의 모든 servlet은 HTTP protocol을 사용하도록 디자인되기때문에 javax.servlet.http package의 HttpServlet class를 상속받아서 HTTP servlets에 필요한 기능을 확보한다. 그리고 요청과 응답의 처리에 필요한 request와 response 객체를 활용하기위해서 javax.servlet.http package에 있는 HttpServletRequest, HttpServletResponse class를 import한다.

Servlet을 invoke하기위해서는 HTML page에 button의 link 또는 embedded link로 연결하거나 web browser의 address bar에 servlet의 pathname을 입력하면된다.

Servlet이 invoke되면, user의 browser session을 hosting하고있는 web server가 servlet을 찾아낸다. 어떤 web server 또는 application을 사용하는지에 따라 servlet을 look up 하는 directory가 달라질것이다. 어떤 pathname의 directory이든, /servlet alias를 통해 HTML page가 invoke한 servlet을 찾을 수 있다.

아래는 servlet을 사용하는 작업을 순서대로 나열한것이다:

(1) requests some information by filling out a form containing a link to a servlet and clicking the Submit button (2). The server (3) locates the requested servlet (4). The servlet then gathers the information needed to satisfy the user's request and constructs a Web page (5) containing the information. That Web page is then displayed on the user's browser (6).

Server와 servlet사이 HTTP protocol은 어떻게 사용되는 것일까? 실제 internet에서 HTTP와 HTML이 어떻게 사용되는지를 알아보았다.

HTTP(Hypertext Transfer Protocol): fixed way computers and servers communicate with each other
HTML(Hypertext Markup Language): code that tells the web browser how the page should appear

HTTP는 user의 web browser가 원하는 것을 얻기위해 server와 communicate하는 언어(like a set of rules)이다. 가장 흔하게 쓰이는 말은 GET이다. 만약 web browser와 server사이의 대화를 엿들어 본다면, "GET document-name ..." 과 같이 document를 요청하는 경우가 많을것이다.

예를 들어서 user의 web browser가 Tumblr.com에서 login을 하고싶다면, browser가 "GET/login"을 포함한 protocol을 Tumblr server에 전송하고, 그에 대한 응답으로 Tumblr server가 user가 로그인할 수 있는 login form 형태의 HTML page를 구성할 코드를 user의 browser로 전송할 것이다.

HTML code는 text, image, video와 같은 content와 이 content의 전체적인 layout 등, page가 어떻게 display되어야하는지를 web browser에게 알려준다. 단, image나 video와 같은 media file은 각자의 unique URL을 갖고 있는 separate file로서 전송된다. User의 browser가 "GET/images/..."와 같은 HTTP request를 server에 전송하면 server가 해당하는 image를 display할 수 있는 binary code로 답해준다.

반대로 user가 browser에서 form에 입력한 data를 server에게 전송하려면 HTTP POST request를 server에게 전송한다.

예를 들어서 user가 web browser에 login information을 입력하여 server로 HTTP post request를 전송했다면, server는 login information database에서 user가 입력한 information을 비교하고 login 결과를 display할 HTML code를 user의 web browser로 전송한다.

이때, server가 해당 user와 user가 요청했던 이력들을 기억하기위해 cookie ID를 함께 전송한다. 이번 session이 끝나고 다음에 다시 login 하기위해 web browser가 post request를 전송할때에 cookie를 기억해두었다가 server에 cookie ID를 함께 전송한다. 이 cookie ID는 연결지양적인 HTTP connection에서도 website가 user를 기억할 수 있도록 identifier 수단으로 사용되는것이다.

HTTP & DNS로 html, media files의 소통이 가능해진다. 이 모든 소통은 모두 plain text로 이루어지며, completely open한 환경에서 모두와 공유된다. (그래서 Secure Sockets Layer & Transport Layer Security가 만들어진것이다. SSL과 TLS가 server와의 소통을 보호막으로 감싸서 외부의 침입으로부터 보호해주고, 이런 layer security가 active하다는것은 HTTPS (HTTP SECURE)로서 확인할 수 있다)

이런 server & user 사이의 소통에 대해 좀 더 자세히 얘기해보자면...

Server가 user의 web browser의 요청에 즉각적으로 응답하기때문에 직접적인 연결을 통해 information이 이동할것같은 느낌이지만, 실제로는 (당연히!) 그렇지 않다.

computer사이의 information은 packets(packets of binary code)로 이동한다. 각각의 packet에는 "from" & "to" 로 표기된 IP주소가 명시되어서 이 주소에 따라 움직인다. 정해진 route가 있는게 아니다. Internet connection reliability를 제공하기위해 여러 possible route가 활용된다. packets가 먼길을 이동하는 사이사이에는 router가 traffic manager 같이 이동을 지휘한다.

그리고 TCP(Transmission Control Protocol)이 여러 packets(pieces of data)로 쪼개져서 전송된 조각들이 완벽하게 하나의 파일로 구성되는지를 confirm하고 만약 도착하지 못한 packet이 있거나, 문제가 발생하는 packet이 있다면 다시 missing packet을 전송 받아서 파일을 완성시킨다. TCP로 인해 sending/receiving이 제대로 이루어지는 것을 rely할 수 있다.


References:
1. Story of a Servlet by Mark Andrews from Oracle.com
2. Understanding Servlets by Steven Haines from developers.com
3. HTTP and HTML/Internet 101/Computer Science/Khan Academy

profile
Learning to code and analyze data

0개의 댓글