

๋ณด๋ ์๋น์ค ์ํ์์ ์ํ์ค๋ฅผ ๋ฐ๋ ์ด์ ๋ , jsp์์ a ํ์ดํผ๋งํฌ์ ์ฟผ๋ฆฌ์คํธ๋ง์ด seq? ๋ก ๋์ด์๊ธฐ๋๋ฌธ.
์
๋ฐ์ดํธ ์ค๋ฅ : ํฌ์๋์ ๊ฒฝ์ฐ์ ๊ธฐ์กด์ ๋ณธ์ธ์ด ๊ฐ์ง ๋งคํ๋ฐฉ์์ ๊ฐ์ง๊ณ ํฌ์๋ํ๋๊ฑฐ๋ผ , ์
๋ฐ์ดํธ ๋ฉ์๋๊ฐ ํฌ์คํธ๋งคํ๋์ด์๊ณ ๋ฆฌํด์ด ํฌ์๋๋ก ๋์ด์๋๋ฐ ์ ์ผ ์ ๊ฒ ๋ณด๋๋ฆฌ์คํธ๊ฐ ๋ฆฌํ์คํธ๋งคํ์ด ์๋๋ผ ๊ฒ๋งคํ์ด๋ฉด ํฌ์คํธ๋ฅผ ์ฐพ๋๋ฐ ๊ฒ๋ง ์์ด์ ์ฐพ์ ์๊ฐ ์์ /
ํด๊ฒฐ๋ฒ : ๋ฆฌ๋ค์ด๋ ํธ๋ก ํธ์ถํ์ฌ ๊ฒ๋งคํ์ ์ฐพ๊ฒ ํ๊ธฐ
ํน์ ๊ฒ๋ณด๋๋ฆฌ์คํธ๋ฅผ ๋ฆฌํ์คํธ๋งคํ์ผ๋ก ์ด๋
ธํ
์ด์
ํ๊ณ , ๋ฆฌํ์คํธ๋ฉ์๋ ์ผ, ํฌ์คํธ ๋๋ค ์ค์ ํด๋๋๊ฑธ๋ก ํ๊ธฐ ( ์ด๋๋ ์
๋ฐ์ดํธ ๋ฉ์๋๋ฅผ ํฌ์๋๋ฆฌํด์ผ๋ก ๋ด๋ฒ๋ ค๋ฌ๋ ๋จ)
@PostMapping ํ redirect๊ฐ ํ์ํ ์ด์ โ ๊ฒ์ํ ์์ ๋ก ์ฝ๊ฒ ์ดํดํ๊ธฐ@PostMapping ํ์ redirect๋ฅผ ํด์ผ ํ ๊น?Spring MVC์์ ์๋์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
BoardController.java ์ค ์ผ๋ถ@PostMapping("/updateBoard")
public String updateBoard(Board board) {
boardService.updateBoard(board);
return "getBoardList"; // โ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ!
}
์ด ์ฝ๋์์ ๊ฒ์๊ธ์ ์์ ํ ๋ค getBoardList.jsp๋ก ํฌ์๋(forward)ํ๋ ค๊ณ ํ์ง๋ง, 405 Method Not Allowed ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ด์.
๊ทธ ์ด์ ๋ ๋จ์ํฉ๋๋ค:
/updateBoard๋ฅผ ํธ์ถํ๋๋ฐ,"getBoardList"๋ ๋ด๋ถ์ ์ผ๋ก ๋ค์ POST ๋ฐฉ์์ผ๋ก /getBoardList๋ฅผ ์์ฒญํ๊ฒ ๋ฉ๋๋ค./getBoardList๋ ์ค์ง GET ๋ฐฉ์๋ง ํ์ฉํด์:@GetMapping("/getBoardList")
public String getBoardList(Model model) {
...
}
๊ฒฐ๊ตญ ์์ฒญ ๋ฐฉ์ ๋ถ์ผ์น๋ก ์๋ฌ๊ฐ ๋ฉ๋๋ค.
redirect: ์ฌ์ฉํ๊ธฐ (๊ถ์ฅ)๊ฐ์ฅ ํํ๊ณ ๊ถ์ฅ๋๋ ํด๊ฒฐ๋ฒ์ ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
@PostMapping("/updateBoard")
public String updateBoard(Board board) {
boardService.updateBoard(board);
return "redirect:getBoardList"; // โ
GET ๋ฐฉ์์ผ๋ก ์ฌ์์ฒญ๋จ
}
Spring์์๋ "redirect:" ์ ๋์ด๋ฅผ ๋ถ์ด๋ฉด ํด๋ผ์ด์ธํธ์ 302 ๋ฆฌ๋ค์ด๋ ํธ ์๋ต์ ๋ณด๋
๋๋ค. ๊ทธ๋์ ๋ธ๋ผ์ฐ์ ๋ /getBoardList๋ฅผ GET ๋ฐฉ์์ผ๋ก ๋ค์ ์์ฒญํ๊ฒ ๋์ด ๋ฌธ์ ์์ด ๋์ํฉ๋๋ค.
@RequestMapping์ผ๋ก GET/POST ๋ชจ๋ ํ์ฉํ๊ธฐ@RequestMapping(value = "/getBoardList", method = {RequestMethod.GET, RequestMethod.POST})
public String getBoardList(Model model) {
...
}
์ด๋ ๊ฒ ํ๋ฉด GET/POST ๋ชจ๋ ํ์ฉ๋๊ธฐ ๋๋ฌธ์, POST ๋ฐฉ์์ผ๋ก๋ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ด์. ํ์ง๋ง ์ด ๋ฐฉ์์ ๋ช ์์ฑ์ด ๋จ์ด์ง๊ณ , ์ค๋ณต ํผ ์ ์ถ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ด ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
Board.javapackage ruby.paper.domain;
import java.util.Date;
import lombok.*;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Getter
@Setter
public class Board {
private Long seq;
private String title;
private String content;
@Builder.Default
private Date createDate = new Date();
@Builder.Default
private Long cnt = 0L;
private String writer;
}
BoardService.java (์ธํฐํ์ด์ค)package ruby.paper.service;
import java.util.List;
import ruby.paper.domain.Board;
public interface BoardService {
List<Board> getBoardList();
Board getBoard(Board board);
void insertBoard(Board board);
void updateBoard(Board board);
void deleteBoard(Board board);
}
BoardServiceImpl.javapackage ruby.paper.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ruby.paper.domain.Board;
import ruby.paper.persistence.BoardRepository;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardRepository boardRepo;
@Override
public List<Board> getBoardList() {
return boardRepo.findAll();
}
@Override
public Board getBoard(Board board) {
return boardRepo.findById(board.getSeq()).orElse(null);
}
@Override
public void insertBoard(Board board) {
boardRepo.save(board);
}
@Override
public void updateBoard(Board board) {
boardRepo.save(board);
}
@Override
public void deleteBoard(Board board) {
boardRepo.deleteById(board.getSeq());
}
}
BoardController.javapackage ruby.paper.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import ruby.paper.domain.Board;
import ruby.paper.service.BoardService;
@Controller
public class BoardController {
@Autowired
private BoardService boardService;
@GetMapping("/getBoardList")
public String getBoardList(Model model) {
List<Board> boardList = boardService.getBoardList();
model.addAttribute("boardList", boardList);
return "getBoardList";
}
@GetMapping("/insertBoard")
public String insertBoardView() {
return "insertBoard";
}
@PostMapping("/insertBoard")
public String insertBoard(Board board) {
boardService.insertBoard(board);
return "redirect:getBoardList"; // โ
๋ฆฌ๋ค์ด๋ ํธ
}
@GetMapping("/getBoard")
public String getBoard(Board board, Model model) {
model.addAttribute("board", boardService.getBoard(board));
return "getBoard";
}
@PostMapping("/updateBoard")
public String updateBoard(Board board) {
boardService.updateBoard(board);
return "redirect:getBoardList"; // โ
๋ฆฌ๋ค์ด๋ ํธ
}
}
| ํฌ์ธํธ | ์ค๋ช |
|---|---|
redirect: | GET ๋ฐฉ์์ผ๋ก ๋ค์ ์์ฒญ์ ์ ๋ํ์ฌ ์๋ฌ ์์ด ์ฐ๊ฒฐ๋จ |
@PostMapping โ "getBoardList" (๋จ์ ๋ฌธ์์ด) | ์์ฒญ ๋ฐฉ์ ์ถฉ๋๋ก ์๋ฌ ๋ฐ์ ๊ฐ๋ฅ |
@RequestMapping(method = {GET, POST}) | ํฌ์๋ ๋ฐฉ์๋ ๊ฐ๋ฅํ๋ ๋ช ์์ฑ ๋จ์ด์ง |
| PRG ํจํด | Post โ Redirect โ Get์ผ๋ก ํผ ์ค๋ณต ์ ์ถ ๋ฐฉ์ง |