
1. 회원가입
- 인증이 필요 없음
- 터질 가능성 : 이미 회원 가입되어있는 아이디로 가입할 경우 / 무결성 제약조건 위배
@PostMapping("/join")
public String join(UserRequest.JoinDTO reqDTO) throws Exception {
try {
userRepository.save(reqDTO.toEntity());
} catch (DataIntegrityViolationException e){
throw new Exception400("동일한 유저네임이 존재합니다.");
}
return "redirect:/";
}

2. 로그인
- 터질 가능성 : 아이디 혹은 비밀번호가 다를 경우
@PostMapping("/login")
public String login(UserRequest.LoginDTO reqDTO) {
try{
User sessionUser = userRepository.findByUsernameAndPassword(reqDTO);
session.setAttribute("sessionUser", sessionUser);
return "redirect:/";
}catch (EmptyResultDataAccessException e) {
throw new Exception401("유저네임 혹은 비밀번호가 틀렸어요");
}
}

3. 글 수정하기
- 터질 가능성 : 기본(255자)이상 들어올 수 있음
@PostMapping("/board/{id}/update")
public String update(@PathVariable Integer id, BoardRequest.UpdateDTO reqDTO) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardRepository.findById(id);
if(sessionUser.getId() != board.getUser().getId()){
throw new Exception403("게시글을 수정할 권한이 없습니다");
}
boardRepository.updateById(id, reqDTO.getTitle(), reqDTO.getContent());
return "redirect:/board/" + id;
}

4. 글 수정페이지 이동하기
- 터질 가능성 : 주소를 입력해서 없는 페이지로 갈 수 없음
@GetMapping("/board/{id}/update-form")
public String updateForm(@PathVariable(name = "id") Integer id, HttpServletRequest request) {
Board board = boardRepository.findById(id);
if(board == null) {
throw new Exception404("해당 게시글을 찾을 수 없습니다");
}
request.setAttribute("board", board);
return "/board/update-form"; // 서버가 내부적으로 index를 요청 - 외부에서는 다이렉트 접근이 안됨
}

5. 글 삭제하기
@PostMapping("/board/{id}/delete")
public String delete(@PathVariable Integer id) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardRepository.findById(id);
if(sessionUser.getId() != board.getUser().getId()){
throw new Exception403("게시글을 삭제할 권한이 없습니다");
}
boardRepository.deleteById(id);
return "redirect:/";
}

6. 게시글 상세보기
- 터질 가능성 : 로그인을 하고 수정, 삭제 버튼이 보여야 함
- 게시글 주인 : true 아니면 false
@GetMapping("/board/{id}")
public String detail(@PathVariable Integer id, HttpServletRequest request) {
User sessionUser = (User) session.getAttribute("sessionUser");
Board board = boardRepository.findByIdJoinUser(id);
// 로그인을 하고, 게시글의 주인이면 isOwner가 true가 된다.
boolean isOwner = false;
if(sessionUser != null){
if(sessionUser.getId() == board.getUser().getId()){
isOwner = true;
}
}
request.setAttribute("isOwner", isOwner);
request.setAttribute("board", board);
return "board/detail";
}
{{> /layout/header}}
<div class="container p-5">
{{#isOwner}}
<!-- 수정삭제버튼 -->
<div class="d-flex justify-content-end">
<!-- Post 요청-> 해당 페이지로 이동-->
<a href="/board/{{board.id}}/update-form" class="btn btn-warning me-1">수정</a>
<!-- Post 요청 -> 해당 페이지 삭제 -->
<form action="/board/{{board.id}}/delete" method="post">
<button class="btn btn-danger">삭제</button>
</form>
</div>
{{/isOwner}}
<div class="d-flex justify-content-end">
<b>작성자</b> : {{board.user.username}}
</div>
<!-- 게시글내용 -->
<div>
<h2><b>{{board.title}}</b></h2>
<hr/>
<div class="m-4 p-2">
{{board.content}}
</div>
</div>
<!-- 댓글 -->
<div class="card mt-3">
<!-- 댓글등록 -->
<div class="card-body">
<form action="/reply/save" method="post">
<textarea class="form-control" rows="2" name="comment"></textarea>
<div class="d-flex justify-content-end">
<button type="submit" class="btn btn-outline-primary mt-1">댓글등록</button>
</div>
</form>
</div>
<!-- 댓글목록 -->
<div class="card-footer">
<b>댓글리스트</b>
</div>
<div class="list-group">
<!-- 댓글아이템 -->
<div class="list-group-item d-flex justify-content-between align-items-center">
<div class="d-flex">
<div class="px-1 me-1 bg-primary text-white rounded">cos</div>
<div>댓글 내용입니다</div>
</div>
<form action="/reply/1/delete" method="post">
<button class="btn">🗑</button>
</form>
</div>
<!-- 댓글아이템 -->
<div class="list-group-item d-flex justify-content-between align-items-center">
<div class="d-flex">
<div class="px-1 me-1 bg-primary text-white rounded">ssar</div>
<div>댓글 내용입니다</div>
</div>
<form action="/reply/1/delete" method="post">
<button class="btn">🗑</button>
</form>
</div>
</div>
</div>
</div>
{{> /layout/footer}}



Share article