java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)’
⇒ ControllerAdviceBean 클래스의 생성자가 현재 런타임에서 누락됐다는 의미로 Spring Framework 내부 버전 충돌이거나 의존성 캐시 문제일 가능성이 높다.
해결방법
의존성 충돌 여부
//cmd에서의 실행
gradlew.bat dependencies --configuration runtimeClasspath
=> 실행 결과
org.springframework.boot:spring-boot-devtools ->
3.5.4
| +--- org.springframework.boot:spring-boot:3.5.4
| | +--- org.springframework:spring-core:6.2.9
| | | \\--- org.springframework:spring-jcl:6.2.9
| | \\--- org.springframework:spring-context:6.2.9
| | +--- org.springframework:spring-aop:6.2.9
| | | +--- org.springframework:spring-beans:6.2.9
| | | | \\--- org.springframework:spring-core:6.2.9 (*) ...
⇒ 결과적으로 의존성 충돌은 아님
Spring Boot가 관리하는 공식버전
⇒ 위 결과로 모든 spring-* 모듈이 동일하게 6.2.9로 통일되어있음
IDE가 예전 클래스 참조
⇒ Restart 함
⇒ 결과적으로 성공
: IntelliJ가 자체적으로 index/cache에 오래된 ControllerAdviceBean 클래스 메타데이터를 가지고 있었기 때문이다.
The signing key's size is 376 bits which is not secure enough for the HS512 algorithm.
// HS512 => 최소 512비트 이상의 키를 요구
=> 현재 사용중인 secret key는 376비트 = 47바이트 이고 HS512는 최소 512비트 = 64바이트이니깐 문자열을 더 길게 설정
에러 코드 / 예외명 | 문제 원인 | 해결법 |
---|---|---|
MethodArgumentNotValidException |
클라이언트가 보낸 JSON 데이터가 DTO 필드와 매핑되지 않음. 특히 @NotBlank , @NotEmpty 어노테이션으로 검증되는 필드가 null 또는 빈 값임. |
- JSON 요청 Body 필드명과 DTO 필드명 일치 여부 확인- 필수 필드(shippingAddress , orderItems )가 누락되지 않도록 클라이언트 요청 수정- 컨트롤러에 @Valid 어노테이션 추가 확인 |
주문 생성 시 orderItems 가 null |
JSON 필드명이 DTO 필드명과 다르거나, JSON 구조가 맞지 않아 바인딩 실패 | - JSON 예시: orderItems 배열 형태로 정확히 보내기- DTO 내 List<OrderItemRequest> 타입과 일치시키기 |
주문 데이터가 DB에 저장되지 않음 | 양방향 연관관계에서 OrderItem 쪽에 order 객체가 할당되지 않아 JPA가 연관 엔티티를 저장 못함 |
- OrderItem 생성 시 orderItem.setOrder(order) 명시적으로 호출하여 연관관계 주인 설정- CascadeType.ALL 설정 확인 |
IllegalArgumentException: Name for argument... |
스프링이 메서드 파라미터 이름을 리플렉션으로 찾지 못함 (컴파일 시 -parameters 옵션 누락) |
- @RequestParam(name="status") 처럼 명시적으로 파라미터 이름 지정- 또는 컴파일 시 -parameters 옵션 활성화 |
CustomException: 주문을 찾을 수 없습니다 |
DB에 해당 주문 ID가 없거나, 로그인 사용자와 주문의 사용자 매칭이 실패 | - OrderRepository.findByIdAndUser(orderId, user) 에서 사용자 일치 여부 확인- DB에 주문 데이터 존재 여부 확인 |
JWT 인증 실패 및 Swagger 토큰 미입력 | Swagger에 SecurityScheme가 제대로 등록되지 않거나, API 요청 시 Authorization 헤더를 전달하지 않음 |
- Swagger Config에서 JWT Bearer Token Scheme 등록 확인- Swagger UI에서 토큰 입력 후 API 테스트 |
CascadeType 누락으로 연관 엔티티 저장 실패 | Order 저장 시 orderItems 가 자동 저장되지 않고 누락됨 |
- Order 엔티티의 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) 확인 |
재고 수량 부족 에러 (INSUFFICIENT_STOCK ) |
주문 수량이 상품 재고보다 많음 | - 상품 재고 확인 로직 추가- 재고 부족 시 적절한 예외 반환 및 프론트엔드 알림 |
주문 취소 시 재고 복원 실패 | 주문 취소 로직에서 상품 재고를 원복하지 않음 | - 주문 취소 시 product.setStock(product.getStock() + item.getQuantity()) 반드시 호출 |