아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
컬리 favicon컬리

컬리, 암호화 모듈의 동시성 버그를 해결하다!

by DD
2022-09-25
3년 전
조회수 4

AWS KMS를 활용한 컬리 암호화 SDK 모듈에서 동시성 이슈 발생

ByteBuffer의 thread-safe하지 않은 동작으로 BufferUnderflowException 발생

duplicate() 메서드를 통해 동시성 문제 해결 및 서비스 안정성 확보

ByteBuffer와 동시성 문제

컬리의 암호화 모듈은 ByteBuffer를 사용하여 데이터를 처리한다. 구체적으로, createKey 함수 내에서 getByteArray를 호출하는 과정에서 문제가 발생했다. 따라서, 여러 스레드에서 동시에 접근 시 BufferUnderflowException이 발생할 수 있음을 확인했다.

duplicate() 메서드의 활용

동시성 문제를 해결하기 위해 ByteBuffer의 duplicate() 메서드를 사용했다. 따라서, 각 스레드마다 독립적인 ByteBuffer 인스턴스를 생성하여 데이터 무결성을 보장한다. 반면, synchronized 블록 사용은 성능 저하를 야기할 수 있어 적절하지 않았다.

AWS KMS와 캐싱 전략

컬리는 AWS KMS를 사용하여 개인정보를 암호화하고, Caffeine 캐시를 통해 API 호출 횟수를 줄였다. 구체적으로, GenerateDataKeyResult 객체를 캐싱하여 비용을 절감했다. 결과적으로, API 요청 비용 절감과 암호화 성능 향상을 동시에 달성했다.

컬리 공통 암호화 모듈의 동시성 이슈 해결하기
중급
아키텍처
Java
AWS KMS
ByteBuffer
Backend
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

JFR(Java Flight Recording)으로 자바(Java) 성능 병목을 찾아내고 5배 향상시키다!

레딧 로고

Java 성능의 새 지평, Project Valhalla JDK 28에 상륙!

해커뉴스 로고

Ruby, Java, TypeScript, 어떤 언어가 승자일까?

레딧 로고

자바(Java)의 지역 변수 선언, 패턴 매칭으로 더욱 강력해진다!

레딧 로고

Java, Value Classes 도입으로 성능 개선 기대!

레딧 로고

Netflix, ArchUnit 기반 Nebula ArchRules로 대규모 Java 프로젝트 아키텍처 관리

넷플릭스 로고
컬리 favicon컬리
중급
아키텍처
Java
AWS KMS
ByteBuffer
Backend

관련 추천 글

JFR(Java Flight Recording)으로 자바(Java) 성능 병목을 찾아내고 5배 향상시키다!

레딧 로고

Java 성능의 새 지평, Project Valhalla JDK 28에 상륙!

해커뉴스 로고

Ruby, Java, TypeScript, 어떤 언어가 승자일까?

레딧 로고