본문 바로가기

개발 실습/CRUD 게시판 만들기

20. 게시판 목록 백단 구현 : BoardListServlet 동작 원리 분석

반응형
목차

1. 들어가며

2. BoardListServlet
    2-1. @WebServlet
    2-2. doGet()

3. 마무리하며

 

1. 들어가며

지난 글에서는 BoardDao를 통해 게시판 전체 목록을 조회하는 기능이 어떻게 구현되는지 살펴보았습니다.

DAO가 데이터베이스와 직접 맞닿는 계층이라면, 이번 글에서 다룰 BoardListServlet실제 요청을 받아서 DAO를 호출하고, 조회한 데이터를 JSP로 전달하는 역할을 담당합니다.

 

이번 글에서는 BoardListServlet의 구성과 실행 흐름을 단계별로 분석하면서,
Servlet 기반 MVC 구조에서 Controller가 어떻게 동작하는지 이해해보겠습니다.

 

2. BoardListServlet

이 서블릿은 사용자가 게시판 목록 페이지를 열려고 할 때 실행되는 클래스입니다.

브라우저에서 /visit/list 주소로 들어오면 이 파일이 자동으로 실행되며 DB에서 글 목록을 불러오고, 그 목록을 JSP 화면에 보여주도록 전달하는 역할을 합니다.

 

전체 소스를 다음과 같습니다.

 

package com.visit.board.controller;

import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;

import org.apache.ibatis.session.SqlSessionFactory;

import com.visit.board.dao.BoardDao;
import com.visit.board.util.MyBatisUtil;
import com.visit.board.vo.BoardVo;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/visit/list")
public class BoardListServlet extends HttpServlet {
	
	private static final Logger logger = Logger.getLogger(BoardWriteServlet.class.getName());
	
	public BoardListServlet() {
		super();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
		BoardDao boardDao = new BoardDao(sqlSessionFactory);
		
		try {
			List<BoardVo> boardList = boardDao.selectAll();
			req.setAttribute("boardList", boardList);
			// list.jsp 페이지 포워딩
			// Spring MVC 방식이 아닌, 순수 Servlet 방식이어서 getRequestDispatcher() 사용 필수
			req.getRequestDispatcher("/WEB-INF/views/visit/list.jsp").forward(req, res);
		} catch (Exception e) {
			logger.severe("글 작성 중 오류: " + e.getMessage());
			e.printStackTrace();
			throw new ServletException(e);
		}
		
	}
	
}

 

2-1. @WebServlet

클래스 맨 위에는 이렇게 적혀 있습니다.

 

@WebServlet("/visit/list")
public class BoardListServlet extends HttpServlet {
    ...
}

 

@WebServlet("/visit/list")는 어노테이션 중 하나로, 괄호 안에 적힌 웹 주소와 이 클래스를 연결합니다.

* @가 붙은 것은 어노테이션이라고 부르며, 코드에 특별한 역할을 주는 기능을 합니다. 

 

즉, 브라우저에서 "/visit/list" 로 들어오면 서버가 이 클래스를 실행하는 것입니다.

 

또한 HttpServlet을 상속받았기에 GET / POST 요청을 구분하여 처리할 수 있습니다.

 

2-2. doGet()

doGet()은 사용자가 목록 페이지를 열 때 실행되는 메소드입니다.

코드를 순서대로 따라가면서 각 부분이 하는 일을 살펴보겠습니다.

 

[ @Override / doGet() ]

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

 

@Override는 부모 클래스(HttpServlet)의 메소드를 재정의했다는 표시입니다.

 

doGet() 메소드는 GET 요청을 처리하며 목록 페이지를 보여주는 핵심 메소드입니다.

 

📌 doGet() 이 아닌 이름으로 설정할 수도 있지만,

Servlet 명세 상 공식 지원되는 HTTP 메소드 핸들러는 doGet(), doPost(), doPut(), doDelete() 등입니다.

그래서 지원되지 않는 doEdit() 메소드는 서블릿이 직접 호출해주지 않아, 별도의 처리가 있어야만 실행할 수 있습니다.

 

[ SqlSessionFactory ]

 SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();

 

DB와 연결하기 위한 MyBatis 세션을 준비하는 코드입니다.

 

[ BoardDao ]

DAO 객체를 생성합니다. 이를 통해 DB에서 게시글 목록을 가져올 수 있습니다.

 

 BoardDao boardDao = new BoardDao(sqlSessionFactory);

 

[ try ]

DAO에서 게시글 목록을 가져오고, 이를 request(req)에 담아 JSP로 전달합니다.

 

