본문 바로가기

스프링3

[JPA] 변경 감지와 @Transactional 문제 상황 회원 가입 이후 회원 정보 수정의 기능을 개발하고 있던 중, 수정을 시도한 정보가 제대로 저장되지 않는 문제가 발생했다. 회원 이름을 "유저" 에서 "다른유저"로 변경해도 변경이 되지 않는 것이었다. 현재 프로젝트는 SpringBoot를, DB는 MySQL - JPA를 사용하며, Repository 클래스는 JpaRepository를 사용하고 있었다. 문제 원인을 탐색하던 중, 혹시나 하는 마음에 Service의 값 수정 메서드에 @Transactional을 붙여주자 문제가 해결되는 것을 확인했다. 왜 저장, 삭제 로직과 다르게 값의 수정에 대해서는 Service 계층의 메서드에 @Transactional 어노테이션을 붙여야 정상 동작 하는 것일까?? 문제점 저장, 삭제 로직과 수정 로직의 차.. 2023. 12. 23.
BindingResult 테스트하기 BindingResult는 Spring에서 제공하는 인터페이스로, 폼 데이터의 검증 결과를 담기 위해 사용한다. 우리가 SpringMVC를 구현했다고 가정하자. 우리는 컨트롤러가 검증 로직을 잘 수행하는지 테스트 하고 싶다. 컨트롤러는 필드 에러들을 BindingResult에 담기 때문에, BindingResult 객체를 테스트코드에서 받아올 수 있다면 검증 로직의 수행 결과를 쉽게 확인할 수 있을 것이다. 간단한 코드 설명 내가 현재 진행중인 코드 중 일부를 간단하게 수정해 살펴보자. 모델 우선, 검증을 수행할 클래스이다. @Getter @Setter @NoArgsConstructor @AllArgsConstructor public class Model { @NotBlank private String .. 2023. 10. 17.
MockMVC를 사용한 Form 데이터 전송 이번 글에서 MockMVC를 사용해 Form 데이터를 전송하는 요청을 만들어 보자. 태그 데이터의 전송 MockMVC를 알아보기 전에 Form 태그의 데이터 전송 방법을 먼저 알아보자. Http 통신에서 데이터는 파라미터, 또는 메시지 바디를 통해 전송된다. 그렇다면 form 태그를 통해 입력된 데이터는 어떤 방식으로 전송될까? 아래 코드는 개인적으로 진행하고 있는 프로젝트의 뷰의 일부이다. 이름 ID 비밀 번호 회원가입 회원 가입 버튼을 누르면 /user/join URL로 Post 요청을 보내게 된다. 회원 가입 요청에 대해 다음과 같은 요청을 확인할 수 있다. Payload에서 데이터 역시 확인할 수 있다. 조금 더 데이터를 자세히 보기 위해 Controller를 다음과 같이 만들어 보자. @Cont.. 2023. 9. 28.