이전에 구현한 게시글 등록 기능에 REST API를 적용할 것이다.
프론트엔드에서 게시글을 등록하면, 등록할 때 입력된 정보를 JSON 타입으로 반환해주기로 해서 JSON 타입의 데이터를 받아와 DB에 저장하고, 등록한 게시글 상세 페이지로 redirect 해주도록 코드를 수정할 것이다.
기존에는 잘 실행되는지 확인하기 위해 "system.out.println"을 사용해 consol에 출력했다면, 이제부터는 로그로 출력할 것이다.
스프링 부트 라이브러리를 사용하면 spring-boot-starter-logging 가 함께 포함된다. 스프링 부트 로깅 라이브러리는 기본으로 SLF4J, Logback 라이브러리를 사용한다. 로그를 출력하기 위한 로깅 라이브러리와 관련된 코드도 추가할 것이다. 이제 코드를 수정해보자.
기존에 생성한 PostController.java 파일을 더보기 버튼과 같이 수정한다.
- 클래스 레벨에 @Slf4j 애노테이션이 추가됨
- 메서드 이름 변경: postWrite -> writePost
- registerPost 메서드 수정
package plming.board.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import plming.board.domain.PostDTO;
import plming.board.service.PostService;
@Slf4j
@Controller
public class PostController {
@Autowired
private PostService postService;
@GetMapping("/posts/write")
public String writePost(@RequestParam(value = "id", required = false) Long id, Model model) {
if (id == null) {
model.addAttribute("post", new PostDTO());
} else {
PostDTO post = postService.getPostDetail(id);
if (post == null) {
return "redirect: /posts/list";
}
model.addAttribute("post", post);
}
return "posts/write";
}
@ResponseBody
@PostMapping("/posts/register")
public String registerPost(@RequestBody PostDTO post, RedirectAttributes redirectAttributes) {
log.info("title: {}, writer = {}", post.getTitle(), post.getUser());
try {
boolean isRegistered = postService.registerPost(post);
redirectAttributes.addAttribute("postId", post.getId());
if (isRegistered == false) {
// 게시글 등록에 실패했다는 메시지 전달
}
} catch (DataAccessException e) {
// 데이터베이스 처리 과정에 문제가 발생했다는 메시지 전달
} catch (Exception e) {
// 시스템에 문제가 생겼다는 메시지 전달
}
return "redirect: /posts/{postId}";
}
}
코드를 살펴보면
애노테이션 및 메서드 | 설명 |
@Slf4j | 로그 라이브러리에는 수 많은 라이브러리가 있는데, 이것을 통합해서 인터페이스로 제공하는 것이 SLF4J 라이브러리다. SLF4J는 인터페이스이고, 그 구현체로 Logback 같은 로그 라이브러리가 존해한다. 일반적으로 스프링 부트가 기본으로 제공하는 Logback을 사용한다. @Slf4j 롬북을 사용하면 따로 로그를 선언해주지 않아도 되므로 클래스 레벨에 이 롬북을 선언한다. |
@ResponseBody | view를 조회하지 않고 메시지 바디 정보를 직접 반환한다. |
@RequestBody | 메시지 바디 정보를 직접 조회한다. |
log.info() | 로그 사용을 위한 메서드 |
registerPost | RequestBody를 통해 post 정보를 파라미터 값으로 받아온다. 로그에 간단하게 게시글 제목과 작성자를 출력한다. 나머지 로직은 이전과 일치하고, redirect되는 주소를 게시글 리스트가 아닌 등록한 게시글의 상세 페이지로 지정한다. |
RedirectAttributes | URL 인코딩을 해주고, pathVariable, 쿼리 파리미터까지 처리해준다. "redirect: /posts/{postId}": {postId}를 pathVariable 바인딩해준다. |
잘 실행되는지 Postman을 통해 테스트해보자.
postman을 실행하고 주소 부분을 사진과 같이 입력하고 HTTP 메서드를 POST로 지정한 후 Body 부분을 raw-JSON 타입으로 선택하고, 데이터를 입력한다.

Send을 클릭하고 결과를 확인해보면, 아직 redirect 페이지가 없어 상태 코드가 200 OK로 뜨지만 MySQL Workbench에서 post 테이블을 조회해보면 데이터가 잘 들어가 있는 것을 확인할 수 있다.


'Spring Boot Project > Plming' 카테고리의 다른 글
[Plming] 게시판 예외 처리(Global Exception Handling) 알아보기 (0) | 2022.03.29 |
---|---|
[Plming] 게시판에 JPA 적용하기 (0) | 2022.03.29 |
[Plming] 게시글 등록 구현하기 (0) | 2022.03.26 |
[Plming] 게시판 CRUD 처리하기 (0) | 2022.03.25 |
[Plming] 개발 환경 세팅하기 (0) | 2022.03.24 |
댓글