블로그 API(8) : 블로그 글 수정 API 구현

도람·2025년 8월 7일
post-thumbnail

Domain/Entity "Article.java"

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Article {
//생략
    public void update(String title, String content){
        this.title = title;
        this.content = content;
    }
}
  • 블로그 글 생성과 같은 경우에는 외부에서 완전한 새 객체를 넘겨주면 끝났던 일이고, 삭제는 blogRepository.delete(id) 처럼 식별자만 넘기면 JPA가 알아서 지워줬다.
  • 그러나 update는 이미 DB에 저장된 기존 객체 "일부" 필드만 바꿔야 하기 때문에 엔티티 안에 메서드를 작성한다.
    (실제 상태 변경 로직은 엔티티 내부에 두는 게 객체지향 설계 원칙에 맞다.)

블로그 글 수정 dto

<updateArticleRequest.java>

@NoArgsConstructor
@AllArgsConstructor
@Getter
public class UpdateArticleRequest {
    private String title;
    private String content;
}
  • 블로그 글 수정 요청을 받을 DTO이다.
  • 글에서 수정해야하는 것은 타이틀, 내용이기 때문에 타이틀과 내용 필드로 구성한다.

블로그 글 수정 service

@RequiredArgsConstructor
@Service                 
public class BlogService {
//생략
    @Transactional
    public Article update(long id, UpdateArticleRequest request){
        Article article = blogRepository.findById(id)
                .orElseThrow(()-> new IllegalArgumentException("not found: " + id));

        article.update(request.getTitle(), request.getContent());

        return article;
    }
}
  • @Transactional: 매칭한 메서드를 하나의 트랙잭션으로 묶어 적용할 수 있게 한다.
    -> update() 메서드는 엔티티의 필드 값이 바뀌면 중간에 에러가 발생해도 제대로 된 값 수정을 보장할 수 있게 된다.

블로그 글 수정 controller

@RequiredArgsConstructor
@RestController
public class BlogApiController {

 	private final BlogService blogService;
    
    @PutMapping("/api/article/{id}")
    public ResponseEntity<Article> updateArticle(@PathVariable long id,
                                                 @RequestBody UpdateArticleRequest request) {
        Article updatedArticle = blogService.update(id, request);

        return ResponseEntity.ok()
                .body(updatedArticle);
    }
}
  • "/api/article/{id}" PUT 요청이 오면 글을 수정한다.
  • update() 메서드에 id와 request를 넘겨준다. 응답 값은 body에 담아 전송한다.

블로그 글 수정 API 테스트

글이 성공적으로 수정되었는지를 확인하기 위해, 수정 전 글과 수정 후 글을 비교한다.

글 조회하여 수정 전 글 확인

  • 전에 만들었던 GET "/api/articles" 요청을 보내 전체 글의 내용을 확인한다.

글 수정 요청

  • "api/api/articles/1" PUT 요청과 함께 Body에 수정할 내용을 작성하여 보낸다.

글 수정 후 글 확인

  • 다시 전체 글 조회 요청을 보내 수정 요청을 보낸것이 잘 적용되었는지 확인한다.
  • 수정 요청을 보낸 제목과 내용이 잘 적용이 된 것을 확인할 수 있다.

해당 글은 다음 도서의 내용을 정리하고 참고한 글임을 밝힙니다.
신선영, ⌜스프링 부트 3 벡엔드 개발자 되기 - 자바 편⌟, 골든래빗(주), 2023, 384쪽

profile
정도를 걷는 엔지니어

0개의 댓글