[TIL] JSP & Servlet 01

시작하기전 기본적인 개념

본격적인 jsp와 servlet에 대한 공부를 시작하기 전

클라이언트와 서버 간의 웹 동작에 대해 알아보자

기존의 사용자 즉, 앤드유저와 서버간의 통신은 위와 같다.

여기에 DB까지 표기하여 도식화 하면 다음과 같다.

WEB 통신

클라이언트는 화면 앞단으로 주로 html, css, js를 사용하며 js를 편하게 사용하고 구조화 하기 위해 react.js, vue.js 등을 사용한다.
또 이곳을 전문적으로 담당해 사용자와의 사용성을 고려해 코드를 구조화하고 서버에서 응답해온 데이터를 Ajax로 JSON파일을 받아 효율적으로 처리해 화면에 보여주는 속도와 효율성을 고려하는 곳이 바로 프론트엔드이다.

서버는 클라이언트에서 요청한 데이터를 DB와 연동하여 처리해 응답해주는 화면의 뒷단이다. 트래픽이 몰려 서버가 터진다고 할 때 그 서버가 바로 여기이다.
그리고 이곳을 담당해 로직을 짜고 클라이언트의 요청을 빨리 처리하기 위해 속도를 높이기 위한 코드를 짜는 곳이 바로 벡앤드이다.

DB는 말 그대로 데이터들을 보관하는 곳이고 이곳에 많은 유저 데이터가 쌓이면 빅데이터가 된다.
이렇게 데이터가 많아지면 관리를 위해 전문적인 인력이 필요한데 이를 빅데이터분석가라고 한다.

WAS 통신

WAS를 이해하기 위해서는 정적페이지와 동적페이지의 차이를 이해해야 한다.

정적페이지는 클라이언트의 요청에 따라 DB의 데이터를 읽어서 페이지를 반환해주는 방식이다. 그래서 항상 동일한 페이지를 보여주게 된다. 즉, 컴퓨터에 저장되어 있는 파일을 그대로 요청에 따라 불러와 보여준다고 생각하면된다.
즉 WEB SERVER만을 이용해 html로 작성된 페이지만 내보내게 된다.
동적으로 사용자의 요구 상황에 따라 적절한 기능을 제공하지는 못한다.

동적페이지는 클라이언트가 요청하는 인자에 따라 데이터가 바뀌는 동적컨텐츠를 반환할 수 있는 방식이다. 웹서버 안에 실행되는 프로그램에 의해서 만들어지는 결과물을 반환한다고 생각하면 된다.

즉 WAS안에는 WEB SERVER와 WEB CONTAINER가 존재하는데
WEB SERVER가 먼저 클라이언트의 요청을 받고
미리 만들어진 html 페이지만을 반환하면 되는 케이스이면
WEB SERVER가 해당 파일을 DB에서 불러 클라이언트에게 제공하게 되고

WEB SERVER만으로 처리하기 힘든 동적으로 변해야하는 연산이 필요한 것은 html이 아니라 프로그래밍언어로 처리해야하므로 WEB CONTAINER에서 JSP, ASP, PHP등의 언어로 DB의 필요한 데이터를 처리해 연산을 거쳐 WEB SERVER에게 html 파일로 변환하여 제공하게 되고 해당 연산된 html 페이지를 클라이언트에게 반환하게 된다.

JSP과 Servlet의 차이점

위의 WAS 내에서 프로그래밍언어로 처리되는 곳인 WEB CONTAINER에서 구동되는 언어로 둘다 자바를 기반으로 작성된다.

다만

JSP는 html 바탕의 구조에서 내부에 java 코드를 작성하는 것이라 코드분리가 잘 되어있고

JSP 예시코드

<html>
<head>
</head>
<body>
<p>....</p>
<% 자바코드 작성 %>
</body>
</html>

Servlet는 java코드 내에 html 코드를 작성해야 해서 코드분리가 어렵다.

Servlet 예시코드

PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<p>...</p>");
out.print("</body></html>");

위에서 보듯이 jsp는 html 코드에 자바코드를 영역으로 분리해 작성이 가능하고

Servlet은 print 함수 내에 "" 안에 문자열형태로 작성하게 된다.

JSP과 Servlet 사용 변천사

  1. 초기 servlet으로만 코딩

  2. Jsp 등장
    => jsp만 사용 유행(협업 문제)

  3. Jsp + servlet을 같이 사용
    => jsp는 ui담당, servlet은 로직 담당

  4. Jsp + servlet + class 같이 사용
    => jsp는 ui, servlet은 로직, class는 데이터 : MVC

JSP과 Servlet MVC 패턴

  1. Model - 데이터
    => Class : java 코드

  2. View - UI
    => jsp : java 코드 제외

  3. Controller - 로직
    => Servlet : java 코드

위와 같이 분리하여 둘다 사용하는 쪽으로 트렌드가 형성되었다.

번외) get, post 요청방식

클라이언트에서 웹서버에 페이지를 요청하는 방식은 get과 post 방식이 있는데

get은 인자를 그대로 url에 입력하여 서버에 넘겨주게 되고

post는 url에 보이지 않고 html header를 타고 넘어가 데이터 보안에 get 방식보다는 강하게 된다.

요새는 post방식에 그치지 않고 http라는 통신규칙외 https라는 보안이 강화된 통신규칙을 사용하여 html파일을 암호화하여 전송하게 된다.

즉 html에서

form태그의 method를 get/post 둘중에 하나로 선택해 전송방법을 선택하고 전송할 인자, 파라미터는 각 input태그의 name속성에 입력해주어 해당 값을 인자로 넘겨준다.

form 태그 코드

<form method="get/post" action="인자를 받을 WAS 내 웹컨테이너 프로그래밍 코드 파일이름">
<input type="text" name="인자값">
</form>

WAS의 웹컨테이너는 해당 인자를 전송방식에 따라
doGet 또는 doPost 함수로 프로그래밍 연산하여 데이터를 처리한 결과를 인자를 통해 클라이언트의 웹페이지로 전송해 값을 동적으로 바꿔주게 된다.

Servlet에서 인자를 받는 코드

// 단일파라미터일 경우
dataType 변수명 = request.getParameter("인자값");

//같은 이름의 파라미터가 여러개일 경우 배열로 받음
dataType [] 변수명 = request.getParameterValues("인자값");

좋은 웹페이지 즐겨찾기