ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 31일차

ssungcohol 2023. 3. 7. 03:21

클론코딩..

 

회원가입, 로그인 기능 구현완료

 

고민했던 부분은, 다른 회원가입 페이지와는 달리

 

이메일과 비밀번호를 입력 후 가입을 하면, 개인정보(마이페이지)와 같은 페이지로 바로 넘어가 추가 정보를 입력하는

페이지(onboarding)로 넘어가게 되어있었다.

 

이때, 내가 고민을 한 부분은 회원가입을 한 이메일과 추가정보를 어떻게 매칭시켜줘야 하는 것인가에 대한 고민이었다.

 

처음에는 엔티티를 2개로 나눠 연관관계 매핑을 통해 회원정보를 DB에 저장하려고 하였다.

 

하지만, 회원 정보와 이메일을 매칭하기는 너무 어려웠고, 기술매니저님에게 피드백 받은 방법은

 

Entity를 하나로 하여, 회원가입 시에는 이메일과 비밀번호만 받고, 추가정보 페이지에서는 update를 통해 추가정보를 DB에 입력하는 것이었다.

 

이 방법을 왜 생각하지 못했을까?

 

하지만, 이때도 내가 고민을 했던 이유는 회원가입 후 해당 회원의 이메일을 어떻게 다시 받아와야 할까 하는 고민이었다.

 

내가 생각한 방법은, 회원가입 시에 작성했던 이메일을 body에 담아 프론트에게 넘겨주고 그 정보를 다시 프론트에서 받아오는 방법을 생각했다.

 

해당코드를 작성 후 포스트맨 테스트까지에는 성공했다. 하지만, 이 방법이 과연 맞는가? 에 대한 의문이 생겼다. 이유는 회원의 이메일 정보를 프론트로 돌려주는 과정에 있었다.

 

회원의 정보인데, 이것을 프론트로 보냈다가 다시 받는 과정에서 탈취를 당할 수 있을 것 같다라는 생각이 들었기 때문이다.

 

이 부분에 대해서는, 기술 매니저님께 자문을 구해봐야 할 것 같다.

 

회원 가입 Controller (signupRequestDto 를 통해 받은 email을 다시 프론트로 body에 담아 보내줌)

    @PostMapping("/auth/signup")
    public ResponseEntity<?> signup(@RequestBody SignupRequestDto signupRequestDto) {
        memberService.signup(signupRequestDto);
        return ResponseEntity.status(HttpStatus.OK).body(signupRequestDto.getEmail());
    }

회원의 추가 정보를 받는 Controller (onboardingRequestDto를 통해 추가 정보들을 받아옴)

    @PutMapping("/auth/onboarding")
    public ResponseEntity<?> onboarding(@RequestBody OnboardingRequestDto onboardingRequestDto, HttpServletRequest request) {
        memberService.onboarding(onboardingRequestDto, request);
        return ResponseEntity.status(HttpStatus.OK).build();
    }

 

받아온 추가 정보를 Service에서 DB 데이터와 비교하고 이를 통해, 회원의 추가 정보 update

    @Transactional
    public void onboarding(OnboardingRequestDto onboardingRequestDto, HttpServletRequest request) {
        String firstName = onboardingRequestDto.getFirstName();
        String lastName = onboardingRequestDto.getLastName();
        String userName = onboardingRequestDto.getUserName();
        String profilePic = onboardingRequestDto.getProfilePic();
        String email = onboardingRequestDto.getEmail();
 		Member member = (Member) memberRepository.findMemberByEmail(email).orElseThrow(
                 () -> new IllegalArgumentException("email이 존재하지 않습니다.")
         );

         member.update(firstName, lastName, userName, profilePic, email);
    }

회원가입 서비스 구현 땡~

728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

spring - 33일차  (0) 2023.03.09
spring - 32일차  (0) 2023.03.07
spring - 29일차  (0) 2023.03.04
spring - 28일차  (0) 2023.03.04
spring - 27일차  (0) 2023.03.03