본문 바로가기

스프링

(5)
불필요한 객체 생성 막기 현재 이메일을 검증하는 기능은 ConstraintValidator를 구현한 EmailFormatValidator에서 수행하고 있다. 그리고 이메일 검증 메소드는 다음과 같이 구현되어 있다. @Component public class EmailFormatValidator implements ConstraintValidator { // ... private static boolean validateEmailAddress(Email email) { return !Pattern.matches(RegexConst.EMAIL_VALID_REGEX, email.getAddress()); } } 정규식으로 올바른 이메일인지 검증하기 위해서 Pattern.matches() 메소드를 사용하고 있는데, 해당 메소드의 코드는..
커스텀 ArgumentResolver를 구현하여 세션에 의존적인 파라미터 의존성 제거하기 문제 현재는 세션 로그인 방식을 사용하고 있다. 따라서 로그인된 사용자에 대한 정보를 가져오기 위해서는 세션에 저장된 사용자의 정보를 가져와야 했다. 세션에 저장된 사용자의 정보를 가져오기 위해 @SesseionAttribute 어노테이션을 사용하였다. @LoginCheck(authority = UserAuthority.USER) @PostMapping public ResponseEntity createAuthor( @RequestBody @Valid AuthorCreateRequest authorCreateRequest, @SessionAttribute(value = UserSessionUtil.LOGIN_MEMBER_ID, required = false) UserAuthDTO userAuth, Htt..
Spring에서 요청값 검증하기 웹툰 등록 API에서 요청값을 받을 때 정상적인 값이 받아졌는지 검증하는 로직이 필요했다. 우선 요청에는 다음과 같은 값들이 있다. comicName:[웹툰이름] genre:[장르] summary:[줄거리] publishDayOfWeek:[연재요일] thumbnailCreateRequests[0].thumbnailType:[썸네일종류] thumbnailCreateRequests[1].thumbnailType:[썸네일종류] thumbnailCreateRequests[0].thumbnailImage:[썸네일파일] thumbnailCreateRequests[1].thumbnailImage:[썸네일파일] 그리고 값들은 다음과 같은 제한을 가진다. comicName : 1~30자, 빈 값이면 안됨 genre : ..
Spring Events로 S3 업로드 문제 해결하기 웹툰 등록 시나리오 우선 웹툰을 등록할 때 시나리오는 다음과 같다. 문제 코드로 나타내면 다음과 같다. @Service @RequiredArgsConstructor public class ComicService { private final ComicRepository comicRepository; private final ThumbnailRepository thumbnailRepository; private final FileStorage fileStorage; @Transactional public void createComic(ComicCreateRequest comicCreateRequest, String loginId) { User user = getUser(loginId); Author auth..
@ModelAttribute의 중첩 프로퍼티 바인딩 프로젝트 중 @ModelAttribute로 바인딩하는 과정에서 생긴 문제가 있어 디버깅을 통해 원인을 파악하고 해결하였다. 문제 @RestController @RequestMapping("/comics") @RequiredArgsConstructor public class ComicController { @PostMapping public ResponseEntity createComic( ModelAttribute @Valid ComicCreateRequest comicCreateRequest ) { comicService.createComic(comicCreateRequest, userAuth.loginId()); return ResponseEntity.ok(null); } } 위와 같이 @ModelA..