목록 보기
컬리 공통 암호화 모듈의 동시성 이슈 해결하기
백엔드

컬리 공통 암호화 모듈의 동시성 이슈 해결하기

마켓컬리
마켓컬리
2022년 9월 25일

두줄요약

컬리 공통 암호화 모듈에서 간헐적인 `newPosition > limit` 버퍼 오류를 분석했습니다. 스레드 간 공유 버퍼가 원인이었고 `duplicate()`로 동시성 문제를 해결했습니다.

문제 상황

  • 컬리 공통 암호화 SDK 모듈에서 newPosition > limit 버퍼 오류가 간헐적으로 발생
  • 1:1 문의 서비스에서 전화번호 마스킹 실패로 빈 칸 노출
  • 암호화 로직 공통 모듈 특성상 다른 서비스로의 영향 가능성 존재

원인 분석

  • ByteBuffer.get(byte[]) 호출 시 내부적으로 position 갱신 과정에서 예외 발생
  • 일부 스레드에서 clear() 이후에도 position 값이 0이 아닌 32로 관측
  • 공유된 버퍼 객체를 여러 스레드가 동시에 사용한 동시성 문제로 판단

해결 방법

  • synchronized 적용과 duplicate() 활용 방안 검토
  • 성능 저하를 피하기 위해 스레드별 지역 버퍼를 만드는 duplicate() 방식 선택
  • asReadOnlyBuffer() 권장 가이드와 동일한 원리로 thread-safe 보장

컬리 계열사 채용12건

채용 사이트에서 전체 보기

다음 읽기

#동시성 주제를 이어서 읽기

컬리 공통 암호화 모듈의 동시성 이슈 해결하기

공유 캐시의 AWS KMS Data Key 버퍼에서 발생한 간헐적 동시성 오류를 분석했습니다. 동기화 대신 ByteBuffer 복제로 스레드별 버퍼를 분리해 해결했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...