index.jsp 로그인 폼에서 시작해서, 사용자가 로그인 버튼을 누를 때 서버에서 어떤 흐름으로 처리되는지 단계별로 정리
사용자 로그인 시작
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>표지페이지</title>
</head>
<body>
<form action="login" method="POST">
<table border="1">
<tr>
<td>아이디</td>
<td><input type="text" name="mid" required></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="mpw" required></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="로그인"></td>
</tr>
</table>
</form>
</body>
</html>
▪ 사용자가 아이디와 비밀번호를 입력하고 로그인 버튼 클릭
▪ 브라우저가 /login으로 POST 요청 전송
▪ 전송 데이터 mide, mpw
ex) admin, 1234
DispatcherServlet 수신
Spring Boot에서는 Front Controoler 패턴을 사용합니다
1. 모든 요청이 먼저 DispatcherServlet으로 들어감
2. /login POST 요청 ➡ DispatcherServlet이 처리 담당 컨트롤러를 찾음
(HandlerMapping)
DispatcherServlet이 읽는 설정 파일
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xmlns:mvc="https://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
https://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
https://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">login</prop>
<prop key="/logout.do">logout</prop>
</props>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="login" class="com.example.controller.member.LoginController" />
<bean id="logout" class="com.example.controller.member.LogoutController" />
</beans>
DispatcherServlet과 XML 관계
DispatcherServlet
▪ Spring MVC의 Front Controller
▪ 모든 HTTP 요청을 받아서 적절한 컨트롤러로 전달하고, 뷰를 반환하는 역할
지금 위의 코드는
▪ DispatcherServlet이 로딩할 때 참조하는 Spring MVC 설정 파일
▪ 여기서 URL ➡ Controller 매핑, ViewResolver, Controller Bean 등을 정의함
즉, DispatcherServlet이 실제 요청을 처리하는 주체이고,
이 XML은 그 DispatcherServlet의 설정 파일입니다.
Controller 로그인 처리
TestController.java 코드 일부
@PostMapping("/login") // POST 방식으로 /login 요청이 오면 실행
public String login(MemberDTO memberDTO, Model model) {
System.out.println("두번째 로그");
// 로그인 확인
MemberDTO member = memberService.getMember(memberDTO);
if(member != null) {
// 로그인 성공 → board 목록 가져오기
List<BoardDTO> boards = boardService.getBoardList(new BoardDTO());
model.addAttribute("boards", boards);
model.addAttribute("memberName", member.getMname()); // JSP에 이름 전달
return "boardList"; // /WEB-INF/views/boardList.jsp
}
else {
// 로그인 실패
model.addAttribute("msg", "아이디 또는 비밀번호가 틀렸습니다.");
return "index";
}
}
▪ Spring이 MemberDTO memberDTO에 폼 데이터 mid, mpw를 자동 바인딩
▪ memberService.getMember() 호출 ➡ DB 조회
▪ 로그인 성공 시 Board 목록 가져와서 Model에 추가
▪ JSP 이름(boardList) 반환 ➡ ViewResolver가 실제 JSP 경로(/WEB-INF/views/boardList.jsp) 완성
Board 목록 조회
BoardDAO.java 코드 일부
public List<BoardDTO> getBoardList(BoardDTO dto){
List<BoardDTO> datas = new ArrayList<BoardDTO>();
Connection conn = JDBCUtil.connect();
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(SELECT_ALL);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
BoardDTO data = new BoardDTO();
data.setBid(rs.getInt("BID"));
data.setTitle(rs.getString("TITLE"));
data.setWriter(rs.getString("WRITER"));
data.setContent(rs.getString("CONTENT"));
data.setRegdate(rs.getDate("REGDATE"));
data.setCnt(rs.getInt("CNT"));
datas.add(data);
}
} catch (SQLException e) {
e.printStackTrace();
}
JDBCUtil.disconnect(conn, pstmt);
return datas;
}
▪ Board 테이블 전체 데이터를 가져와 List<BoardDTO>에 저장
▪ Controller가 이 List를 Model에 boards 이름으로 추가
JSP 출력
boardList.jsp 전체 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인</title>
</head>
<body>
<table border="1">
<tr>
<td>글 번호</td><td>글 제목</td><td>작성자</td>
</tr>
<c:forEach var="data" items="${boards}">
<tr>
<td>${data.bid}</td>
<td>${data.title}</td>
<td>${data.writer}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
▪ boards Model attribute를 반복하여 테이블에 출력
▪ JSTL 필요 (jakarta.servlet.jsp.jstl 라이브러리)
'🍏 개발일기' 카테고리의 다른 글
| DB 연결 그리고 인스턴스 스펙 문제 | 오버블리 프로젝트 배포하기 (1) | 2026.01.21 |
|---|---|
| EC2 루트 볼륨 용량 늘리기 (0) | 2026.01.21 |
| 내 PC에서 만든 오너블리 쇼핑몰, AWS EC2에 배포하고 누구나 접속하기 (2) | 2026.01.20 |
| AWS EC2 인스턴스 생성과 EC2 서버 접속 (0) | 2026.01.20 |
| JSTL 오류 해결과 게시판 구현 (0) | 2026.01.20 |