자바와 웹
서블릿과 JSP
자바 기반의 서버 측 웹 기술로 서블릿과 JSP가 있다.
둘다 클라이언트의 요청을 받아 동적인 웹 페이지를 생성하고, 톰캣(Tomcat) 같은 서블릿 컨테이너에서 동작하며 최종적으로는 서블릿 클래스로 변환되어 실행된다.
즉 JSP도 결국 내부적으로 서블릿으로 변환되어 실행되기 때문에 기술적으로 동일한 기능을 수행하는 것이다.
- 서블릿 (Servlet)
- Java 코드 내에 HTML을 삽입하는 구조.
- 로직 처리에 강점이 있어 복잡한 비즈니스 로직에 적합하다.
- HTML 화면을 변경할 때 자바 코드를 수정하고 컴파일해야 하므로 디자인 수정이 매우 불편하다.
- 컨트롤러 페이지 만들 때 사용.
- JSP (Java Server Page)
- HTML 내부에 Java 코드를 삽입하여 화면 구현에 특화되어 있다.
- 디자인(HTML)과 로직(Java)의 분리가 서블릿보다 용이하며, 개발이 편리하고 코드 길이가 짧다.
- 뷰 페이지 만들 때 사용.
웹 관련 용어
- 웹 문서: 웹에서 클라이언트가 서버에 정보를 요청하면 응답하는 콘텐츠.
- 웹 애플리케이션: 웹에서 수행되는 애플리케이션.
- 웹 서비스: 네트워크 상에 분산 된 자원들을 이기종 간에 서로 연동하여 자원을 공유하기 위한 추상적인 서비스 형태
- SOAP 기반 웹 서비스: 다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜
- RESTful 기반 웹 서비스
- REST: 웹 서비스와 모바일 애플리케이션의 경량화의 필요에 맞춘 아키텍처 설계 세트
- 리소스 접근을 위해 단순 URI로 표현하며 HTTP의 요청방식(GET, POST, PUT, DELETE…) 만으로 접근 가능.
- 경량화 되어 있어 선호되는 메시지 형식이며, RESTful API는 유연하고 설정이 쉬움.
웹 애플리케이션
웹 서버란?
웹에서 서버 기능을 하는 프로그램.
HTTP 프로토콜을 기반으로 웹 클라이언트로부터의 요청을 서비스하는 기능을 담당한다.
기능 1. 정적인 컨텐츠 제공.
- WAS를 거치지 않고, 바로 요청한 컨텐츠를 제공할 수 있다.
기능 2. 동적인 컨텐츠 제공을 위한 요청 전달.
- 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.
웹 애플리케이션 서버(WAS)란?
다양한 서버 내 알고리즘, 비즈니스 로직, DB 조회 등 클라이언트 요청에 따라 동적인 컨텐츠를 제공하는 서버로, 웹 서버의 기능을 분리해서 처리하려는 목적으로 사용한다.
웹 서버: 클라이언트로부터 요청받은 일과 화면에 표현하는 로직까지만 담당
컨테이너: 다양한 기능을 수행하는 비즈니스 로직 담당
⇒ 이렇게 WAS에서 일을 나누어 역할을 분담한다.
컨테이너: 웹 서버가 보낸 JSP, PHP, ASP.net 등의 파일들을 실행하고 수행결과를 다시 웹 서버로 보내주는 역할을 한다.
대부분 상용화된 WAS는 웹 서버, 컨테이너 기능 외에 엔터프라이즈 환경에서 필요한 트랜잭션, 보안, 트래픽 관리, DB 커넥션 풀, 사용자 관리 등의 다양한 기능을 제공한다.
HTTP 프로토콜
HTTP: TCP/IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜.

