main.jsp에서 시작

스프링을 실행시켜 로그인을 한 뒤
main.jsp로 넘어왔습니다
여기에서 admin이 작성한 글 1번을 눌렀을 때의 흐름을 정리해보도록 하겠습니다
< main.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="${datas}">
<tr>
<td><a href="board?bid=${data.bid}">${data.bid}</a></td><td>${data.title}</td><td>${data.writer}</td>
</tr>
</c:forEach>
</table>
<hr>
<a href="logout">로그아웃</a>
<a href="mypage">마이페이지</a>
<a href="write">글 작성하기</a>
<hr>
<ul>
<c:forEach var="data" items="${mdatas}">
<li>${data.mid} | ${data.mname}님</li>
</c:forEach>
</ul>
</body>
</html>
위의 코드가 main.jsp 의 코드입니다
<a href="board?bid=${data.bid}">${data.bid}</a>
main.jsp의 핵심코드
사용자가 글 번호 클릭
브라우저가 GET 요청 생성
ex) data?bid = 1
Controller 실행
클릭을 하면 GET 요청으로 GET /board?bid=3 이렇게 만들어져서
매핑되는 컨트롤러 메서드는 🔽 아래와 같습니다
@GetMapping("/board")
public String boardPage(BoardDTO dto, Model model) {
boardService.updateBoard(dto);
model.addAttribute("data", boardService.getBoard(dto));
return "board";
}
URL : /board
방식 : GET
파라미터 : bid = 3
이 넘어오기 때문인데
< Spring 자동 바인딩 >
그럼 Spring이 자동으로 bid = 3 ➡dto.setBid(3)으로 해줍니다
간단히 정리하면 메서드 안에서는
조회수 증가와 글 상세 조회를 하고 있습니다
그리고 board.jsp로 이동을 한다
실제 경로는 /WEB-INF/views/board.jsp 이다
Controller → Service 호출
package com.example.biz.board;
import java.util.List;
public interface BoardService {
boolean insertBoard(BoardDTO dto);
boolean updateBoard(BoardDTO dto);
boolean deleteBoard(BoardDTO dto);
BoardDTO getBoard(BoardDTO dto);
List<BoardDTO> getBoardList(BoardDTO dto);
}
조회수 증가를 할 때 boardService를 호출한다
인터페이스 설계도가 존재하고
실제 실행 X 👉 “이런 메서드가 있다”
Spring이 BoardServiceImpl 연결 (ServiceImpl → DAO 호출)
package com.example.biz.board.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.biz.board.BoardDTO;
import com.example.biz.board.BoardService;
@Service("bs")
public class BoardServiceImpl implements BoardService {
@Autowired
private PlusBoardDAO boardDAO;
@Override
public boolean insertBoard(BoardDTO dto) {
return boardDAO.insertBoard(dto);
}
@Override
public boolean updateBoard(BoardDTO dto) {
return boardDAO.updateBoard(dto);
}
@Override
public boolean deleteBoard(BoardDTO dto) {
return boardDAO.deleteBoard(dto);
}
@Override
public BoardDTO getBoard(BoardDTO dto) {
return boardDAO.getBoard(dto);
}
@Override
public List<BoardDTO> getBoardList(BoardDTO dto) {
return boardDAO.getBoardList(dto);
}
}
@Service
public class BoardServiceImpl implements BoardService
➡ Spring이 자동 연결
즉 실제 실행 : BoardServiceImpl.updateBoard()
DAO → MyBatis 실행
package com.example.biz.board.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.example.biz.board.BoardDTO;
@Repository
public class MybatisBoardDAO {
@Autowired
private SqlSession sqlSession;
private static final String NAMESPACE = "Board.";
public boolean insertBoard(BoardDTO dto) {
if(sqlSession.insert(NAMESPACE+"insert", dto) <= 0) {
return false;
}
return true;
}
public boolean updateBoard(BoardDTO dto) {
if(sqlSession.update(NAMESPACE+"update", dto) <= 0) {
return false;
}
return true;
}
public boolean deleteBoard(BoardDTO dto) {
if(sqlSession.delete(NAMESPACE+"delete", dto) <= 0) {
return false;
}
return true;
}
public BoardDTO getBoard(BoardDTO dto) {
return sqlSession.selectOne(NAMESPACE+"getOne", dto);
}
public List<BoardDTO> getBoardList(BoardDTO dto){
return sqlSession.selectList(NAMESPACE+"getList");
}
}
MyBatis Mapper XML 실행
Mapper XML → 실제 SQL 실행
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Board">
<insert id="insert" parameterType="boardDTO">
INSERT INTO BOARD(TITLE,WRITER,CONTENT)
VALUES(#{title},#{writer},#{content})
</insert>
<update id="update" parameterType="boardDTO">
UPDATE BOARD
SET CNT=CNT+1
WHERE BID=#{bid}
</update>
<delete id="delete" parameterType="boardDTO">
DELETE FROM BOARD
WHERE BID=#{bid}
</delete>
<select id="getOne" parameterType="boardDTO" resultType="boardDTO">
SELECT * FROM BOARD
WHERE BID=#{bid}
</select>
<select id="getList" resultType="boardDTO">
SELECT * FROM BOARD
ORDER BY BID DESC
</select>
</mapper>
실제 DB 실행: UPDATE BOARD SET CNT=CNT+1 WHERE BID=1
[사용자 클릭]
main.jsp
↓
GET /board?bid=1
↓
Controller
↓
BoardService (인터페이스)
↓
BoardServiceImpl (실제 실행)
↓
DAO (MybatisBoardDAO or PlusBoardDAO)
↓
SqlSession
↓
Mapper XML
↓
DB
↓
결과 반환
↓
board.jsp 출력
'🍏 개발일기' 카테고리의 다른 글
| DB 파티셔닝(Partitioning)이란? (0) | 2026.02.12 |
|---|---|
| private SqlSession sqlSession; 에 대해 분석해보았습니다 (0) | 2026.02.12 |
| 스프링에서의 정적 리소스(static resources) 핸들러 (0) | 2026.02.10 |
| 커넥션 풀(Connection Pool) (0) | 2026.02.08 |
| Git Bash 설치하고 간단하게 이름, 이메일 설정해보기 (0) | 2026.02.08 |