[MSA] 회원가입(2) - JPA 설정

yejin·2024년 11월 7일

MSA

목록 보기
11/36

회원가입 (사용자 추가)

JPA 설정

📌 JPA 설정 추가

  • pom.xml 의존성 추가
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • UserEntity.java 클래스 추가
package com.example.euserservice.jpa;

import jakarta.persistence.*;
import lombok.Data;

@Data
@Entity
@Table(name = "users")
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 50, unique = true)
    private String email;
    @Column(nullable = false, length = 50)
    private String name;
    @Column(nullable = false, unique = true)
    private String userId;
    @Column(nullable = false, unique = true)
    private String encryptPwd;
}

✅ 상세 설명

  • @Entity : JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수
    Entity 객체의 인스턴스 하나가 테이블의 하나의 레코드 값을 의미
  • @Table : 엔티티와 매핑할 테이블 지정
    클래스 이름과 테이블 이름이 다를 경우 JPA에게 테이블 이름을 알려주는 역할
  • @Id : 엔티티의 필드를 테이블의 기본 키(PK, Primary key)에 매핑하는 역할
  • @Column : 엔티티의 필드를 테이블의 칼럼에 매핑
  • @GeneratedValue : 즉 주키의 값을 위한 자동 생성 전략을 명시하는데 사용
    선택적 속성으로는 generatorstrategy가 있음
    generator : SequenceGenerator나 TableGenerator 어노테이션에서 명시된 주키 생성자를 재사용할 때 사용
    strategy : persistence provider가 엔티티의 주키를 사용할 때 사용해야 하는 주키생성 전략을 의미
    (🔗 출처: [JPA] @Id, @Column, @GeneratedValue, @Entity, @Table)
  • UserRepository.java 인터페이스 생성
package com.example.euserservice.jpa;

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<UserEntity, Long> {
	//내용없음
}

✅ 상세 설명
CrudRepository<UserEntity, Long>

  • CRUD 기능을 제공하는 인터페이스
  • org.springframework.data.repository
  • 인터페이스 Repository를 확장
  • CrudRepository <x,y> 에서 x는 Entity 클래스명, y는 PK의 타입 작성
    (🔗 출처: CrudRepository 와 JPARepository의 차이)
  • pom.xml 의존성 추가
<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>2.3.8</version>
</dependency>

✅ 상세 설명
modelMapper란?
하나의 클래스가 가지고 있는 정보를 다른 클래스로 변환 시켜줄 수 있는 Mapper 역할

  • UserServiceImpl.java 상세 코드 구현
package com.example.euserservice.service;

import com.example.euserservice.dto.UserDto;
import com.example.euserservice.jpa.UserEntity;
import com.example.euserservice.jpa.UserRepository;
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserRepository userRepository;

    @Override
    public UserDto createUser(UserDto userDto) {
        userDto.setUserId(UUID.randomUUID().toString());
        
        //클래스 변환 
        ModelMapper mapper = new ModelMapper();
        mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); 
        
        UserEntity userEntity = mapper.map(userDto, UserEntity.class); //변환 시작
        userEntity.setEncryptPwd("encrypted_password"); //구현 전이므로 default text 저장
        
        userRepository.save(userEntity);
        return null;
    }
}

✅ 상세 설명

  • mapper.getConfiguration().setMatchingStrategy()
    특정 매칭 전략을 입력해 주지 않고도 다른 매칭 전략을 사용할 수 있게끔 추가적인 매칭 전략을 제공
  • MatchingStrategies.STRICT
    1. 가장 엄격한 전략 (cf. 반대: MatchingStrategies.LOOSE)
    2. source와 destination의 타입과 필드명이 같을 때만 변환
    3. 의도하지 않은 매핑이 일어나는 것을 방지할 때 사용
profile
새싹 개발자

0개의 댓글