[Springfolio] 4편 - 게시판 구현(글 작성 폼 + 저장 기능)

Jlee7362·2025년 8월 9일

0. 목표

  • /usr/article/write에서 글 작성 폼 표시
  • 작성 후 DB 저장
  • 저장 후 /usr/article/list로 리다이렉트

1. ArticleController 수정

  • GET 요청: 폼 보여주기
  • POST 요청: 저장 처리 후 리스트로 이동
package com.example.demo.controller;

import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.example.demo.repository.ArticleRepository;
import com.example.demo.vo.Article;

import lombok.RequiredArgsConstructor;

@Controller
@RequiredArgsConstructor
public class ArticleController {

    private final ArticleRepository articleRepository;

    @RequestMapping("/usr/article/list")
    public String showList(Model model) {
        List<Article> articles = articleRepository.getArticles();
        model.addAttribute("articles", articles);
        return "article/list";
    }

    @RequestMapping(value = "/usr/article/write", method = RequestMethod.GET)
    public String showWriteForm() {
        return "article/write";
    }

    @RequestMapping(value = "/usr/article/write", method = RequestMethod.POST)
    public String doWrite(@RequestParam String title, @RequestParam int memberId) {
        articleRepository.writeArticle(title, memberId);
        return "redirect:/usr/article/list";
    }
}


2. ArticleRepository에 저장 메서드 추가


package com.example.demo.repository;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.example.demo.vo.Article;

@Mapper
public interface ArticleRepository {
    List<Article> getArticles();

    void writeArticle(@Param("title") String title, @Param("memberId") int memberId);
}


3. Mapper XML에 INSERT 쿼리 추가

  • 경로: src/main/resources/mappers/ArticleMapper.xml
<mapper namespace="com.example.demo.repository.ArticleRepository">
  
  <select id="getArticles" resultType="com.example.demo.vo.Article">
    SELECT id, regDate, title, memberId
    FROM article
    ORDER BY id DESC
  </select>

  <insert id="writeArticle">
    INSERT INTO article
    SET regDate = NOW(),
        title = #{title},
        memberId = #{memberId}
  </insert>

</mapper>


빨간 오류는 원래 항상 나는 오류.


4. 글 작성 폼 JSP

  • 경로: src/main/webapp/WEB-INF/jsp/article/write.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>글 작성</title>
</head>
<body>
<h1>글 작성</h1>

<form action="/usr/article/write" method="post">
    <div>
        제목: <input type="text" name="title" required>
    </div>
    <div>
        작성자 ID: <input type="number" name="memberId" required>
    </div>
    <div>
        <button type="submit">저장</button>
    </div>
</form>

</body>
</html>


5. 동작 흐름

  1. /usr/article/write (GET) → 글 작성 폼 표시

  2. 제목 + 작성자 ID 입력 후 전송

  3. /usr/article/write (POST) → DB에 INSERT

  4. 완료 후 /usr/article/list로 이동

  5. 리스트 페이지에서 새 글 확인 가능


6. 자주 나는 오류

  • 404: JSP 경로 확인 (article/write.jsp 맞는지)

  • HTTP 405 (Method Not Allowed): method = RequestMethod.POST 확인

  • NullPointerException: Repository 주입 누락 여부 확인


7. 다음 (5편)

  • 글 상세 페이지(/usr/article/detail?id=...)

  • 상세보기에서 수정/삭제 버튼 추가

0개의 댓글