트랜잭션3 채용 과제 테스트 중 디지털 치료제 처방 코드 생성 시스템에서 팬텀 삽입 문제 해결하기 이번 글에서는 최근 채용 과제 테스트로 처방코드 생성 API 개발하던 도중 발견한 팬텀 삽입(Phantom Insert) 문제와 이를 데코레이터 패턴과 트랜잭션 격리 수준을 통해 해결한 경험을 공유하려고 합니다. [ 채용 과제 리포지토리 ] - https://github.com/shiniseong/BeyondTest문제 상황: 처방코드 중복 생성채용 과제로 진행한 프로젝트에서 의료진이 환자에게 처방코드를 발급하는 API를 개발하고 있었습니다.요구사항은 다음과 같았습니다.처방코드는 영문자 대문자 4자, 숫자 4자로 구성된 총 8자리 랜덤 코드처방코드는 중복되지 않아야 함발급 이력이 데이터베이스에 저장되어야 함처음에는 다음과 같이 간단하게 구현했습니다.override suspend fun createPres.. 2025. 3. 24. [트랜잭션 시리즈 - 2] 트랜잭션 격리 수준별 대표적인 트러블 케이스 정리 1. Dirty Read (더티 리드)발생하는 격리 수준: READ UNCOMMITTEDREAD UNCOMMITTED는 가장 낮은 격리 수준으로, 다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있습니다.발생 원인READ UNCOMMITTED 격리 수준에서는 트랜잭션이 다른 트랜잭션의 커밋되지 않은 변경사항을 볼 수 있습니다.이 격리 수준에서는 데이터 읽기 작업에 어떠한 잠금(lock)도 획득하지 않습니다.다른 트랜잭션의 변경사항이 커밋되기 전에도 변경된 데이터를 읽을 수 있습니다.은행 계좌 이체 예시 분석철수의 트랜잭션이 계좌 잔액에서 50만원을 차감하고 아직 커밋하지 않았습니다.영희의 트랜잭션이 READ UNCOMMITTED 격리 수준에서 실행 중이므로, 철수의 트랜잭션이 아직 커밋되지 않았지만 변.. 2025. 3. 24. [트랜잭션 시리즈 - 1] 트랜잭션의 격리 수준 정리 이번 글 에서는 트랜잭션의 4가지 격리 수준에 대해 정리해 보겠습니다.왜냐하면, 최근 봤던 기술 면접에서 제가 이 부분을 전혀 대답하지 못했었기 때문입니다. 따흑 ㅠㅠ이번 글 에서는 트랜잭션 격리 수준에 대해 정리하고, 다음 글 에서는 각 격리 수준별로 트랜잭션 일관성이 깨질 수 있는 상황에 대해 가상 시나리오를 예로 들어 좀 더 피부에 와닿게 정리해 보도록 하겠습니다.데이터베이스 시스템에서 동시성 제어는 매우 중요한 요소입니다.여러 사용자나 프로세스가 동시에 데이터에 접근할 때, 데이터의 일관성을 유지하면서도 성능을 최적화하는 것은 쉽지 않은 과제입니다.이를 위해 데이터베이스는 '트랜잭션 격리 수준(Transaction Isolation Level)'이라는 개념을 제공합니다.트랜잭션 격리 수준이란?트랜.. 2025. 3. 24. 이전 1 다음 728x90