반응형
실무에서 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 |