스프링 미니 프로젝트 - JPA로 간단한 회원가입 기능 구현

Zyoon·2025년 5월 21일

미니프로젝트

목록 보기
8/35
post-thumbnail

📘JPA 사용하여 기본적인 회원가입 기능 구현


0. 초기세팅

📗JPA 초기세팅 및 기본 메서드

1. Entity

  • 우선 DB 정보를 담을 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;

2. DTO

  • 계층간의 데이터 교환을 위한 객체 생성
  • 한번 값이 들어오면 바꿀 수 없도록 하기 위해 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;
    }
}

3. Repository

  • 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> {
}

4. Service

  • @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);
	}
}

5. Controller

  • 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);
    }
}

6. Client

  • PostMan을 통해 데이터를 보내준다.
  • 요청 성공 시, 201 Created 메세지가 표시되고 DB에 정보가 저장되게 된다.

  • 요청 데이터 형식
URL 예시 : (POST)localhost:8080/users/signup

body 예시
{
    "username" : "myName",
    "email" : "myEmaildd@gogle.com",
    "password" : "password123!"
}
  • DB정보

profile
기어 올라가는 개발

0개의 댓글