side project/여행 서비스 플랫폼 (24.05~)

[project_refactoring](kts, java) Firebase와 miniO를 활용한 Google로그인 사용자 회원가입 진행하기

기록하는 습관. 2024. 6. 15. 16:40

프로젝트 기술

Kotlin, Java(jdk21), Spring Boot(3.2.5), Spring Security(6.2.4), Firebase, miniO



개요

사이드 프로젝트에서 Google 로그인 사용자의 서비스 회원가입을 구현했습니다.
코드리뷰를 거쳐 수정된 내용을 소개합니다.



STEP 1. Refactoring

리팩토링되기전 코드는 [project_feature](kts, java) Firebase와 miniO를 활용한 Google로그인 사용자 회원가입 진행하기에서 확인이 가능합니다.


STEP 1-1 @ModelAttribute => @RequsetPart 변경

  • AuthController.java
    @PostMapping(value = "/sign-up", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity signUp(@AuthenticationPrincipal Jwt jwt,
                                 @RequestPart SignUpRequestDto signUpRequestDto,
                                 @RequestPart(required = false) MultipartFile profileImage) {
        User user = authService.registerUser(jwt.getSubject(), signUpRequestDto, profileImage);
        return new ResponseEntity( userMapper.toSignUpResponseDto(user), HttpStatus.CREATED);
    }

AuthController의 signUp부분만 발췌했습니다. 가장 두드러지는 핵심 변경 사항으로는 요청받는 데이터를 처리하기 위해 사용되었던 @ModelAttribute에서 @RequestPart로 변경되었다는 점입니다.


HTTP 요청 header인 Content-Type이 multipart/form-data 요청에서 각각의 동작은 아래와 같습니다.
@ModelAttribute는 이미지를 포함하여 클라이언트에서 form태그에서 요청하는 데이터들을 하나의 자바 객체로 바인딩 할 때 사용할 수 있다고 이해할 수 있습니다. 하지만 @RequestPart를 사용하면 클러이언트에서 요청하는 form태그의 데이터 내용을 각각 필요한 객체로 바인딩하여 받을 수 있는 특징이 있습니다.


당연한 이야기지만 자주 사용하는 @RequestBody로 받는 경우는 HTTP 요청 header인 Content-Type이 application/json이어야합니다.