문서
딜리버리 암호화 모듈 개발기
강준영 · 컬리 · 컬리 기술 블로그
소개
딜리버리에서 사용하고있는 암호화모듈을 개발한 경험을 공유합니다.
AI 핵심 요약
새 배송 시스템에 필요한 애플리케이션 단 암·복호화, 키 관리, 엔티티 자동 변환을 구현하기 위해 자체 모듈 cowcow-enc를 개발했습니다. JPA @PostLoad는 복호화 후 dirty checking으로 조회만 해도 업데이트가 발생했고, Hibernate PreLoad는 Hibernate 6.x 호환성 문제를 겪어 최종적으로 필드별 JPA AttributeConverter를 선택했습니다. 암호키를 클라우드 마스터키로 보호하는 봉투 암호화를 적용하고, 헤더 최적화와 Base64 대신 바이너리 저장을 통해 보안 수준을 유지하면서 데이터 크기를 줄였습니다. 의존성을 최소화하고 무작위 엣지 케이스, 사용자 애플리케이션 환경, 성능을 검증한 모듈은 여러 딜리버리 서비스에서 사용되고 있습니다.
- JPA 엔티티의 자동 암·복호화는 구현 편의성뿐 아니라 dirty checking과 Hibernate 버전 호환성까지 고려해 선택해야 합니다.
- AttributeConverter를 사용하면 리플렉션 없이 필드별 처리가 가능하고, JPQL이나 QueryDSL의 일부 필드 조회에도 변환을 적용할 수 있습니다.
- 봉투 암호화는 데이터 암호화 키를 클라우드 마스터키로 보호하고 사용 후 폐기해, 키 관리 부담과 노출 범위를 줄입니다.
- 바이너리 컬럼을 활용하고 봉투 헤더를 최적화하면 Base64 오버헤드와 저장 크기를 줄일 수 있지만, 엣지 케이스 검증이 필요합니다.
- 모듈은 전이 의존성을 최소화하고, Property-based 테스트와 실제 애플리케이션 환경의 호환성·성능 테스트를 함께 수행하세요.