공공부하자개발 · 영어 학습 노트
자바
실무 확장Excel · 파일 업로드 · DB 연동0/22 완료
  • 01Excel(XLSX) 구조와 순수 JDK로 읽기/쓰기
  • 02Apache POI로 Excel 업로드/다운로드
  • 03파일 업로드/다운로드 서버 (HttpServer)
  • 04JDBC 기초와 트랜잭션 (H2)
  • 05MyBatis 어노테이션 매퍼로 쿼리 연동
  • 06MyBatis XML 매퍼 · Oracle 방언 · PageHelper · Spring Boot
  • 07REST API 서버와 JSON
  • 08Vue 3 SPA 와 Java 서버 연동
  • 09@Scheduled 운영
  • 10로깅 실무: 레벨·계층, MDC 추적, 예외·성능, 마스킹, 롤링, JSON 로그
  • 11외부 API 연동
  • 12테스트 실무
  • 13암호화·개인정보 보호
  • 14인코딩·한글 실무
  • 15@Transactional 심화
  • 16긴 작업 비동기 처리와 진행률
  • 17SFTP·FTP 파일 연계
  • 18로컬 캐시와 @Cacheable
  • 19메일·알림 발송
  • 20웹 보안 체크리스트
  • 21빌드 도구와 폐쇄망 의존성 반입
  • 22성능 측정: p50·p95·p99, 측정 계층, JFR, JMH 함정, 자체 부하 테스트, 병목 순위
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 실무 확장 › 13 / 22

암호화·개인정보 보호

AES-GCM, 키 관리·교체, 검색용 HMAC, 컬럼 암호화, 마스킹
섹션 7진행 0 / 22
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

4. 응용 변형 예제

4.1 검색용 해시 컬럼을 활용한 조회 쿼리

암호화 컬럼과 검색용 해시 컬럼을 함께 두면, 애플리케이션은 평문을 해시로 변환해 조건절에 넣습니다.

sql
-- customer 테이블: rrn_enc(암호화), rrn_hash(검색용) 두 컬럼
SELECT id, name, rrn_enc
FROM customer
WHERE rrn_hash = ?  -- 애플리케이션에서 searchHash(입력값) 전달
java
String hash = crypto.searchHash(inputRrn);
List<Customer> found = customerMapper.findByRrnHash(hash);
// found 의 rrn_enc 는 TypeHandler 가 자동으로 복호화한다

4.2 저장 전 마스킹과 원본 분리 조회

목록 화면은 마스킹된 값만 필요하므로, 목록 조회 쿼리는 애초에 암호화 컬럼을 건드리지 않고 별도의 마스킹 컬럼이나 애플리케이션 단 마스킹을 씁니다.

java
public String maskedForList(String encToken) {
    // 목록 화면용: 복호화 후 즉시 마스킹, 평문 보유 시간 최소화
    String plain = crypto.decrypt(encToken);
    return Crypto.mask(plain);
}

4.3 성능 참고치

AES-256-GCM 은 대부분의 CPU 가 AES-NI 명령어를 지원해 매우 빠릅니다. 짧은 문자열(주민번호·계좌번호 수준) 기준으로 참고할 수치를 정리합니다.

연산 대략적인 처리량 비고
AES-GCM 암호화 초당 수십만 건 이상 AES-NI 지원 CPU 기준
HMAC-SHA256 초당 수십만 건 이상 암호화보다 가벼움
PBKDF2(비밀번호) 초당 수십~수백 건 의도적으로 느림, 인증 01 참조

암호화 자체는 병목이 되는 경우가 드뭅니다. 실무에서 느려지는 지점은 대개 키를 매번 KMS 에 요청하는 네트워크 왕복이므로, 키는 애플리케이션 시작 시 로드해 메모리에 캐시해 둡니다.

응용 변형 예제
  • 4.1 검색용 해시 컬럼을 활용한 조회 쿼리
  • 4.2 저장 전 마스킹과 원본 분리 조회
  • 4.3 성능 참고치
이전 섹션3 코드 예제4 / 7다음 섹션5 자주 하는 실수 (Tip)