웹 애플리케이션을 작성하려면 브라우저와 서버의 관계를 이해할 줄 알아야 한다.
서블릿과 JSP가 어떻게 브라우저에 데이터를 전달하고, 브라우저는 이를 어떤식으로 사용하는지 알아보자!
Request(요청) / Response(응답)
브라우저에서 서버에 위와 같은 방식으로 데이터를 요구하는 것을 요청(Request), 서버는 이에 대한 응답(Response)으로 데이터를 만들어 브라우저에 보낸다.
위와 같은 구조를 이루는데, 서버는 브라우저로 응답(Response)을 보내면서 정적, 동적 데이터에 따라 다르게 처리한다.
정적(static) 데이터 : 항상 동일한 고정된 데이터를 전송하는 방식으로 주로 파일로 고정된 HTML, CSS, 이미지 등의 데이터
동적(dynamic) 데이터 : 필요할 때마다 다른 데이터를 동적으로 전송하는 방식으로, 메일처럼 상황에 따라 동적으로 서버에서 데이터를 만들어 보내는 방식.
항상 정적 데이터를 보내는 역할을 수행하는 서버를 '웹 서버(Web Server)', 동적 데이터를 만들어 보내는 경우를 '웹 애플리케이션 서버(Web Application Server - WAS)' 라고 구분한다.
톰캣의 경우는 엄격하게 보면 WAS로 볼 수 있지만, 대부분의 WAS는 웹 서버 기능도 포함해 정적, 동적 자원 모두 처리할 수 있다.
HTTP
브라우저의 요청과 서버의 응답 사이에는 중요한 약속을 통해 처리되는데, 이런 데이터 교환 약속을 '프로토콜(protocol)'이라 하고, 웹에서는 HTTP(Hyper Text Transfer Protocol)이라는 방식으로 데이터를 주고 받는다.
https://www.velog.com/
http = 프로토콜
www.velog.com = 호스트(도메인)
브라우저에서 URL을 호출하면 요청과 응답이 하나의 쌍으로 묶여 처리된다.
웹의 특성상 다수의 이용자가 브라우저를 통해 서버를 호출하는 구조이기 때문에 서버에서 최대한 많은 이용자에게 서비스를 제공하기 위해 '비연결성'이라는 방식을 택한다.
비연결성이란, 요청과 응답을 처리한 후에 연결을 종료한다는 것이다.
'새로 고침'을 해본 경험들이 다들 한번씩은 있을텐데, 이를 하는 이유는 이미 브라우저와 서버의 연결이 끝나 과거의 결과만이 존재하기 때문에 그러하다.
서버는 빨리 하나의 요청을 처리하고 연결을 종료해서 다음 요청을 다시 받는 식의 태도를 취해, 적은 리소스를 이용해 최대한 많은 수의 요청을 처리하고자 하는 것이다.
자바 서버 사이드 프로그래밍
서버 사이드 프로그래밍이란, 서버 쪽에서 프로그래밍을 통해 데이터를 처리할 수 있도록 구성하는 것이다. 간단한 개발을 해도 많은 고민거리가 생기는데, 이를 매번 반복한다면 굉장한 낭비일 것이다.
따라서 자바는 자주하는 고민에 대한 처리를 JavaEE라는 기술 스펙으로 정리했고, Servlet과 JSP는 JavaEE의 여러 기술 중에 하나인 것이다.
JavaEE 기술 스택은 매우 방대하지만, 가장 기본적인 기술은 서블릿과 JSP이다.
서블릿 기술이란, 서버에서 동적으로 요청과 응답을 처리할 수 있는 API들을 정의한 것이다.
JSP는 서블릿과 비슷한 원리지만, 좀 더 HTML을 쉽게 이용할 수 있는 방식으로 코들 작성하게 한다.
일반적으로 '서블릿'으로 코드를 이용한 처리, 'JSP'로는 화면 개발을 하는 식으로 역할 분담해 개발한다.
서블릿 클래스를 보면 init(), doGET(), destroy()등이 보이는데, 이는 서블릿 API에서 지정된 메소드이다. 이들의 호출 주체는 개발자가 아닌, 서블릿 컨테이너가 서블릿들을 관리하면서 호출한 것이다. 이러한 메소들을 '서블릿의 라이프 사이클'이라고 한다.
JSP 기술
JSP는 서블릿 기술과 비슷하며 서버에서 동적으로 데이터를 구성하는 기술이다.
둘은 '동일한 목적'을 가지고 있지만 두 개의 공존하는 이유는, 두 기술의 '목적' 자체는 다르기 때문이다.
서블릿 코드는 자바 코드를 이용해 HTML 문자열을 만들어내는 방식을 취하지만, JSP 기술은 HTML 코드를 그대로 이용하다가 필요할 때 약간의 자바 코드를 넣는 방식을 취한다.
JSP 코드가 자바 코드가 아님에도 서블릿과 동일하게 처리되는 이유는 JSP파일이 컴파일 되고 실행될 때는 서블릿 코드로 변환되어 실행되기 때문이다.
서블릿과 JSP