AWS KMS를 활용한 컬리 암호화 SDK 모듈에서 동시성 이슈 발생
ByteBuffer의 thread-safe하지 않은 동작으로 BufferUnderflowException 발생
duplicate() 메서드를 통해 동시성 문제 해결 및 서비스 안정성 확보
컬리의 암호화 모듈은 ByteBuffer를 사용하여 데이터를 처리한다. 구체적으로, createKey 함수 내에서 getByteArray를 호출하는 과정에서 문제가 발생했다. 따라서, 여러 스레드에서 동시에 접근 시 BufferUnderflowException이 발생할 수 있음을 확인했다.
동시성 문제를 해결하기 위해 ByteBuffer의 duplicate() 메서드를 사용했다. 따라서, 각 스레드마다 독립적인 ByteBuffer 인스턴스를 생성하여 데이터 무결성을 보장한다. 반면, synchronized 블록 사용은 성능 저하를 야기할 수 있어 적절하지 않았다.
컬리는 AWS KMS를 사용하여 개인정보를 암호화하고, Caffeine 캐시를 통해 API 호출 횟수를 줄였다. 구체적으로, GenerateDataKeyResult 객체를 캐싱하여 비용을 절감했다. 결과적으로, API 요청 비용 절감과 암호화 성능 향상을 동시에 달성했다.