[SpringBoot] 회원 서비스 구현하기 (2) - UserJoinRequestDto , UserController , UserService

구민지·2023년 11월 14일
0
post-thumbnail

☁️ 토이 프로젝트 개발일지

개발동아리에서 토이 프로젝트로 회원가입, 회원정보 변경, 회원탈퇴 등의 기능을 담당하게 되었다! 내가 담당한 부분을 개발한 기록을 해보려고 한다 😀

✨ 담당한 기능

  1. 회원가입
  2. 이메일 중복확인
  3. 닉네임 중복확인
  4. 비밀번호 암호화
  5. 닉네임 변경
  6. 전화번호 변경
  7. 비밀번호 변경
  8. 회원 탈퇴

🌲UserJoinRequestDto


import com.gdsc_teamb.servertoyproject.domain.user.domain.UserEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@Getter
public class UserJoinRequestDto {

    private String email;
    private String password;
    private String nickname;
    private String phone;

    @Builder
    public UserJoinRequestDto(String email,String password,String nickname,String phone){
        this.email=email;
        this.password=password;
        this.nickname=nickname;
        this.phone=phone;
    }

    public UserEntity toEntity(){
        return UserEntity.builder()
                .email(email)
                .password(password)
                .nickname(nickname)
                .phone(phone)
                .build();
    }
}

회원가입 시 가입할 유저는 email, password, nickname, phone 등의 데이터를 담아서 전달해야한다. 이때 필요한 dto 파일을 만들어준다.

🌲 UserController

import com.gdsc_teamb.servertoyproject.service.UserService;
import com.gdsc_teamb.servertoyproject.web.dto.UpdatePasswordDto;
import com.gdsc_teamb.servertoyproject.web.dto.UserJoinRequestDto;
import com.gdsc_teamb.servertoyproject.web.dto.UserUpdateRequestDto;
import com.gdsc_teamb.servertoyproject.web.dto.UserWithdrawDto;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RequiredArgsConstructor
@RestController
public class UserController {

    private final UserService userService;

    // 회원가입
    @PostMapping("/api/v1/user/join")
    public ResponseEntity<String> join(@RequestBody UserJoinRequestDto dto) throws Exception {
        userService.join(dto.getEmail(), dto.getNickname(), dto.getPassword(), dto.getPhone());
        return ResponseEntity.ok().body("회원가입 성공");
    };

}

UserService를 주입하고 UserService에서 회원가입 기능인 join에 dto로 받은 email, nickname, password, phone등의 데이터를 전달한다.사용자의 가입이 성공적으로 이루어지면 HTTP 상태 코드 200(OK)와 함께 "회원가입 성공" 메시지를 응답으로 반환한다.

🌲 UserService

import com.gdsc_teamb.servertoyproject.domain.user.domain.UserEntity;
import com.gdsc_teamb.servertoyproject.domain.user.domain.UserRepository;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;


@RequiredArgsConstructor
@Service
public class UserService {

    private final UserRepository userRepository;

    public String join(String email,String nickname,String password,String phone){

        // email 중복 체크
        userRepository.findByEmail(email)
                .ifPresent(userEntity -> {
									throw new RuntimeException(email+" : 이미 존재하는 이메일입니다");
                });


        // nickname 중복 체크
        userRepository.findByNickname(nickname)
                .ifPresent(userEntity -> {
										throw new RuntimeException(nickname+" 은 이미 있습니다");
                });


        // 저장
        UserEntity user=UserEntity.builder()
                .email(email)
                .password(password)
                .nickname(nickname)
                .phone(phone)
                .build();

        userRepository.save(user);

        return "SUCCESS";
    }

}

UserService에서 회원가입 기능 join을 만들어놓은 부분이다.
UserRepository를 생성자주입으로 주입하고, 이전에 만들어놓은 findByNickname, findByEmail등으로 중복된 이메일이 있는지, 중복된 닉네임이 있는지 체크한다.

두 기능 모두 return타입을 Optional로 선언해놓았기 때문에 ifPresent 메서드로 만약 해당 닉네임, 이메일이 존재한다면 이미 해당 유저가 존재한다는 exception을 발생시킨다.

가입이 성공적으로 완료되었다면 "SUCCESS"라는 문자열을 return한다.

하지만 아직 비밀번호를 암호화하지 않았다!! SpringSecurity를 적용해서 비밀번호를 암호화하며 보안성을 높여야한다! 이 부분은 다음 포스트에서 다루도록 하겠다.

0개의 댓글