🍏 개발일기

로그인부터 Board 목록까지 출력 흐름 정리해보기

보배 진 2026. 1. 20. 18:41

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 라이브러리)