본문 바로가기
Web/스프링 부트와 aws로 구현하는 웹서비스

8. 수정, 조회 api

by 장인이 2021. 7. 19.

해당 게시물들은 이동욱 저자님의 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스"를 공부하며 기록한 것입니다.

 

 지난 게시물에서 등록 api를 작성하였으므로, 이어서 게시글을 수정, 조회하는 api를 작성할 것이다.

 

<PostsApiController.java>

 수정은 PUT 방식, 조회는 GET방식으로 작성한다.

 

 

<PostsResponseDto.java>

 PostsResponseDto.java를 새로 생성한다. 해당 Dto는 조회하는 기능만 필요하므로, 생성자 어노테이션을 사용하지 않고 @Getter 어노테이션만 사용하도록 한다. 또한, Entity의 일부만 사용하므로 생성자에 Entity를 받아 필드에 값을 넣는다.

 

 

<PostsUpdateRequestDto.java>

 

<Posts.java의 뒷부분>

 

<PostsService.java>

 

 수정 위한 Dto도 추가하고, Posts Entity 클래스에 update 함수를 추가한 후 PostsService Service 클래스에 업데이트, 조회 함수를 작성한다.

 

 여기서 특이한 점은, 업데이트 기능에서 업데이트를 할 때 별도의 쿼리를 사용하는 것이 아닌, 기존의 엔티티에서 요소를 변경하기만 했다는 점이다. 그럼에도 불구하고 업데이트가 진행되는데, 이는 JPA의 영속성 컨텍스트 때문이다.

 

 JPA의 핵심적인 내용은 엔티티가 영속성 컨텍스트에 포함되어있나, 아니냐로 갈린다. JPA의 엔티티 매니저가 활성화된 상태로, 트랜잭션 안에서 DB에서 데이터를 가져오면 이 데이터는 영속성 컨텍스트가 유지된 상태이다.

 

 여기서 데이터의 값을 변경하면, 트랜잭션이 끝나는 시점에서 변경된 데이터를 반영한다. 즉, Entity 객체의 값만 변경해주면 별도로 Update 쿼리가 필요 없다는 뜻이다. 이러한 개념을 더티 체킹이라고 한다.

 

 

 이제 등록 기능을 체크했던 PostsApiControllerTest에 수정기능을 테스트하는 테스트 코드를 추가해 본다.

 

 

 전체적인 구조는 우선 db에 직접 게시물 하나를 추가한 후, 바꾸고자 하는 제목과 내용으로 변환 내용을 ResponseEntity를 활용해 PUT Method으로 보낸다. 그 후 수정된 내용이 잘 반영되었는지 확인하는 절차이다.

 

 

 이때 test중 정보: 0 containers and 1 tests were Method or class mismatch 라는 경고문구가 떠 확인해본 결과, 해당 클래스의 test method 전부를 실행시키지 않아 발생한 문구이며, 크게 신경쓰지 않아도 된다는 사실을 알았다.

 


추가로 application.properties에 "spring.h2.console.enabled=true"를 추가할 시, 웹 콘솔에 접근할 수 있게 된다. 추가 후 Application 클래스의 main 메소드를 실행하고, http://localhost:8080/h2-console 로 접속하여 쿼리를 실행해 볼 수 있다.

 

 

간단하게 insert 쿼리로 예시 게시물을 하나 생성하고, 이를 api로 조회해 볼 수 있다.

 

 

이후 브라우저에 http://localhost:8080/api/v1/posts/1을 입력해 api조회 기능을 확인해 볼 수 있다.

 

 


- 학습 내용 저장할 github

https://github.com/imgzon3/imgzon3-springboot-test

 

imgzon3/imgzon3-springboot-test

Contribute to imgzon3/imgzon3-springboot-test development by creating an account on GitHub.

github.com

 

댓글