Backend/Spring(14)
-
[Spring] @Valid 와 @Validated 의 사용 방법
개요프로젝트를 진행을 하면서 Code Rabbit 이 프로젝트에서 지적을 해준 부분이 @Validated에 대해서 지적을 해주었다.이번 기회에 @Valid와 @Validated에 대해서 자세하게 비교를 해보고자 한다. @Valid와 @Validated의 단순 비교 어노테이션클래스 레벨 (@RestController 등)파라미터 레벨 (@RequestBody 등)@Validated(O) 동작함: 클래스 내 메소드의 개별 파라미터(@RequestParam 등) 검증 기능을 활성화시킴.(O) 동작함: DTO 검증 + 그룹 기능 사용 가능.@Valid(X) 동작 안 함: 아무런 효과 없음.(O) 동작함: DTO에 대한 기본 유효성 검사 수행 (그룹 기능 없음). 단순한 비교는 이러하다이제 예시를 보면서 사용 방..
2025.09.02 -
[Spring] @JsonCreator 와 @JsonProperty 을 사용해야하나?
개요프로젝트 중 RequestDto 에 @RequiredArgsConstructor 을 사용하고 있었다. Code Rabbit 이 Request DTO 문제를 지적을 하면서"Lombok의 @RequiredArgsConstructor로 만든 생성자는 Jackson(JSON 라이브러리)이 인식하지 못할 수 있으니, Jackson이 확실하게 알아볼 수 있도록 @JsonCreator와 @JsonProperty를 사용한 명시적인 생성자를 만들어야 합니다." 하지만 로컬 환경에서는 API 가 동작이 잘되었고, 실제 테스트 시 문제가 없었다. 재미니에게 물어보니"동작이 잘 되는데, 왜 이런 지적이 맞을까요?"이것이 가장 중요한 포인트입니다. 사용자님께서 "로컬에서 테스트해보니 잘 동작했다"고 생각하시는 것은 매우 자..
2025.08.28 -
[Spring] 분산락에서 발생하는 레이스 컨디션을 해결..?.part1
개요프로젝트에서 동시성 제어를 mvp를 만들면서 생긴 레이스 컨디션에 대한 이야기를 정리를 해보려고 한다. 소스 코드@Transactionalpublic void payment(/*Long userId, */Long bookId) { Book book; RLock lock = redissonClient.getFairLock("book:"+bookId); try { boolean acquired = lock.tryLock(10L, 1L, TimeUnit.SECONDS); if (!acquired) { throw new InterruptedException(); } book = bookRepository.findById(bookId).orElseThrow( () -> new NotFoundE..
2025.04.03 -
[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] OutSourcing 프로젝트를 마치며..
개요 GitHub - chickenSAJO/outsourcing: [내배캠] 아웃소싱 프로젝트[내배캠] 아웃소싱 프로젝트. Contribute to chickenSAJO/outsourcing development by creating an account on GitHub.github.com 이번 내배캠에서 OutSourcing 프로젝트를 진행을 하며느낀점에 대해서 정리를 하고자 한다. 느낀 점이번 프로젝트를 진행을 하면서 좋았던 점은 3가지이다.좋았던 점코드 컨베이션, 커밋 컨베이션을 맞추며 진짜 협업을 진행한 점코드의 결합도를 다른 모듈을 신경을 쓰지 않더라도 개발이 된 점JWT access token, refresh token 을 적용점아쉬운 점다른 프로젝트 팀과 비교를 했을 때, 더 많은 외..
2025.03.07 -
[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