회원제 서비스를 구현하게 될 때 무심코 모든 회원의 정보를 하나의 테이블에 넣는 경우가 있습니다.

(물론 취향의 차이로 존중해줄 수 있습니다.ㅎㅎ)

이 상태에서 만약 DB가 해킹된다면?

회원 정보를 담은 테이블을 읽으면 김명준의 본명과 주소지를 알아낼 수도 있습니다.

이를 예방하기 위해서 DB에 넣을 때 소중한 정보를 암호화하여 넣어줄 수 있습니다.

그렇게 암호화된 정보를 DB에 저장할 시 ,

DB 를 해킹하더라도 암호키를 알지 못한다면, DB에서는 알 수 없는 값이 보여지기 때문에 개인정보를 알아내기 어렵습니다.


그럼 다시, 회원의 모든 정보를 암호화해서 넣어줘야 할까?

물론 모든 정보에 대해 암호화하여 관리하면 더 안전할 겁니다.

그러나 자주 사용되고 중요하지 않은 공개될 수 있는 (공개 게시물 제목, 내용과 같은)데이터라면, 빠르게 넣고 뺄 수 있도록 본래 값을 DB에 넣고 민감한 정보는 암호화해서 넣는 것이 더 좋다고 생각합니다.

그렇기에 암호화해야 할 데이터와 암호화 하지 않아도 되는 데이터를 분리해서 DB에 넣고 빼면 좋지 않을까요?

예시로 Member에 대한 Entity 를 아래와 같이 분리할 수 있다고 생각합니다.

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Entity
public class Member extends BaseEntity {
    @Column(name = "login_id", nullable = false)
    private String loginId;

    @Column(name = "password", nullable = false)
    private String password;

    @Getter
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_info_id", referencedColumnName = "id", nullable = false)
    private MemberInfo memberInfo;

		// ... 
}

OneToOne으로 연결된 MemberInfo