딜리버리 암호화 모듈 개발기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- *소프트웨어 개발자, 보안 엔지니어, JPA/ORM 프레임워크 사용자**
- 난이도: 중급 이상 (암호화 기술, JPA 설계 패턴, 성능 최적화 이해 필요)*
핵심 요약
- JPA @Converter 사용으로 엔티티 자동 암/복호화 구현
- 봉투암호화(Envelope Encryption) 적용으로 보안성 강화 및 키 관리 최소화
- base64 인코딩 제거로 저장 공간 10~30% 절감
섹션별 세부 요약
1. 암호화 모듈 개발 배경
- 기존 오픈소스 라이브러리의 취약점으로 직접 개발 결정
- 기존 평문 데이터 암호화 마이그레이션 필요성 (새 시스템 오픈 전 데이터 보안 강화)
- 사용자 요구사항: 애플리케이션 내 암/복호화 처리, 키 자동 발급, 엔티티 자동 처리
2. 엔티티 암/복호화 구현 방식
- @PostLoad, PreLoadEventListener 방식 실패 (Hibernate 버전 6.x 호환성 문제)
- JPA @Converter 선택 (리플렉션 무결, JPQL/QueryDSL 프로젝션 지원)
- 예시 코드:
@Convert(converter = EnvelopeConverter.class)
private String sensitiveData;
3. 봉투암호화 적용
- 마스터키 → 암호키 생성 → 데이터 암호화 → 봉투에 암호화된 암호키 포함
- 암호화 키 폐기 후 봉투 송신 (탈취 시 데이터 유출 방지)
- 헤더 최적화로 저장 공간 10~30% 절감 (기존 오픈소스 대비)
4. 종속성 최소화 전략
- compileClasspath에 종속성 노출 제거 (4개만 runtimeClasspath에 포함)
- Spring Boot 3.1.4 호환성 강제 조정 (cowcow-tests 모듈에서 버전 다운그레이드)
5. 테스트 전략
- Property-based 테스트 도구(fixture-monkey) 사용 (1000회 랜덤 입력 테스트, 경계값 우선 테스트)
- EdgeCasesMode.FIRST 적용 (null, 빈 문자열, 0, -1 등 경계값 우선 생성)
- IntelliJ Profiler로 성능 측정 (300만 개 plainText 처리 시 암호화 5.58초, 복호화 5.36초)
결론
- @Converter + 봉투암호화 방식으로 보안성과 성능 균형 달성
- base64 제거, 종속성 최소화로 저장 공간 및 유지보수성 향상
- Property-based 테스트와 JVM 프로파일링으로 확장성 검증 (Spring Boot 3.x 호환성 포함)