본문 바로가기

분류 전체보기157

[트랜잭션 시리즈 - 2] 트랜잭션 격리 수준별 대표적인 트러블 케이스 정리 1. Dirty Read (더티 리드)발생하는 격리 수준: READ UNCOMMITTEDREAD UNCOMMITTED는 가장 낮은 격리 수준으로, 다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있습니다.발생 원인READ UNCOMMITTED 격리 수준에서는 트랜잭션이 다른 트랜잭션의 커밋되지 않은 변경사항을 볼 수 있습니다.이 격리 수준에서는 데이터 읽기 작업에 어떠한 잠금(lock)도 획득하지 않습니다.다른 트랜잭션의 변경사항이 커밋되기 전에도 변경된 데이터를 읽을 수 있습니다.은행 계좌 이체 예시 분석철수의 트랜잭션이 계좌 잔액에서 50만원을 차감하고 아직 커밋하지 않았습니다.영희의 트랜잭션이 READ UNCOMMITTED 격리 수준에서 실행 중이므로, 철수의 트랜잭션이 아직 커밋되지 않았지만 변.. 2025. 3. 24.
[트랜잭션 시리즈 - 1] 트랜잭션의 격리 수준 정리 이번 글 에서는 트랜잭션의 4가지 격리 수준에 대해 정리해 보겠습니다.왜냐하면, 최근 봤던 기술 면접에서 제가 이 부분을 전혀 대답하지 못했었기 때문입니다. 따흑 ㅠㅠ이번 글 에서는 트랜잭션 격리 수준에 대해 정리하고, 다음 글 에서는 각 격리 수준별로 트랜잭션 일관성이 깨질 수 있는 상황에 대해 가상 시나리오를 예로 들어 좀 더 피부에 와닿게 정리해 보도록 하겠습니다.데이터베이스 시스템에서 동시성 제어는 매우 중요한 요소입니다.여러 사용자나 프로세스가 동시에 데이터에 접근할 때, 데이터의 일관성을 유지하면서도 성능을 최적화하는 것은 쉽지 않은 과제입니다.이를 위해 데이터베이스는 '트랜잭션 격리 수준(Transaction Isolation Level)'이라는 개념을 제공합니다.트랜잭션 격리 수준이란?트랜.. 2025. 3. 24.
[주니어 개발자의 두 번째 라이브러리 개발기] 도메인 특화 언어(DSL)을 만들어 보자! DDL-DSL 개발기 -4. 마이그레이션 기능- 저번 편에서는 마이그레이션 기능 구현시 필요한 ALTER와 DROP기능 개발을 살펴 보았습니다.이번 편에서는 DDL-DSL을 사용하는 프로젝트 첫 출시 전, 꼭 필요했던 마이그레이션 기능 개발에 대해 다루어 보겠습니다.마이그레이션의 필요성데이터베이스 스키마는 시간이 지남에 따라 변경되기 마련입니다.새로운 기능이 추가되거나, 기존 기능이 수정되면서 테이블과 컬럼의 구조도 함께 변경되어야 하죠.이런 변경사항을 관리하는 것은 매우 중요한 작업입니다.특히 제 라이브러리가 사용된 프로젝트가 출시를 앞둠에 따라, 다음과 같은 요구사항들을 충족시켜야 했습니다.스키마 변경 이력 추적실행된 마이그레이션의 성공/실패 여부 확인마이그레이션 버전 관리반복 가능한 마이그레이션 지원마이그레이션 시스템의 구현마이그레이션 기능 개발.. 2025. 2. 15.
[주니어 개발자의 두 번째 라이브러리 개발기] 도메인 특화 언어(DSL)을 만들어 보자! DDL-DSL 개발기 -3. ALTER 및 DROP 구현- 안녕하세요 오랜만입니다 ㅎㅎ1년차 포트폴리오를 채우자마자 바로 블로그 관리에 너무 소홀해져 버렸네요. 앞선 두 편의 글에서 DDL-DSL 라이브러리의 개발 배경과 CREATE TABLE 구현에 대해 다루었는데요.이번에 제가 만든 DDL-DSL 라이브러리가 적용된 타 팀의 프로젝트가 첫 프로덕션 출시를 앞두고 있습니다.때문에, 프로덕션에 나가기전 부랴부랴 마이그레이션 기능을 개발중에 있습니다.해서 먼저, 이번 편에서는 마이그레이션시 꼭 필요한 '테이블 구조(칼럼 포함)를 변경하고 삭제하는 기능의 구현'에 대해 다루어보겠습니다.1. ALTER TABLE 구현1.1 기본 설계데이터베이스의 테이블 구조를 변경하는 작업은 매우 신중하게 이루어져야 합니다.특히 여러 데이터베이스를 지원해야 하는 상황에서는 각 데이터.. 2025. 2. 13.
728x90