본격적인 방대한 BE 판타지 세계를 다루기 이전에 앞서 이전 포스팅에서 세계관(웹 구조)에 대해 인트로를 시작했습니다. 그렇다면 이번에는 험험 시간 순서대로, 그러니까... 지금부터 옛날옛날에 웹을 구현하는 고대 개발자의 이야기를 해보고자 합니다.
그들에게 있는 도구는 Servlet과 JSP 였죠... 그런 그것들이 뭐냐?
시작합니다.
클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술.
저 문자에서 눈여겨 봐야할 단어는 2가지 입니다. 바로 "자바", "웹" 입니다. 그러니까 자바를 이용해 웹을 만들기 위한 기술인거죠. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종입니다.
예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다.그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 바로 서블릿(Servlet)입니다. 그래서 서블릿은 자바로 구현 된 CGI라고 흔히 말합니다.
🙋 CGI 가 뭡니까?
🤖 웹서버와 프로그램 간의 교환 방식입니다.
🙋 자바 고유의 방식인가여?
🤖 놉 모든 언어로 구현이 가능하고 HTML의 GET,POST 방법으로 요청하면 결과를 전송하는 겁니다.
1. UDP보다 처리 속도가 느리다.
이것은 보통 TCP,UDP의 차이를 알아야 "ㅇㅇ 그렇군~" 하고 넘어갈 수 있습니다. TCP/UDP 내용을 다루려면 워낙 방대하기 때문에 여기서는 이정도만 알고 넘어가죠. 👇
기본적으로 TCP가 UDP 보다 하는게 많아 느림, 근데 Http통신은 TCP 통신의 종류중 하나임.
2. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
이것도 위에 말씀드린 것과 같이 Http를 사용해야 웹 클라이언트와 소통을 할 수 있기 때문에 사용하려면 HttpServlet을 상속받는 다는 것을 알 수 있습니다.
3. Java Thread를 이용하여 동작한다.
자바를 사용하니까 당연하죠...
4. html을 사용하여 요청에 응답한다.
서블릿은 완벽히 자바가 아닙니다. 처리를 하려면 당연히 클라이언트에서 요청이 들어와야겠죠? 그러면 그 클라이언트는 웹을 사용하겠죠? 그 웹을 만드는 언어는 HTML이겠쥬? 이상입니다.
5. MVC 패턴에서 Controller로 이용된다.
아마 다음 이야기에 나올거 같으니 "ㄹㅇㅋㅋ" 정도로만 알고 넘어가고 궁금하면 다음 포스터로!
6. 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
일반적으로 웹서버는 정적인 페이지만 제공하빈다. 그래서 동적 페이지는 웹서버 혼자서 만들지 못하니 "서블릿" 어플리케이션에 도움을 받아 생성하게 되며 동적인 페이지를 생성하는 어플리케이션이 CGI 입니다.
🙋 아니 저 컨테이너는 뭡니까? 서블릿이 컨트롤러 처럼 해준다면서요?
🤖 서블릿은 스스로 작동할 수 없음.
🤬 아니 왜요? 자바 객체면 스스로 움직일 수 있는거 아닙니까?
🤖 ㄴㄴ 서블릿은 main 메소드가 없음.
🙋 ..? 그럼 어케 움직여요?
🤖 그래서 컨테이너가 서블릿을 관리해줌.
서블릿 컨테이너가 갑자기 나와서 당황스럽겠지만, 간단히 생각하자면 서블릿 컨테이너로는 톰캣이 있습니다. 톰캣이 실제로 웹 서버와 통신하면 JSP와 Servlet이 작동하는 환경을 제공해줍니다.
클라이언트가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다.
요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.
해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.
doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.
JSP는 정말로 한마디로 정리가 가능합니다.
HTML IN JAVA
이전에 Servlet이 JAVA in HTML 이라면 JSP는 반대인거죠. HTML 내에 자바 코드를 삽입해 웹서버에서 동적으로 웹 페이지를 생성해서 웹 브라우저에 돌려주는 역할을 합니다.
JSP는 사실 자바의 객체가 아니기 때문에 백엔드 구조로 즉 서버에 전달이 되기 위해서는 자바 객체로 치환이 되어야 합니다. 그래서 사용자가의 JSP로 데이터를 발생 했다면, JSP는 Servlet 컨테이너로 전달 되며 컨테이너에서 Servlet을 생성해 해당 요청을 처리하게 됩니다.