OSI 7계층: OSI 통신 규격을 만들 때 고안된 것. 현재 사용되고 있지 않지만, 이 구조 개념은 다양한 분야에서 공통적으로 참조할 수 있는 참조모델이다.
TCP/IP 4계층: 다양한 네트워크가 상호간에 협력하면서 인터넷이 발전됐고, TCP/IP가 인터넷의 사실상 표준이 되었다.
HTTP 특징
- 무연결 (Connectionless)
- HTTP는 클라이언트와 서버 간의 요청이 있을 때마다 독립적으로 연결하여 통신하는 방식. (서버가 요청에 응답하면 연결 끊음)
- 무상태 (Stateless)
- 무연결 특성 때문에 이전 연결에서 했던 작업내용을 다음 요청에서 그대로 사용할 수 없어서 상태정보가 유지되지 않음.
- 요청과 응답 (Request, Response)
- 웹 클라이언트가 서버에 TCP 접속을 처리한 후 요청 메시지를 보내면, 웹 서버는 요청 메시지를 근거로 서비스를 처리한 다음, 그 결과인 응답 메시지를 클라이언트에 보냄으로써 통신함.
HTTP 요청 방식
❗GET과 POST는 확실히 알아두기❗
- GET
- 웹 브라우저의 주소 줄에 URL을 입력하거나 하이퍼링크가 포함된 개체를 클릭할 때, 직접 GET 방식을 지정하여 서비스 요청할 때 사용됨.
- 클라이언트가 서버로 전송하는 문자열이 있을 경우 요청 줄에 포함되는 URI 뒤에 ? 기호와 함께 추가되어 전달됨.
- 전송되는 모든 문자열 정보들이 웹 브라우저에 노출됨.
- 헤더에 포함되므로 전달되는 문자열 크기에 제한이 있음.
- 서버에 빠른 속도로 요청할 때 사용됨.
- POST
- 데이터가 HTTP 요청정보의 몸체에 포함되어 전달됨.
- 데이터 크기에 제한이 없고, 화면에 노출되지 않음.
- 웹 클라이언트 측에서 보내는 데이터를 인코딩하고, 서버 측에서 디코딩해야 하므로 GET 방식보다 상대적으로 처리속도가 느림.
- 데이터가 HTTP 요청정보의 몸체에 포함되어 전달됨.
- PUT
- 파일 업로드할 때 이용함.
- POST와 PUT 모두 같은 작업 수행이 가능.
- 서버의 리소스를 새로 생성할 때는 POST 방식, 서버의 리소스를 수정할 때는 PUT 방식으로 구분하여 요청.
- DELETE
- 서버의 리소스를 삭제하는 작업을 요청할 때 사용.
그 외에도 OPTIONS, HEAD, TRACE, CONNECT 등이 있으나 중요한 건 저 4개이다.
URI, URN, URL 차이
- URI
- 웹 클라이언트가 웹 서버에 요청한 서비스 문서의 정보.
- 인터넷에 있는 자원을 나타내는 유일한 주소.
- URN
- 영속적이고 위치에 독립적인 자원을 지시자로 사용.
- URL
- 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약.

HTTP 응답 정보
HTTP 응답 정보의 상태 줄은 HTTP 버전, 상태 코드, 상태 코드 설명으로 구성된다.
상태 코드: 클라이언트 요청에 대한 처리 결과.
가장 앞자리 숫자를 기준으로 결과 분류가 가능하다.
1xx - 조건부 응답
2xx - 성공
3xx - 리다이렉션 완료
4xx - 요청 오류
5xx - 서버 오류
JSP 실습
1. 실습을 위해 우선 톰캣을 설치한다.
톰캣(Tomcat): 아파치 소프트웨어 재단에서 개발한 오픈소스 WAS. JSP와 서블릿을 실행하는 컨테이너와 웹서버를 제공한다.
2. 이클립스에서 Dynamic Web Project를 만들고 Content root를 webEx라는 이름으로 정한다.
3. main.jsp 파일을 만든다.
그러면 이렇게 기본으로 코드가 만들어진다.
<!-- 기본으로 만들어지는 jsp 파일 형식 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- p태그만 추가함 -->
<p>Hello JSP!</p>
</body>
</html>
4. 하단 Servers 창에서 New → Server를 클릭해 톰캣 서버를 등록한다.
5. Add and Remove를 클릭해 webEx 리소스를 서버가 인식하고 실행 환경을 구성하게 Add한다.
6. 실행 버튼을 눌러 서버를 구동시킨다.

그러면 이렇게 웹 브라우저에 내가 만든 jsp 파일이 잘 나오는 것을 확인할 수 있다.
❕느낀점
본격적으로 스프링에 들어가기 전에 서블릿과 JSP에 대해 배우게 되었다.
찾아보니 서블릿과 JSP는 예전에 만들어진 기술로 요즘에는 잘 쓰지 않는다고 한다.
과거에 만든 프로젝트를 유지보수하거나 레거시 시스템에서만 쓰이고, 신규 프로젝트에는 쓰이지 않는다고 한다.
왜냐하면 스프링 부트와 타임리프의 조합으로 JSP보다 더 간결하고 강력한 템플릿을 사용할 수 있기 때문이다.
타임리프가 아니면 리액트, 뷰, 앙귤러 등의 프론트엔드 프레임워크를 사용하여 자바 서버는 HTML을 렌더링 하지 않고 그냥 API만 보내는 방식이 일반적이다.
하지만 앞으로 배울 스프링 프레임워크가 서블릿 기반으로 동작하기 때문에, 내부 구조를 이해하기 위해 기초로 배우는 것 같다.
기초부터 차근차근 다져서 스프링도 잘 이해하고 백엔드 프로젝트도 잘 진행할 수 있도록 공부해야겠다.
'Java' 카테고리의 다른 글
| [TIL-260310] Servlet & JSP 입문: 서블릿의 응답 처리, DB 연동 (0) | 2026.03.10 |
|---|---|
| [TIL-260309] Servlet & JSP 입문: JSP 실습, Servlet 기초 (0) | 2026.03.10 |
| [TIL-260212] 자바 기초: 내부 클래스, 스레드, 람다, 스트림 (0) | 2026.02.17 |
| [TIL-260211] 자바 기초: 예외처리와 제네릭, 컬렉션 프레임워크 (0) | 2026.02.17 |
| [TIL-260210] 자바 기초: 인터페이스 (0) | 2026.02.17 |