서블릿(Servlet)
- 자바를 기반으로 웹 서버에서 실행되는 서버 측 프로그램
- 클라이언트의 요청을 처리하고 그에 대한 응답을 생성하는 역할
- javax.servlet 패키지에 정의된 인터페이스를 구현하여 작성
- 초기화(init), 요청 처리(service), 종료(destroy)의 생명주기를 가짐
WAS(Web Application Server)에서 관리 WAS(Web Application Server)
- 웹 클라이언트의 요청을 처리하고 데이터베이스나 서버 로직과 연동하여 동적인 웹 컨텐츠를 생성해주는 서버 소프트웨어
- HTTP 요청을 받아 서블릿, JSP, Spring 같은 웹 애플리케이션 컴퍼넌트를 실행하고, 그 결과를 HTML 형태로 클라이언트에게 응답
- 아파치 Tomcat
- Jetty
- JBoss
- WebLogic
- WebSphere
웹서버(Wev Server)
: 클라이언트의 요청을 받아, 정적인 리소스(HTML, CSS, 이미지, 자바스크립트 등)를 클라이언트에게 그대로 반환하는 역할
- 아파치 HTTP 서버
- NginX (설치)
- Microsoft IIS
< 윈도우용 stable 버전 다운로드 >
https://nginx.org/en/download.html
nginx: download
nginx.org
< 윈도우 실행 방법 >
- c:\nginx 폴더에서 nginx.exe를 실행하거나, 명령 프롬프트에서 start nginx
Microsoft Windows [Version 10.0.26100.4061]
(c) Microsoft Corporation. All rights reserved.
C:\Users\dmddn> cd c:\nginx
c:\nginx> start nginx
c:\nginx>
브라우저에서 localhost 만 주소창에 입력했을 때 "Welcome to nginx" 가 뜨면 됨!!

< Nginx 재시작 방법 >
nginx -s quit (정상 종료)
nginx -s stop (강제 종료)
nginx -s reload (껐다가 재시작)
+) 실행되고 있는 지 궁금할 땐? -> tasklist | findstr nginx
c:\nginx> tasklist | findstr nginx
nginx.exe 13328 Console 1 9,856 K
nginx.exe 17784 Console 1 9,744 K
< 아파치 Tomcat 설치하기 >
자바 소스코드를 html로 변환해주는 역할
https://tomcat.apache.org/download-10.cgi
Apache Tomcat® - Apache Tomcat 10 Software Downloads
Welcome to the Apache Tomcat® 10.x software download page. This page provides download links for obtaining the latest version of Tomcat 10.1.x software, as well as links to the archives of older releases. Unsure which version you need? Specification versi
tomcat.apache.org
startup.bat -> 이걸로 실행하면 됨. 명령프롬프트 열고 startup 입력

주소창에 : http://localhost:8080/ 입력하고 아래의 페이지가 나오면 잘 된 것

< Tomcat 종료 >
shutdown
< 인텔리제이와 연동하기 >
제너레이터 : "Maven 원형" 선택
위치 : Servlet 폴더 생성 후 선택
이름 : Jsp

< Tomcat 설정 >
파일 > 설정 > 플러그인 > 마켓플레이스 > Smart Tomcat 설치 > 인텔리제이 재시작
파일 > 설정 > 도구 > 시작 작업 > 새 구성 추가 (+) > Smart Tomcat

실행할 때 설정해둔 Tomcat을 불러서 동작할 수 있게끔 하는 것
실행 > 구성편집 >
index.jsp를 실행하면, 에러가 하나 나는데,,,, -> 이미 바깥쪽 콘솔에서 톰캣을 돌리고 있기 때문에.. 종료한 뒤에 다시 돌리세용


=> 이 조합으로 많이 사용함
< 서버 랜더링 vs REST 방식 >
JSP는 서버가 HTML을 만들어서 보내주는 방식
REST는 서버가 HTML이 아니라 "데이터만(JSON)" 보내주는 방식

