Spring(7)
-
[Spring] @JsonCreator 와 @JsonProperty 을 사용해야하나?
개요프로젝트 중 RequestDto 에 @RequiredArgsConstructor 을 사용하고 있었다. Code Rabbit 이 Request DTO 문제를 지적을 하면서"Lombok의 @RequiredArgsConstructor로 만든 생성자는 Jackson(JSON 라이브러리)이 인식하지 못할 수 있으니, Jackson이 확실하게 알아볼 수 있도록 @JsonCreator와 @JsonProperty를 사용한 명시적인 생성자를 만들어야 합니다." 하지만 로컬 환경에서는 API 가 동작이 잘되었고, 실제 테스트 시 문제가 없었다. 재미니에게 물어보니"동작이 잘 되는데, 왜 이런 지적이 맞을까요?"이것이 가장 중요한 포인트입니다. 사용자님께서 "로컬에서 테스트해보니 잘 동작했다"고 생각하시는 것은 매우 자..
2025.08.28 -
[JPA] 소프트딜리트를 구현하자
개요현재 진행 중인 프로젝트에서 유저 회원 탈퇴를 소프트딜리트로 구현을 하기로 하여 만들어보았다.여러 생각을 하면서 만들다보니 소스코드가 깔끔하지는 않은데 글을 적으면서 정리를 해보기로 하였다. 소프트딜리트의 원리소프트 딜리트는 데이터를 실제로 삭제하지 않고, deleted 같은 플래그 값을 true로 바꿔서 논리적으로 삭제를 하는 방식이다.조회시 과거에는 @Where 어노테이션을 사용하였지만, 현재는 @SQLRestriction 어노테이션을 사용하여 구현한다.JPA에서는 @SQLDelete, @Where 어노테이션 등을 사용해 자동화할 수 있었지만, 최신 버전에서는 필터링 로직 구현하는 방식이 권장된다. 이번에는 간단하게 보여주기 위해 프로젝트 일부를 잘라오면서, 단순하게 구현을 하도록 하겠다. 소..
2025.07.27 -
[Spring] 트러블 슈팅 @RequestParam name없으면 생기는 문제
개요과제를 진행을 하면서 공부하는 환경을 바꿔야겠다는 생각이 들어서 사무실로 옮기게 되었다. MainPC를 사무실로 옮기고, Mini PC로 셋팅을 바꾸었다. 그러면서 생긴 문제가 있는데 똑같은 프로젝트가 각 다른 PC환경에서 생기는 문제를 서술해보겠다. 원인@GetMapping("/todos")public ResponseEntity> getTodos( @RequestParam(name = "page", required = false, defaultValue = "1") int page, @RequestParam(name = "size", required = false, defaultValue = "10") int size, @RequestParam(name = "..
2025.03.21 -
[Spring] 테스트 코드를 작성을 해보자.
개요 GitHub - mixedsider/spring-advanced: [내배캠] 심화 주차 개인 과제[내배캠] 심화 주차 개인 과제. Contribute to mixedsider/spring-advanced development by creating an account on GitHub.github.com 내배캠의 Lv.6 도전과제로 테스트 커버리지를 채우는 과제 내용이 있었다.하면서 얻은 느낀점과 아쉬운점, 방법 등에 대해서 서술해보고자 한다. 테스트 코드란테스트 코드(Test code)는 소프트웨어의 기능과 동작을 테스트하는 데 사용되는 코드이다. 잘 작성된 테스트 코드는 예상치 못한 문제를 미리 발견을 하게 해주고, 코드 수정이 필요한 상황에서 유연하고 안정적인 대응을 할 수 있다.즉, 서비..
2025.02.27 -
[Spring] Filter와 Interceptor에 대해서 알아보고 사용해보자.
개요이번 과제에서 Spring Interceptor 를 사용을 하게 되면서 Spring 의 흐름은 어떻게 되는지 알게되어서 글을 남긴다. 기본 배경 가장 먼저 흐름에 대해서 알아야한다고 생각을 한다.스프링의 영역은 Dispatcher Servlet 부터 시작을 한다. 그 Spring MVC 에서 나오는 그 Dispatcher Servlet이 맞다. 그리고 Filter 부터 Controller 까지 같은 Servlet Request, Servlet Response 를 사용을 한다. 다음에 나오는 내용들 까지 전부 설명을 하면 좋겠지만, 오늘은 Filter 와 Interceptor의 차이까지만 알아보고자 한다. Filter vs Interceptor FilterInterceptor작동 위치Tomcat..
2025.02.26 -
[Spring] SimpleJdbcInsert로 컬럼 지정하기
개요이번 내배캠에서 과제로 일정 관리 앱을 만들면서 생겼던 트러블에 대해서 이야기를 해보자. 배경가장 먼저 데이터를 삽입을 할 때 자동으로 생성시간과 수정 시간에 대해서 자동으로 입력을 해주는 방법에 대해서 찾아보았다. CREATE TABLE schedule ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '스케줄 ID', todo VARCHAR(200) NOT NULL COMMENT '할일', author VARCHAR(50) NOT NULL COMMENT '작성자', password VARCHAR(15) NOT NULL COMMENT '비밀번호', createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMM..
2025.02.04