딜리버리 암호화 모듈 개발기
핵심 내용
딜리버리플랫폼개발팀이 Hibernate 6.x 호환성 문제 해결과 데이터 크기 절감을 위해 자체 암호화 모듈 cowcow-enc를 개발했다.
자세히 보기
Hibernate 6.x 호환성 문제와 자체 모듈 개발
딜리버리플랫폼개발팀은 2023년 9월 신규 배송시스템 오픈을 앞두고 기존 평문 데이터의 암호화 마이그레이션과 애플리케이션 단위의 암/복호화 처리가 필요했다. 기존 오픈소스 라이브러리의 취약점 우려와 향후 요구사항 대처의 어려움을 고려해 직접 개발한 암호화 모듈 cowcow-enc를 제작했다.
엔티티 자동 암/복호화 방식으로는 세 가지 후보를 검토했다. JPA @PostLoad는 조회 시 dirty 체크로 인한 불필요한 update 발생 문제를, Hibernate PreLoad event는 Spring Boot 3.0.4(Hibernate 6.x) 환경에서 정상 동작하지 않는 버그(HHH-16350)로 인해 탈락했다. 최종적으로 리플렉션을 사용하지 않고 JPQL 조회 시에도 복호화가 가능한 JPA @Converter 방식을 채택했다.
봉투암호화 적용 및 데이터 최적화
cowcow-enc는 클라우드 공급업체의 마스터키를 사용하는 봉투암호화(Envelope Encryption) 방식을 적용했다. 암호키를 즉시 폐기하고 암호화된 데이터와 암호화된 암호키를 함께 저장하는 방식으로, 암호키 탈취 위험을 낮추고 종단 간 송수신 시 봉투째 전송이 가능하게 했다.
특히 범용 오픈소스와 달리 불필요한 헤더 정보를 제거해 데이터 크기를 10%~30% 절감했다. 또한 base64 인코딩 오버헤드를 없애기 위해 PostgreSQL, MySQL 등의 바이트 전용 데이터 타입을 사용해 저장 효율을 높였다.
테스트 및 성능 검증
모듈의 안정성을 위해 fixture-monkey를 활용한 Property based test를 수행했다. 랜덤값 1,000번 암호화/복호화 테스트와 경계값(EdgeCasesMode.FIRST) 우선 테스트를 통해 예상치 못한 입력값에 대한 견고성을 검증했다. 실제 애플리케이션 환경에서의 동작을 확인하기 위해 cowcow-tests 모듈을 통해 Spring Boot 버전 호환성 이슈를 해결했으며, M1 MacBook Pro 환경에서 CPU 및 메모리 사용량이 안정적으로 유지됨을 확인했다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.