본문 바로가기

Spring/boot

JPA 사용 시 암호화 복호화 적용하기 : ColumnTransformer

반응형

실무에서 DB 테이블에서 일부 컬럼에 암호화된 정보가 저장되고, 화면에 리턴 해줄때 복호화되어 뿌려줘야하는 로직을 담당하게 되었습니다.

 

기존 Mybatis를 사용할 때는 MySQL의 Function을 이용하여 아래와 같이 이용하였습니다.

INSERT INTO test_table(plain_text, encrypt_text)
VALUES ("abc", encrypt_function("abc");
SELECT
	plain_text,
	decrypt_function(encrypt_text)
FROM test_table;

 

JPA에서도 동일한 결과를 기대하였지만 dirty checking이 발생하여 암호화된 데이터를 불러온 후 복호화를 하게 되면 복호화된 데이터가 저장되게 되었고 다음 로직부터 오류가 발생하여 이를 해결하기위해 수많은 질문과 검색을 통해 얻은 결과로 해결하게되었습니다.

 

 

암호화, 복호화가 필요한 테이블 Entity 컬럼 필드에 @ColumnTransformer 어노테이션을 사용하면 됩니다.

@Data
@Entity
@NoArgsConstructor
@Table(name = "test_table")
public class TestTable {
--
# 생략
--
    @Column(name="encrypt_text")
    @ColumnTransformer(
            read = "decrypt_function(encrypt_text)",
            write = "encrypt_function(?)"
    )
    private String encryptText;
}

 

반응형

'Spring > boot' 카테고리의 다른 글

Spring boot log 파일을 AWS S3에 자동으로 업로드 시키기  (1) 2024.01.31
Junit VM Options  (0) 2022.08.23
Jasypt를 이용한 암호화  (0) 2022.08.16