개발세발은 안되요

[스프링부트3개발자되기] 06장 : 블로그 기획하고 API 만들기(2) 본문

책/스프링부트3 개발자 되기: 자바편

[스프링부트3개발자되기] 06장 : 블로그 기획하고 API 만들기(2)

금호박 2024. 4. 5. 01:18

6.4 블로그 글 목록 조회를 위한 API 구현하기

  • stream 은 여러 데이터가 모여 있는 컬렉션을 간편하게 처리하기 위한 자바 8에서 추가된 기능이다.
  • 테스트 코드를 작성할 때 import에 주의한다.(인텔리제이에서 자동 import를 했을 때 잘못된 파일에 접근하는 경우가 있다. )
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

 

 

6.5 블로그 글 조회 API 구현하기

@PathVariable : URL에서 값을 가져오는 애너테이션.

// 블로그 글 하나 조회
    @GetMapping("/api/articles/{id}")
    // URL 경로에서 값 추출
    public ResponseEntity<ArticleResponse> findArticle(@PathVariable long id){
        Article article = blogService.findById(id);

        return ResponseEntity.ok()
                .body(new ArticleResponse(article));
    }
위의 코드에서 만약 URL 주소가 /api/articles/3 GET 요청을 받으면 id 값으로 3이 들어온다.

 

 

6.6 블로그 글 삭제 API 구현하기

  • 삭제 API 에 대한 테스트코드를 작성할 때, 다음의 방식을 이용한다.
    • 블로그 글 하나 생성함.
    • 삭제 API 호출.
    • 블로그 글 전체 조회했을 때 0개가 조회되며, 상태코드가 200 OK 인지 확인한다.

 

6.7 블로그 글 수정 API 구현하기

@Transactional : 매칭한 메서드를 하나의 트랜잭션으로 묶음. 

트랜잭션
: 데이터베이스의 데이터를 바꾸기 위해 묶은 작업의 단위.

예를 들어 계좌 이체를 할 때에는 1. A계좌에서 출금 , 2. B계좌에 입금  이라는 두 과정을 거칠 수 있다. 그런데 만약 1의 과정은 성공하고 2의 과정은 실패하게 된다면 문제가 발생할 수 있다. 이를 막기 위해서는 1번과 2번 과정을 하나의 작업 단위로 묶어 두 작업을 한 단위로 실행하면 된다. 만약 중간에 실패한다면 트랜잭션의 처음 상태로 모두 되돌리면 된다.

트랜잭션을 이용할 경우 중간에 엔티티의 필드 값이 바뀌어 에러가 발생해도 제대로  된 값 수정을 보장해준다.

 

 


어려웠던 점- 메모 사항

  • Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Failed to execute SQL script statement #1 of URL [file:/Users/mosuji/IdeaProjects/springboot-developer/out/production/resources/data.sql]: INSERT INTO article (title, content) VALUES ('제목1', '내용1')
    • 해당 에러 발생 : yml 에 아래의 내용을 작성하지 않아서 발생한 에러였다. 하지만 이미 작성되어있는 상태였다.. 그래서 아래 내용이 적힌 부분의 위치를 바꿔주었더니 제대로 작용하였다.
defer-datasource-initialization: true