Home > Spring > TICKET-EXPEDITIONARY-FORCE > 엔티티 설정

엔티티 설정
spring JPA entity TICKET-EXPEDITIONARY-FORCE

고민


과연 Account 객체를 생성할 때 필요한 column명을 찾아서 적어봤다.


Account

@Getter
@Builder
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Account {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="account_id")
    private Long id;

    @NotEmpty
    @Column(unique = true)
    private String publicIp;

    @Column(unique = true)
    private String loginId;

    @NotEmpty
    private String password;

    private String name;

    @Column(unique = true)
    private String nickname;

    @Column(unique = true)
    private String email;

    @Lob
    private String profileImage;

    private LocalDateTime createDate;

    private LocalDateTime modifyDate;

    @Enumerated(EnumType.STRING)
    private Role role;

}

##주요 어노테이션

일단 DB Diagram을 그려야 하는데 아직 모여서 정확하게 테이블 컬럼들을 정리하지 않아
내가 블로그에서 봤던 기준으로 간단하게 Account를 정의해봤다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

전적으로 db에게 기본키 생성을 위임한다. (아직 db쪽이 약해서 설명을 자세하게 쓰지 못했는데
좀더 알아보고 수정해서 적어봐야겠다.)

@Lob

Lob은 Large Obejct란 뜻으로 프로필사진같은 경우 데이터가 크기 때문에 지정하는 것도 있고
데이터를 안정성 때문이다. -> 만약 이미지 경로로 지정해놨을 때 실수로 이미지 경로의 파일들이
사라지는 경우 이미지파일을 찾을 수 없게되기 때문이다.

@Enumerated(EnumType.String)

Entity에선 enum을 db에 저장할 땐 default로 EnumType.ORIGINAL로 지정되있다. 이때 ORIGINAL로 저장하면
DB에 순서 enum의 순서를 정수로 저장하는데 이는 나중에 db를 볼때 1, 2, 3 등등으로 저장되기에
식별하기가 어려워 enum의 이름을 직접 저장하도록 string을 사용했다.


내 생각

일단 기본적으로 내가 아는 것들에 대해서 써놓았고 팀원들과 코드리뷰를 통해 Ticket이나 다른 테이블들의
컬럼과 연관관계를 짓는 작업을 진행해야겠다.