본문 바로가기
  • Coding & Book
Back-End/Springboot

[Spring boot] 간단한 회원가입 코드 구현해보기

by 루이3 2024. 3. 13.

이전 포스팅

https://loui3.tistory.com/207

 

[Spring boot] 간단한 회원가입 구현해보기

구현해 볼 것 오늘은 Spring Boot와 JWT(JSON Web Token)를 사용하여 간단한 회원가입 및 로그인 기능을 구현하는 방법에 대해 알아보겠습니다. 본 기능은 제가 스프링 시큐리티에 대해 더 많이 알아보기

loui3.tistory.com

 

구현해보기

Spring Boot를 사용하여 간단한 사용자 등록 시스템을 구현하는 방법을 상세히 살펴보겠습니다.

코드는 RegistrationController, UserDTO, User 엔터티, UserRepository로 구성되어 있습니다.

각 부분을 자세히 살펴보면서 어떻게 동작하는지 알아보겠습니다.

 

UserDTO: 데이터 전송을 위한 객체

  • UserDTO는 클라이언트로부터 전송된 사용자 등록 데이터를 저장하는 객체입니다. 
  • 아이디, 비밀번호, 생년월일, 닉네임, 프로필 사진 URL 등의 정보를 담고 있습니다.
  • 하지만 이번 구현에는 간단한 정보 등록이므로 DTO를 사용하지 않고 구현하겠습니다
import lombok.Data;

import java.time.LocalDate;

@Data
public class UserDTO {
    private String userid;
    private String password;
    private LocalDate birthdate;
    private String nickname;
    private String profilePictureUrl;
}

 

 

User Entity: 사용자 정보를 담는 모델 클래스

  • 엔터티는 JPA를 사용하여 데이터베이스에 저장되는 사용자 정보를 표현합니다. 
  • 각 필드에는 사용자의 아이디, 비밀번호, 생년월일, 닉네임, 프로필 사진 URL을 나타냅니다.

자세한 설명

 

  • @Table(name = "user5")  -> 테이블 이름은 user5로 하겠습니다.
  • @GeneratedValue(strategy = GenerationType.IDENTITY) -> PK값을 자동으로 지정하는 어노테이션입니다.
    (특히 데이테베이스에서 자동 증가되는 컬럼에 사용됩니다.)
import jakarta.persistence.*;
import lombok.Data;

import java.time.LocalDate;

@Entity
@Data
@Table(name = "user5")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    private String userid; // 아이디

    @Column
    private String password; // 비밀번호

    @Column
    private LocalDate birthdate; // 생년월일

    @Column
    private String nickname; // 닉네임

    @Column
    private String profilePictureUrl; // 프로필 사진 URL

    // Getter, Setter, 생성자 등은 @Data로!


}

 

 

 

RegistrationController: 사용자 등록을 처리하는 컨트롤러

  • Spring MVC에서 사용자 등록을 처리하는 컨트롤러로, 클라이언트로부터 전송된 사용자 정보를 받아와
     JPA를 통해 데이터베이스에 저장하는 역할을 담당합니다.

자세한 설명

 

1. 엔드포인트

  • @RestController: 이 클래스가 컨트롤러임을 선언하며, 각 메서드의 반환 값은 HTTP 응답으로 처리됩니다.

2. 의존성 주입

  • UserService를 @Autowired 어노테이션을 통해 주입받습니다. 
  • 이는 사용자 등록과 관련된 비즈니스 로직을 처리하기 위해 필요한 서비스입니다.

3.사용자 등록 요청 처리

  • registerUser 메서드는 클라이언트로부터 받은 사용자 데이터를 처리합니다.
  • UserDTO를 통해 전송된 데이터를 추출하고, 이를 기반으로 신규 사용자를 등록합니다.

4. 중복 아이디 체크

  • userService.isUseridExists(id)를(만들예정) 호출하여 사용자가 입력한 아이디가 이미 존재하는지 여부를 확인합니다
  • 만약 이미 존재한다면 중복된 아이디로 간주하고 적절한 응답을 반환합니다.

5.사용자 등록

  • userService.registerUser를 호출하여 사용자를 등록합니다.
    등록이 성공하면 성공 메시지를 반환합니다.
    만료된 키 등의 이유로 등록에 실패하면 실패 메시지를 반환합니다.
@RestController
public class RegistrationController {
    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public ResponseEntity<String> registerUser(@RequestBody UserDTO userDTO) {
        String id = userDTO.getUserid();
        String password = userDTO.getPassword();
        LocalDate birthdate = userDTO.getBirthdate();
        String fullName = userDTO.getNickname();
        String profilePictureUrl = userDTO.getProfilePictureUrl();

        try {
            // userid가 이미 존재하는지 확인
            if (userService.isUseridExists(id)) {
                return ResponseEntity.status(HttpStatus.CONFLICT).body("이미 존재하는 UserID입니다.");
            }

            User registeredUser = userService.registerUser(id, password, birthdate, fullName, profilePictureUrl);

            if (registeredUser != null) {
                return ResponseEntity.ok("정상적으로 회원가입 되었습니다.");
            } else {
                return ResponseEntity.status(HttpStatus.CONFLICT).body("만료된 키입니다.");
            }
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("서버 오류가 발생했습니다.");
        }
    }
}

 

 

 

 

 

오늘은 엔터티, DTO, 그리고 컨트롤러까지 살펴보았습니다. 
그 다음 포스팅에서는 프로젝트의 핵심 부분에 해당하는 리파지토리와 서비스 계층을 자세히 살펴보겠습니다.

 

 


주의사항

데이터베이스에 따라 @GeneratedValue(strategy = GenerationType.IDENTITY)
위 코드의 지원 여부가 다를 수 있습니다.

또한 일부 데이터베이스에서는 자동 증가 기능을 지원하지 않을 수 있으니 주의해주시길 바랍니다.