memo6759 님의 블로그
2025-11-13(백엔드 - Servlet) 본문



Servlet 정리 - 클라이언트 요청을 처리하는 자바 기술
자바 실행 형태별 구분
구분 설명 실행 방법
Application 일반 자바 프로그램 public static void main(String[] args) 메소드를 java 클래스명으로 실행
Applet HTML에 포함되어 실행되는 <applet> 태그에 삽입
Servlet 서버에서 클라이언트 요청을 웹서버(Tomcat)가 호출
처리하는 자바 기술
Servlet이란
- 서버에서 클라이언트의 요청을 받아서 처리하고 응답을 돌려주는 자바 객체
- 예 : 로그인 , 회원가입, 게시판 글 목록 예약, 장바구니 등 서버에서 처리해아 할 로직들
- 실행 위치 : 서버 내부
- 따라서 HTML 문서 안에 직접 자바 코드를 쓸 수 없고, 서버가 인식할 수 있는 서블릿 클래스 형태로 작성해야 함
- 서버(Tomcat)가 자동으로 서블릿 객체를 생성하고, 생명주기 메소드를 호출함
Servlet 작성 규칙
서블릿은 반드시 톰캣이 인식할 수 있는 표준 구조 안에 있어야 한다,
<context> ← 프로젝트 이름 (예: backendtest)
│
├── html, jsp, css, js, image 등
│
└── WEB-INF/
├── web.xml ← 설정 파일 (서블릿 등록, 매핑 정보 등)
├── lib/ ← 외부 라이브러리 (mysql-connector.jar 등)
└── classes/ ← 서블릿, DAO, DTO, Service 클래스
클래스 접근 지정자
반드시 public class로 작성해야 함 (서버가 외부에서 호출하기 때문)
Servlet (interface)
↑
GenericServlet (추상 클래스)
↑
HttpServlet (추상 클래스)
↑
MyServlet (사용자 정의 클래스)
- 우리가 작성하는 서블릿은 항상 HttpServlet을 상속받음.
- HttpServlet은 HTTP/HTTPS 프로토콜과 관련된 기능
오버라이딩해야 하는 주요 메소드
메소드설명호출 시점
| init() | 서블릿 초기화 (객체 생성 직후 1회 실행) | 처음 로드될 때 |
| service() | 클라이언트 요청 시마다 호출 (GET/POST 관계없이) | 요청마다 |
| doGet() | GET 방식 요청 시 실행 | 요청마다 |
| doPost() | POST 방식 요청 시 실행 | 요청마다 |
| destroy() | 서블릿 객체가 소멸될 때 실행 | 서버 종료 시 |
클라이언트 요청이 들어오면 서버가 자동으로 호출하는 메소드들.
서블릿 등록 방법
서버가 어떤 URL로 요청이 들어올 때 어떤 서블릿을 실행할지 알아야 함.
이걸 등록 + 매핑(mapping) 작업이라고 함.
① web.xml 설정
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>basic.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first.naver</url-pattern>
</servlet-mapping>
② Annotation 방식
@WebServlet("/first.naver")
public class FirstServlet extends HttpServlet { ... }
구성 요소의미
| http:// | 프로토콜 |
| localhost | 서버 IP |
| 8088 | 포트 번호 |
| backendtest | 프로젝트(Context) 이름 |
| /iot/second | 서블릿 매핑 경로 |
5. 요청 방식 (GET vs POST)
구분GETPOST
| 데이터 위치 | URL에 포함 | HTTP Body에 포함 |
| 보안성 | 낮음 (주소창 노출) | 높음 (숨겨서 전송) |
| 사용 목적 | 조회/검색용 | 등록/수정/삭제용 |
| 전송 방법 | 주소창, 하이퍼링크, form(method="get") | form(method="post") |
| 파일 업로드 가능 | x | O |
6. 서블릿에서 요청 정보 추출
http://localhost:8088/serverweb/life.do?id=bts1&pass=1234
→ 서버는 요청이 들어오면 HttpServletRequest 객체를 만들어 전달함.
→ 우리는 request.getParameter("id") 식으로 값을 추출할 수 있음.
String id = request.getParameter("id");
String pass = request.getParameter("pass");
7. Servlet LifeCycle (생명주기)
클라이언트 요청 → 서버가 서블릿 객체 생성 → init() 실행
↓
요청 들어올 때마다 service() → doGet()/doPost() 실행
↓
서버 종료 또는 reload 시 destroy() 실행
구분핵심 내용
| Servlet 정의 | 서버에서 클라이언트 요청을 처리하는 자바 클래스 |
| 필수 상속 클래스 | HttpServlet |
| 주요 메소드 | init(), service(), doGet(), doPost(), destroy() |
| 등록 방법 | web.xml 또는 @WebServlet |
| 요청 방식 | GET (조회) / POST (등록, 수정, 삭제) |
| 위치 | /WEB-INF/classes 내부 (톰캣이 인식하는 표준 디렉토리) |
전체 흐름 다이어그램
┌──────────────────────────────┐
│ [Client / Browser] │
│ ─────────────────────────── │
│ HTML, JS, Form → 요청(Request)│
│ 예: GET /member?id=woohee │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [Servlet - Controller]│
│------------------------------│
│ ① 요청 분석 (파라미터 추출) │
│ String id = req.getParameter("id");│
│ ② Service 호출 │
│ MemberDTO dto = service.getMember(id);│
│ ③ 결과를 JSP로 전달 │
│ req.setAttribute("member", dto); │
│ forward("/memberInfo.jsp"); │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [Service Layer] │
│------------------------------│
│ 비즈니스 로직 처리 (데이터 검증, 조건문 등)│
│ DAO 호출 │
│ dao.getMember(id); │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [DAO] │
│------------------------------│
│ JDBC를 이용해 DB 접근 │
│ SQL 실행 → ResultSet 처리 │
│ DB 데이터 → DTO로 변환 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [DB] │
│------------------------------│
│ 실제 데이터 저장소(MySQL 등) │
│ SELECT / INSERT / UPDATE ... │
└──────────────┬───────────────┘
│ (결과 반환)
▼
┌──────────────────────────────┐
│ [Service] │
│------------------------------│
│ DAO 결과를 받아서 리턴 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [Servlet] │
│------------------------------│
│ JSP에게 데이터 전달(request.setAttribute)│
│ JSP로 Forward(이동) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [JSP(View)] │
│------------------------------│
│ HTML + EL(${member.id}) 출력 │
│ 브라우저로 Response 전송 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ [Client 화면] │
│------------------------------│
│ HTML이 렌더링되어 사용자에게 표시 │
│ 예: “아이디: woohee 이름: 우희” │
└──────────────────────────────┘'HDC 학습일지' 카테고리의 다른 글
| 2025-11-17(Spring) (1) | 2025.11.17 |
|---|---|
| 2025-11-14(서블릿, jsp 구조 파악, 스프링) (0) | 2025.11.17 |
| 2025-11-12(React -final) (1) | 2025.11.13 |
| 2025-11-11(react) (0) | 2025.11.12 |
| 2025-11-10(javascript - final) (0) | 2025.11.11 |