이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.
- kr.spring.member.constant.java, enum클래스 생성
- 일반 유저 / 관리자
| package kr.spring.member.constant; |
| // 회원 역할 구분 enum 클래스 |
| public enum Role { |
| USER, ADMIN |
| } |
- 회원 가입 화면으로부터 넘어오는 가입정보를 담을 DTO 객체
| |
| implementation 'org.springframework.boot:spring-boot-starter-validation:3.0.1' |
| package kr.spring.member.dto; |
| |
| import jakarta.validation.constraints.Email; |
| import jakarta.validation.constraints.NotBlank; |
| import jakarta.validation.constraints.NotEmpty; |
| import lombok.Getter; |
| import lombok.Setter; |
| import lombok.ToString; |
| import org.hibernate.validator.constraints.Length; |
| |
| @Getter |
| @Setter |
| @ToString |
| public class MemberFormDto { |
| |
| @NotBlank(message = "이름은 필수 항목입니다.") |
| private String name; |
| |
| @NotEmpty(message = "이메일은 필수 항목입니다.") |
| @Email(message = "이메일 형식으로 입력하세요.") |
| private String email; |
| |
| @NotEmpty(message = "비밀번호는 필수 항목입니다.") |
| @Length(min = 4, max = 12, message = "최소 4자, 최대 12자를 입력하세요.") |
| private String password; |
| |
| @NotEmpty(message = "주소는 필수 항목입니다.") |
| private String address; |
| |
| } |
- 회원 정보를 저장하는 Member Entity(Model) 생성
- Member 객체를 생성하기 위해 Member 객체 안에 createMember() static 메소드 생성
| package kr.spring.member.entity; |
| |
| import jakarta.persistence.*; |
| import kr.spring.member.constant.Role; |
| import kr.spring.member.dto.MemberFormDto; |
| import kr.spring.utils.entity.BaseEntity; |
| import lombok.*; |
| import org.springframework.security.crypto.password.PasswordEncoder; |
| |
| @Entity |
| @Getter |
| @Setter |
| @ToString |
| @NoArgsConstructor |
| @AllArgsConstructor |
| public class Member extends BaseEntity { |
| |
| @Id |
| @GeneratedValue(strategy = GenerationType.IDENTITY) |
| @Column(name = "member_id") |
| private Long id; |
| |
| private String name; |
| |
| @Column(unique = true) |
| private String email; |
| private String password; |
| private String address; |
| |
| @Enumerated(EnumType.STRING) |
| private Role role; |
| |
| |
| public static Member createMember(MemberFormDto memberFormDto, PasswordEncoder passwordEncoder) { |
| |
| Member member = new Member(); |
| member.setName(memberFormDto.getName()); |
| member.setEmail(memberFormDto.getEmail()); |
| member.setAddress(memberFormDto.getAddress()); |
| member.setRole(Role.USER); |
| |
| String password = passwordEncoder.encode(memberFormDto.getPassword()); |
| member.setPassword(password); |
| |
| |
| return member; |
| } |
| } |
- 회원가입 시 중복 여부를 판단하기 위해서 이메일로 회원을 검사하도록 쿼리 메소드 작성
| package kr.spring.member.repository; |
| |
| import kr.spring.member.entity.Member; |
| import org.springframework.data.jpa.repository.JpaRepository; |
| |
| |
| |
| public interface MemberRepository extends JpaRepository<Member, Long> { |
| |
| |
| |
| |
| |
| Member findByEmail(String email); |
| |
| } |
- @RequiredArgsConstructor를 사용하여 memberRepository DI
| package kr.spring.member.service; |
| |
| import kr.spring.member.entity.Member; |
| import kr.spring.member.repository.MemberRepository; |
| import lombok.RequiredArgsConstructor; |
| import lombok.extern.log4j.Log4j2; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.security.core.userdetails.User; |
| import org.springframework.security.core.userdetails.UserDetails; |
| import org.springframework.security.core.userdetails.UserDetailsService; |
| import org.springframework.security.core.userdetails.UsernameNotFoundException; |
| import org.springframework.stereotype.Service; |
| import org.springframework.transaction.annotation.Transactional; |
| |
| |
| @Service |
| @Transactional |
| @Log4j2 |
| |
| |
| @RequiredArgsConstructor |
| public class MemberService implements UserDetailsService { |
| |
| private final MemberRepository memberRepository; |
| |
| public Member saveMember(Member member) { |
| |
| validateDuplicate(member); |
| |
| return memberRepository.save(member); |
| } |
| |
| private void validateDuplicate(Member member) { |
| |
| Member findMember = memberRepository.findByEmail(member.getEmail()); |
| |
| if(findMember != null) { |
| throw new IllegalStateException("이미 등록된 사용자 입니다."); |
| } |
| |
| } |
| } |