자바 서버 사이드 프로그래밍

Ga0·2023년 6월 22일
0

java

목록 보기
5/6

자바 서버 사이드 프로그래밍

  • 서버 쪽에서 프로그래밍을 통해 데이터를 처리할 수 있도록 구성하는 것을 의미한다.
  • 고려해야 할 점
    • 동시에 여러 요청(Request)이 들어온다면 어떻게 처리해야 하나?
    • 서버에서 문제가 생기면 이를 어떻게 처리해야 하나?
    • 어떤 방법으로 데이터 전송을 최적화할 수 있는가?
    • 분산 환경이나 분산 처리와 같은 문제들은 어떻게 해야 하나?
  • 자바의 경우 이러한 처리를 JavaEE라는 기술 스펙으로 정리해 두었고, Servlet과 JSP 또한 JavaEE기술 중에 하나이다.
    출처:https://www.packtpub.com/product/building-restful-web-services-with-java-ee-8/9781789532883

서블릿(Servlet)

  • 서버에서 동적으로 요청과 응답을 처리할 수 있는 API를 정의한 것이다.

  • 서블릿을 지원하는 환경에서의 개발자들은 서블릿에서 제공하는 API를 이용해서 코드를 작성하고 이를 설정하는 방식으로 서블릿 프로그램을 작성하게 된다.
    -> 이러한 이유로 톰캣 설치시에는 어떤 서블릿 버전을 지원하는지 확인해야 한다.
    출처: 자바 웹 개발 워크북

  • 서블릿으로는 코드를 이용한 처리이고, JSP로는 화면 개발과 같이 역할을 분담해서 개발하는 것이 일반적이다.

  • 서블릿의 실행은 톰캣과 같이 서블릿을 실행할 수 있는 환경에서 실행이 가능한데 이를 '서블릿 컨테이너(Servlet Container)'라고 하며, 과거에는 '서블릿 엔진(Servlet Engine)'이라는 용어를 사용 했다.

  • 서블릿 코드를 실행하는 주체는 톰캣과 같은 서블릿 컨테이너이므로, 일반 자바 프로그램과 비교했을 때 아래와 같은 점이 달라진다.

    • 객체를 생성하거나 호출하는 주체는 사용자가 아닌 서블릿 컨테이너가 하게 된다.
    • 서블릿 클래스에서 생성하는 객체의 관리 자체가 서블릿 컨테이너에 의해 관리된다.
    • 서블릿/JSP의 코드 개발은 기본적인 자바 API와 더불어 서블릿 API도 같이 써야한다.
// java API와 서블릿 API을 둘 다 사용하는 것을 볼 수 있다.
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotaion.*;

JSP(Java Server Pages)

  • 서블릿 기술과 동일하게 서버에서 동적으로 데이터를 구성하는 기술이다.

  • 서블릿이 있는데도 '동일한 목적'으로 JSP가 제공되는 이유는 두 기술의 목적 자체가 좀 다르기 때문이다.

  • JSP 기술은 서블릿과 달리 HTML 코드를 그대로 이용하고 필요할 때 약간의 자바 코드를 넣는 반면 서블릿 코드는 자바 코드를 이용하여 HTML 문자열을 만들어내는 방식의 차이가 있다.

  • JSP 코드는 자바 코드가 아님에도 서블릿과 동일하게 처리가 되는데, 이 이유는 JSP 파일도 서블릿 코드로 변환하여 컴파일되고 실행되기 때문이다.

    JSP 파일 --> .java 파일로 생성 -- 컴파일 --> .class 파일로 만들어짐

  • JSP는 서블릿과 같은 목적을 가지지만, 브라우저에 보내는 HTML 데이터를 만드는 데 더 특화된 기술이며, 이 둘은 아래와 같이 설명할 수 있다.

    • 서블릿/JSP 모두 JavaEE스펙의 일부이다.
    • 서블릿/JSP를 실행하기 위해서는 서블릿 컨테이너가 필요하다.
    • 서블릿 컨테이너가 서블릿/JSP 객체를 생성하고 생명 주기를 관리한다.
    • JSP는 내부적으로 서블릿과 같은 방식의 코드로 변환된다.
    • JSP는 HTML내에 자바 코드를 추가하는 방식이고, 서블릿 방식은 자바 코드안에 HTML 코드를 추가하는 방식이다.

GET 방식

  • 쿼리 스트링(Query String): 웹에서 주소창 뒤에 '?'로 시작하는 내용물을 의미한다. 무언가를 요구하거나 물어보는 용도로 데이터를 전달하기 위해 사용한다.
  • 파라미터(Parameter): '키=값'의 형태로 데이터를 전달하는데 여러 개의 데이터가 필요한 경우 '&'를 이용해서 연결한다.

POST 방식

  • form 태그를 통해 action, method 속성으로 '양식'을 어디에 어떤 방식으로 전송할지 결정할 수 있다.
<form action="example.jsp" method="post">
	<input type="number" name="num1">
    <input type="number" name="num2">
   	<button type="submit">SEND</button>
</form>
  • 위의 예시를 보면, form 태그의 action은 'example,jsp'로 전송하고, 전송 방식(method)는 'post'인 것을 볼 수 있다.
  • 또, 위의 예시는 사용자가 num1, num2를 입력하고 SEND를 호출하면 개발자가 도구에서 사용자가 입력한 데이터를 볼 수 있다.
  • 이러한 POST 방식은 '등록/수정/삭제'와 같은 작업을 수행하기 위해서 사용한다.

웹의 파라미터는 모두 문자열

  • JSP가 브라우저에 전달하고 싶은 데이터를 구성하는데 편리하긴 하지만 복잡한 코드를 넣는데는 적합하지 않다.
  • 모든 데이터는 문자열로 처리되기 때문에 정수형 값으로 바꾸려면 '&{}'안에 Integer.pareseInt()를 적용해서 int형변환을 해줘야한다.

웹 MVC 방식이 나온 배경

  • JSP는 기본적으로 GET/POST 방식의 호출을 구분하지 않기 때문에 POST방식으로 접근해야하는 example.jsp를 GET 방식으로도 얼마든지 호출할 수 있다는 문제가 있다.
  • 이러한 경우에, 만약 JSP 파일 안에 Integer.pareseInt()를 넣었다면, 내부 서버 오류가 발생한다.
  • 유지 보수 측면에서도 문제가 발생하는데, example.jsp대신에 example2.jsp를 따로 만들어서 변경했을 경우 과거의 example.jsp만 알고 있는 사용자에게 example2.jsp로 변경되었다고 알려줘야하는 작업이 필요하다.
  • 이러한 문제점으로 최근 JSP는 아래와 같은 제한적인 용도로 사용된다.
    • JSP에서 쿼리 스트링이나 파라미터를 처리하지 않는다.
    • JSP는 입력 화면을 구성하거나 처리 결과를 보여주는 용도로만 사용한다.
    • 브라우저는 직접 JSP경로를 호출하지 않고 서블릿 경로를 통해서 JSP를 보는 방식으로 사용한다.
  • 이러한 문제점을 해결하기 위해 등장한 방식이 웹 MVC이고, 이 방식은 JSP는 결과만 출력하고 처리는 서블릿을 이용하는 방식으로 변화했다.


출처: 자바 웹 개발 워크북

0개의 댓글