AI Briefing

컬리, AWS KMS 암호화 SDK의 ByteBuffer 동시성 오류 해결

·2022.09.26 00:00

핵심 내용

컬리가 AWS KMS 기반 암호화 SDK에서 발생한 ByteBuffer 동시성 오류를 duplicate() 메소드로 해결했다.

자세히 보기

컬리는 개인정보 보호법 준수를 위해 AWS KMS를 활용한 봉투 암호화(enveloping encryption)를 적용하고, 비용 절감을 위해 Caffeine 캐시를 도입한 공통 암호화 SDK 모듈을 운영 중이다. 그러나 1:1 문의 게시판 등에서 간헐적으로 newPosition > limit 오류가 발생하며 고객에게 마스킹된 전화번호가 빈 칸으로 표시되는 문제가 발견되었다.

동시성 오류의 원인

오류는 ByteBuffer의 get(byte[] dst) 메소드 내부에서 발생했다. Java API 문서에 따르면 Buffer는 다중 스레드 환경에서 안전하지 않다(thread-safe하지 않음). 테스트 결과, 여러 스레드가 동일한 GenerateDataKeyResult 객체의 Plaintext ByteBuffer를 공유하면서 position 값이 충돌하여 버퍼의 limit(32바이트)을 초과하는 현상이 확인되었다.

해결 방안

개발팀은 두 가지 해결책을 검토한 끝에 duplicate() 메소드 사용을 채택했다. synchronized 블록 추가는 성능 저하를 유발할 수 있어 배제했으며, duplicate()를 호출해 스레드마다 독립적인 버퍼 객체를 생성함으로써 동시성 이슈를 해소했다. 이는 AWS SDK 자바독에서 권장하는 asReadOnlyBuffer()와 유사한 원리로 동작한다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.