본문 바로가기

BackEnd/Spring, SpringBoot

[SpringBoot/JPA]웹 서비스 구현 - 1) 엔티티

- 본 " [SpringBoot/JPA]웹 서비스 구현 " 시리즈는 인프런 백기선님의 [ 스프링/JPA기반 웹 어플리케이션 개발 ] 강의를 수강하며 기록한 내용입니다                      

스프링 프로젝트는 진행해본 경험이 있습니다만 스프링 부트로는 프로젝트 개발을 진행해본 적이 없기에
새로접하는 내용들이나 기록해둘만한 중요한 내용을 찾아보고 기록해나가려 합니다
(프로젝트를 온전히 따라하기에 필요한 모든 설명을 담지는 않습니다)

해당 프로젝트는 스터디관리 서비스로 회원이 스터디를 개최하거나 참여할수있게 해주는 서비스를 구현합니다.


  • 개발환경

    • IntelliJ
    • Java11
    • maven
    • Springboot 2.4.5
    • mysql
  • Dependencies

    • Spring Web MVC
    • Spring Security
    • Spring Data JPA
    • Spring Mail
    • Spring Boot Devtools
    • QueryDSL
    • tymeleaf

  • Account Entity : 회원의 기본정보 및 가입을 위한 정보를 포함하는 엔티티
@Entity
@Getter @Setter @EqualsAndHashCode(of = "id")
@Builder @AllArgsConstructor @NoArgsConstructor
public class Account {

    @Id @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String email;

    @Column(unique = true)
    private String nickname;

    private String password;

    private boolean emailVerified;  //이메일 인증여부

    private String emailCheckToken; //이메일 인증시 사용되는 토큰값

    private LocalDateTime joinedAt;

    //프로필 정보
    private String bio; //자기소개

    private String url; //블로그, github

    private String occupation;

    private String location;    

    @Lob                            
    @Basic(fetch = FetchType.EAGER) 
    private String profileImage;

    //알림설정관련
    private boolean studyCreatedByEmail;

    private boolean studyCreatedByWeb;

    private boolean studyEnrollmentResultByEmail;

    private boolean studyEnrollmentResultByWeb;

    private boolean studyUpdatedByEmail;

    private boolean studyUpdatedByWeb;

    public void generateEmailCheckToken() {
        this.emailCheckToken = UUID.randomUUID().toString();
    }

}

 

  • @EqualsAndHashCode(of = id)
    • equals와 hashcode를 자동으로 생성해주는 어노테이션이다
    • 기본적으로 equals는 내용이 같은지, hashcode는 같은 인스턴스인지를 비교해준다
    • (of ="id") 옵션 사용시 두개의 Account 인스턴스를 할때 id만을 사용해 비교해주며 같은 id일 경우 같은
      hashcode값을 갖게 해준다. 또한 연관 관계가 복잡해 질 시 컬럼들의 서로 다른 연관관계를 순환참조하여
      무한루프가 발생하는 경우를 막아주기위해 일반적으로 (of="id")옵션을 사용한다
  • @Lob
    • Large Object의 줄임말로서 필드의 기본 길이(default : varchar(255)) 이상의 값을 지정할 수 있게된다
    • 이미지를 db에 byte로 변환하여 저장하는 등 긴 길이의 컬럼으로 사용되는 필드에 적용해준다
  • @Basic(fetch = FetchType.EAGER)
    • @Basic 어노테이션의 경우 
      1. 널 허용여부 2. 로딩설정 (EAGER(즉시), LAZY(사용될때) 두가지 목적으로 사용된다
    • @Basic의 속성은 JPA entity field에 적용되며 @Column 속성은 Database Column에 적용된다
  • UUID.randomUUID().toString()
    • 여기서는 회원의 이메일을 인증하기위해 랜덤키를 생성하는데 사용되었다
    • 32자리의 16진수 랜덤 문자열을 생성하고 StringType으로 사용한다
    • 리턴되는 String은 (8자리)-(4자리)-(4자리)-(4자리)-(12자리) 형식이다