< JSP 화면 응답 VS REST JSON 응답 예시 비교 >
* JSP 방식 : 사용자가 코드를 작성한 다음 컴파일 과정을 거치지 않고 서버에서 실행시킬 수 있음
- WAS에 의해 서블릿(자바 코드)으로 변환된 다음 실행
- 자바 코드를 사용 가능
- .jsp 확장자 사용
- 웹 서버와 통신 시에 자동으로 Servlet으로 변환됨
- MVC 패턴에서 View로 이용됨 (즉, 사용자에게 보여지는 화면을 만들어주는 역할)
+ ) Servlets : 서버에서 실행되는 자바 프로그램
- 서블릿이 사용자에 의해 요청되면 서버에선 http request에 응답하기 위해 was에서 서블릿 객체를 생성하고 이를통해 사용자의 요청을 처리
<!-- hello.jsp -->
<html>
<body>
<h1>안녕하세요, ${userName}님!</h1>
</body>
</html>
-------------- 실제 응답 --------------
<!-- 실제 응답 -->
<html>
<body>
<h1>안녕하세요, 솔비님!</h1>
</body>
</html>
- 서버(Spring, JSP 엔진)가 이걸 렌더링해서 브라우저에 완성된 html을 보냄
+) JSP는 어떻게 서블릿으로 변환되는가?
: JSP는 HTML처럼 보이지만, WAS가 이걸 서블릿 자바코드로 자동 변환 -> 컴파일 해서 실행함
+ ) JSP 태그
- Servlet은 Java 언어를 이용하여 문서를 작성하고, 출력객체(PrintWrite)를 이용하여 html 코드를 삽입,
- JSP는 서블릿과 반대로 html 코드에 java 언어를 삽입하여 동적 문서를 만듦
- 스크립 트릿 <% %> : 모든 자바 코드 기술 가능
- 지시자 <%@ %> : 페이지 속성을 지정
- 선언자 <%! %> : 변수나 메서드 선언
- 표현식 <%= %> : 결과 값을 출력
- 코드 주석 처리 : <% -- --%>
예 )
<%@ page contentType="text/html" %>
<html>
<body>
<h1>안녕하세요, 솔비님!</h1>
</body>
</html>
변환 후 : 자동 생성된 서블릿
public final class Hello_jsp extends HttpServlet {
protected void _jspService(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
JspWriter out = response.getWriter();
out.write("<html><body><h1>안녕하세요, 솔비님!</h1></body></html>");
}
}
=> 즉, JSP는 눈에 보이지 않지만 내부적으로는 서블릿 자바 코드로 바뀌어서 실행됨
+) Spring이 서블릿을 어떻게 감싸는가? (구조 흐름도)
Spring은 개발자가 직접 서블릿을 만들지 않아도 되도록 모든 요청을 서블릿에 자동으로 위임해주는 구조를 갖고 있음
[브라우저 요청: /user]
↓
[DispatcherServlet (스프링이 만든 서블릿)] : 핵심 서블릿(프론트 컨트롤러, 모든 요청이 여기로 들어옴)
↓
[Controller 클래스]
↓
[Service → Repository → DB]
↑
[결과 응답]
DispatcherServlet : 모든 요청이 여기로 들어오고 알맞은 @Controller로 연결해줌. 응답도 여기서 조립하고 반환함.
강의 예제 )
<%--
Created by IntelliJ IDEA.
User: dmddn
Date: 25. 6. 4.
Time: 오전 10:41
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Jsp 태그</title>
</head>
<body>
<%
// 모든 자바 코드가 들어갈 수 있음
int a = 10;
if( a >= 10 ) {
out.print("참!");
} else {
out.print("거짓!");
}
%>
<hr>
<% for (int i =0; i<5; i++){ %>
<input type="checkbox" name="hobby">
<% } %>
</body>
</html>
* REST API 방식 : 서버는 데이터만 주고 화면을 React가 그림
// 서버가 응답하는 JSON (예: /api/user)
{
"userName": "솔비"
}
-> 이걸 React가 받아서 화면을 만들어줌
// React 코드
function Hello({ userName }) {
return <h1>안녕하세요, {userName}님!</h1>;
}
[ 기본 구조 흐름 ]
[브라우저]
↓
[React 앱] ← fetch() 요청
↓
[REST API 서버] (Node.js, Spring 등)
↓
[DB or 로직 처리]
↑
{ JSON 데이터 반환 }
+) 실무에서 JSP보다 REST가 더 많이 쓰이는 이유 (요즘은 프론트는 React, 백엔드는 REST API가 기본 조합)
항목 JSP 방식 REST 방식 (React/Vue 조합)
| 🔁 재사용성 | 낮음 | 높음 (컴포넌트 단위) |
| 🧩 프론트/백엔드 분리 | 안 됨 | 완전 분리 가능 |
| 📱 다양한 플랫폼 대응 | 힘듦 (웹 전용) | 가능 (웹+앱+PC) |
| 🧠 개발자 협업 | 어렵고 꼬이기 쉬움 | 역할 분리 명확 |
| 🚀 퍼포먼스 최적화 | 제한적 | SSR/CSR 선택 가능 |
| 📈 채용 시장 수요 | 줄어드는 추세 | 폭발적으로 증가 중 |
| 🧱 유지보수 | 점점 어려워짐 | 구조적이고 확장성 좋음 |
'Programming Study > Java Spring' 카테고리의 다른 글
| Cookie, Session, Token(JWT) (2) | 2025.06.11 |
|---|---|
| Livekit란? webRTC, Servlet, EL (2) | 2025.06.11 |
| 메서드, return, 객체지향 프로그래밍, 객체, 생성자, 오버로딩 Null, 가비지컬렉터, 패키지, 상속, 메서드 오버라이딩, final (3) | 2025.06.02 |
| 조건문 (if, else-if, switch, yield), 반복문 (while, do-while, for), Random 클래스, Break문, Continue, 향상된 for 문, 중첩 반복문 (10) | 2025.06.02 |
| 인터페이스, 예외처리 (0) | 2025.06.02 |