📘JPA 사용하여 기본적인 회원가입 기능 구현
Entity 클래스를 만들어준다@Entity, @Table 을 등록해준다.@Table 에 이름을 생략할 경우 기본적으로 클래스 이름이 테이블 명이 된다.@Id 는 이 테이블의 기본 키(Primary Key) 이며 Long 타입을 쓰는게 일반적이다.@getter, @setter 는 필요하다면 추가하면 된다.@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String username;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false)
private String password;
final 로 정해준다.@Valid 로 유효성 검사를 수행할 수 있다.@Getter
public class SignUpRequestDto {
private final String username;
private final String email;
private final String password;
public SignUpRequestDto(String username, String email, String password) {
this.username = username;
this.email = email;
this.password = password;
}
}
Repository 는 기본적으로 JpaRepository 를 상속한 인터페이스다. (DAO 역할)JpaRepository<User, Long> - User는 관리할 Entity 클래스이고, Long 은 기본 키(id) 타입이다.import com.calendardev.calendardevelop.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
@Service 컴포넌트 등록해준다.@RequiredArgsConstructor 어노테이션으로 final 필드에 대한 생성자를 자동 생성한다. (DI : 의존성 주입)Dto 를 User 객체에 담아준뒤, save() 메서드를 통해 객체가 영속성 컨텍스트에 저장된다.flush() 가 발생하며, 그 때 DB에 SQL 이 실행되게 된다.@Service
@RequiredArgsConstructor
public class UserService {
private final UserRepository userRepository;
@Transactional
public void signUp(SignUpRequestDto requestDto) {
User user = new User(requestDto.getUsername(), requestDto.getEmail(), encodedPassword);
userRepository.save(user);
}
}
RestContoller : 어노테이션으로 REST API 컨트롤러임을 명시해준다.@RequestMapping("/users") : 기본 URL 경로를 설정해준다.@PostMapping("/signup") : POST 방식의 HTTP 요청이다.@RequestBody : 클라이언트가 보내는 JSON 데이터를 객체로 바인딩한다.ResponseEntity 를 통해 객체 및 상태코드를 반환해준다.@RestController
@RequestMapping("/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PostMapping("/signup")
public ResponseEntity<Void> signUp(@RequestBody SignUpRequestDto requestDto){
userService.signUp(requestDto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
}
201 Created 메세지가 표시되고 DB에 정보가 저장되게 된다.
URL 예시 : (POST)localhost:8080/users/signup
body 예시
{
"username" : "myName",
"email" : "myEmaildd@gogle.com",
"password" : "password123!"
}
