본문 바로가기

Spring5

RequestDto에서 @NotBlank시 Error 발생 MemberCreateRequestDto에서 검증을 위해 @NotBlank 어노테이션 사용 @NotBlank(message = ValidationErrorMessage.MEMBER_ROLE_IS_NOT_NULL) MemberRole memberRole; 아래와 같이 Error 발생  이유@NotBlank 어노테이션은 ‘CharSequence’ 인터페이스를 구현한 String, StringBuilder 등에만 적용 되며 아래와 같은 오류가 발생한다.javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' valid.. 2025. 3. 27.
Spring Event - 최종 프로젝트 관련 내용 포함 Spring Event는 애플리케이션 내에 발생하는 이벤트를 기반으로 Component들을 서로 독립적으로 동작할 수 있게 해주는 이벤트 기반 처리 매커니즘 언제 사용?컴포넌트 간 느슨한 결합이 필요할 때ex) 회원가입 이메일/문자 발송 비동기작업 처리ex) 재고 업데이트, 대용량 데이터 처리와 같은 작업*카프카나 이런거에 도입을 한다하면 퍼블리셔랑 리스너만 카프카에 맞게 바꿔주면 됨 ApplicationEvent : 이벤트 객체public record UserSaveEvent(Long id, String userName) {} ApplicationEventPublisher : 이벤트를 발행하기 위해 사용하는 인터페이스 publishEvent() 메소드를 호출하여 ApplicationContext에 이벤.. 2025. 3. 27.
[Spring] ArgumentResolver란? + 유저 정보 넘겨주기 ArgumentResolver란?컨트롤러로 들어온 파라미터를 가공, 수정하기 위한 것이다.HandlerMethodArgumentResolver를 구현한다. 보통 여태까지의 코드들은 컨트롤러에서 유저아이디를 꺼내왔었지만 ArgumentResolver를 사용함으로써 이 코드들이 중복되는 것을 방지한다.(물론 @RequestAttribute Long userId를 파라미터로 해서 가져오는 방법도 존재한다, JwtFilter에서 setAttribute로 해주었기 때문.)  코드의 목적 : 컨트롤러에 AuthUser라는 내가 만든 객체, 내가 설정한 정보들을 Controller에 넘기고 싶다.AuthUserArgumentResolver에선AuthUser의 어노테이션이 제대로 사용되어 있는지 유효성을 검사하는 메소.. 2025. 1. 17.
[Spring] Spring Security - 필터를 Spring Security Filter로 갈아끼워보자! 1. SecurityConfig를 작성해준다.addFilterBefore 구문으로 jwtFilter가 SecurityContextHolderAwareRequestFilter보다 먼저 실행된다.jwtFilter에 /auth 로 시작하면 다음 필터로 이동하는데 이 설정대로 확인을 하게 된다.기존에 jwtFilter가 jwt토큰에서 역할을 뽑아 확인하던 내용들은 제거하고 SecurityContextHolderAwareRequestFilter에서 처리하도록 설정했다.@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http .csrf(AbstractHttpConfigu.. 2025. 1. 16.
[Spring-AOP]특정 api 로깅하기 - requestBody를 어떻게꺼내?? Admin 권한을 필요로 하는 API의 로그를 남기려고 한다.1. 요청 시각2. 요청 URL3. 요청 사용자 ID4. 요청 본문5. 응답 본문로그에 필요한 데이터는 이 5가지다. 다른 방법(Intercepter를 사용한다던가)이 있지만,메소드를 감싸는 형태로 실행되게끔 @Aspect어노테이션을 사용했다. (Aspect를 사용하는 Aspect-Oriented Programming은 다른 글에서 알아보도록 하자, 이곳에서는 메소드를 감싼다고 생각만 하면 충분히 로깅 기능을 구현할 수 있다.) 일단 첫번째로 어노테이션을 사용하려면 의존성을 추가해줘야된다.의존성을 추가해주고 intellij IDEA 기준으로 오른쪽 코끼리 모양의 새로고침을 해주면 의존성을 다시 빌드 해준다.implementation 'org.s.. 2025. 1. 3.