java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)’

⇒ ControllerAdviceBean 클래스의 생성자가 현재 런타임에서 누락됐다는 의미로 Spring Framework 내부 버전 충돌이거나 의존성 캐시 문제일 가능성이 높다.

해결방법

  1. 의존성 충돌 여부

    //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 (*) ...
    

    ⇒ 결과적으로 의존성 충돌은 아님

  2. Spring Boot가 관리하는 공식버전

    ⇒ 위 결과로 모든 spring-* 모듈이 동일하게 6.2.9로 통일되어있음

  3. 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()) 반드시 호출