forward() 를 사용하면 데이터를 그대로 전달하여 화면에 표시할 수 있습니다.

 

  try {
        List<BoardVo> boardList = boardDao.selectAll();
        req.setAttribute("boardList", boardList);
        req.getRequestDispatcher("/WEB-INF/views/visit/list.jsp").forward(req, res);

 

[ catch ]

오류가 발생하면 로그를 남기고 서버가 처리하도록 예외를 던지는 코드입니다.

 

    } catch (Exception e) {
        logger.severe("글 작성 중 오류: " + e.getMessage());
        e.printStackTrace();
        throw new ServletException(e);
    }

 

3. 마무리하며

이번 글을 통해 게시판 목록 화면을 처리하는 코드가 완성되었습니다.

다음 글에서는 목록에 글을 채우기 위한 글 작성 화면을 진행하겠습니다.

수고하셨습니다.

 


📌 참고

 

[개발 실습/CRUD 게시판 만들기] - [JAVA]11. 게시판 목록 화면 구현 : 제목 태그(title, h2)

 

[JAVA]11. 게시판 목록 화면 구현 : 제목 태그(title, h2)

[ 목차 ]1. 게시판 목록 화면 1-1. 게시판 목록 화면의 역할2. 페이지 기본 제목 구성 2-1. 브라우저 탭 제목 : 태그 2-2. 페이지 내 메인 제목 : 태그3. 마무리 1. 게시판 목록 화면이번 글에서는 CRUD 게

silverji.tistory.com

 

[개발 실습/CRUD 게시판 만들기] - [JAVA]12. 게시판 목록 화면 구현 : 테이블과 forEach를 활용한 게시글 출력

 

[JAVA]12. 게시판 목록 화면 구현 : 테이블과 forEach를 활용한 게시글 출력

[ 목차 ]1. 게시판 목록 화면 1-1. 게시판 목록을 표로 구성하는 이유2. 게시판 표 기본 구성 2-1. 표 제목 만들기 : 태그 2-2. 게시글 데이터의 반복 출력 : + forEach3. 게시글이 없을 때 표시하기 3-1. 빈

silverji.tistory.com

 

[개발 실습/CRUD 게시판 만들기] - 16. 게시판 상세보기 화면 구현 : 버튼, 삭제, 필수입력(required), 강조(strong) 활용

 

16. 게시판 상세보기 화면 구현 : 버튼, 삭제, 필수입력(required), 강조(strong) 활용

목차1. 상세보기 화면(detail.jsp) 구성 소개2. 중요 정보 강조 : 태그 활용 2-1. 태그란? 2-2. 코드 예시3. ${ } 표현식 3-1. ${ } 표현식이란? 3-2. ${ } 표현식의 주요 기능 3-3. 코드 예시4. 삭제 버튼 구현 : on

silverji.tistory.com

 

[개발 실습/CRUD 게시판 만들기] - 17. 게시판 백엔드 기초 : BoardVo.java로 데이터 객체 이해하기

 

17. 게시판 백엔드 기초 : BoardVo.java로 데이터 객체 이해하기

목차1. BoardVo란?2. 파일 생성하기3. 코드 살펴보기 3-1. 패키지 3-2. 필드(Field) 3-3. 생성자(Constructor) 3-4. Getter / Setter4. 마무리하며 1. BoardVo 란? 이전 글까지는 게시판 화면의 기본 구조와 레이아웃을

silverji.tistory.com

 

[개발 실습/CRUD 게시판 만들기] - 18. 게시판 백엔드 기초 : board-mapper.xml로 매핑 구조 이해하기

 

18. 게시판 백엔드 기초 : board-mapper.xml로 매핑 구조 이해하기

목차1. board-mapper.xml 이란? 2. 파일 생성하기3. 코드 살펴보기 3-1. Mapper 파일 구조 3-2. namespace와 id 3-3. resultType와 SQL 매핑 3-4. 게시글 전체 조회 쿼리4. 마무리하며 1. board-mapper.xml 이란?MyBatis에서는

silverji.tistory.com

 

 

 

개발 실습/CRUD 게시판 만들기] - 19. 게시판 백엔드 기초 : BoardDao로 게시글 목록 조회 기능 구현하기

 

19. 게시판 백엔드 기초 : BoardDao로 게시글 목록 조회 기능 구현하기

목차1. BoardDao란?2. 파일 생성하기3. 코드 살펴보기 3-1. SqlSessionFactory 주입과 생성자 3-2. 게시글 전체 목록 조회 (selectAll)4. 마무리하며 1. BoardDao란?이번 글에서는 board-mapper.xml 과 연결되는 DAO(Data Acc

silverji.tistory.com

 

 

 

반응형