딜리버리 서비스의 자체 암호화 모듈 개발 경험: JPA Converter와 봉투 암호화 전략

🤖 AI 추천

라이브러리 선정의 한계를 넘어 자체 암호화 모듈을 개발하려는 백엔드 개발자, 데이터 보안 및 마이그레이션 전략 수립에 관심 있는 개발자에게 추천합니다.

🔖 주요 키워드

딜리버리 서비스의 자체 암호화 모듈 개발 경험: JPA Converter와 봉투 암호화 전략

핵심 기술

새로운 배송 시스템 오픈을 앞두고 보안 요구사항과 유연한 제어를 위해 자체 암호화 모듈('cowcow-enc')을 개발한 경험을 공유하며, JPA @Converter를 활용한 엔티티 자동 암복호화 구현과 봉투 암호화 적용 방식에 대한 심도 있는 분석을 제공합니다.

기술적 세부사항

  • 암호화 모듈 개발 배경: 오픈소스 라이브러리의 취약점 및 향후 요구사항 대응의 어려움으로 인한 자체 개발 결정.
  • 엔티티 자동 암복호화 방식 비교:
    • JPA @PostLoad: 복호화 후 엔티티 변경으로 인한 Flush 시 Update 발생 문제.
    • Hibernate PreLoad event: Spring Boot 3.x 및 Hibernate 6.x 버전 호환성 문제 발생.
    • JPA @Converter: 리플렉션 미사용, 유연한 타입 매핑, JPQL/QueryDSL 프로젝션 시에도 자동 복호화 되는 장점.
  • 암호화 방식:
    • 봉투 암호화(Envelope Encryption): 마스터 키를 통해 암호 키를 발급받고, 암호 키로 데이터를 암호화하며, 암호 키는 폐기하여 보안 강화.
    • 봉투 크기 최적화: 범용 라이브러리의 많은 헤더 정보를 줄여 크기 절감.
    • Base64 제거: 바이트 타입 저장으로 인코딩/디코딩 오버헤드 감소 및 저장 공간 절약.
  • 배포 및 테스트:
    • 종속성 최소화: compileClasspath에 노출되는 종속성을 최소화하여 의존성 충돌 방지.
    • 테스트 전략: Property based test (fixture-monkey, jqwik)를 활용한 엣지케이스 테스트, 사용자 애플리케이션 환경에서의 테스트 (cowcow-tests).
  • 성능 측정: IntelliJ Profiler를 이용한 암복호화 성능 테스트 결과 (300만 건 데이터 기준 암호화 5.58초, 복호화 5.36초) 및 CPU/메모리 사용량 분석.

개발 임팩트

자체 암호화 모듈 개발을 통해 보안 요구사항 충족, 라이브러리 종속성 문제 해소, 향후 기능 확장에 대한 유연성 확보 및 최적화된 성능을 달성했습니다.

커뮤니티 반응

글 자체에 명시적인 커뮤니티 반응은 없으나, 언급된 Hibernate HHH-16350 이슈 등은 개발자 커뮤니티에서 널리 알려진 내용입니다.

톤앤매너

실무 경험을 바탕으로 기술적 문제 해결 과정과 의사결정 과정을 상세히 설명하며, 개발자에게 실질적인 인사이트를 제공하는 전문적이고 유익한 톤입니다.

📚 관련 자료