Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

JDBC 잠금(Lock) 시스템의 종류와 특징 총정리

JDBC에서는 데이터 무결성을 보장하기 위해 다양한 수준의 잠금(Lock) 메커니즘을 제공합니다. 레코드 하나부터 데이터베이스 전체까지 특정 범위를 잠그면, 해당 범위 내의 값은 다른 트랜잭션이 변경할 수 없게 됩니다.

그렇다면 JDBC에서 사용할 수 있는 잠금은 몇 가지이며, 각각 어떤 차이가 있을까요? 아래에서 주요 잠금 유형을 자세히 살펴보겠습니다.

JDBC의 주요 잠금 유형

1. 행 및 키 잠금(Row and Key Locks)

행 및 키 잠금은 테이블 내의 특정 행(row)만 잠그는 방식입니다. 이 잠금을 활용하면 서로 다른 트랜잭션이 같은 테이블의 다른 행을 동시에 처리할 수 있으므로, 동시성(concurrency)을 크게 향상시킬 수 있습니다. 세밀한 단위의 작업에 적합하며, 대부분의 온라인 트랜잭션 처리(OLTP) 환경에서 기본적으로 사용됩니다.

2. 페이지 잠금(Page Locks)

페이지 잠금은 데이터가 저장되는 페이지(page) 단위로 잠그는 방식입니다. 한 행의 내용이 변경되면, 해당 행이 속한 페이지 전체가 잠기게 됩니다. 따라서 대량의 행을 한 번에 업데이트해야 하는 경우에 유용합니다. 다만 잠금 범위가 넓어지므로, 불필요하게 많은 행이 함께 잠길 수 있다는 점은 고려해야 합니다.

3. 테이블 잠금(Table Locks)

테이블 잠금은 말 그대로 테이블 전체를 잠그는 방식으로, 두 가지 종류가 있습니다.

  • 공유 잠금(Shared Lock): 여러 트랜잭션이 동시에 데이터를 읽을 수 있지만, 누구도 수정할 수 없습니다. 읽기 작업 위주의 상황에 적합합니다.
  • 배타적 잠금(Exclusive Lock): 하나의 트랜잭션만 접근할 수 있으며, 읽기와 쓰기 모두 독점합니다. 데이터 일관성이 중요한 갱신 작업에 사용됩니다.

4. 데이터베이스 잠금(Database Lock)

데이터베이스 잠금은 데이터베이스 전체를 잠그는 가장 강력한 잠금 방식입니다. 이 잠금을 사용하면 다른 데이터베이스의 트랜잭션이 현재 데이터베이스에 접근하는 것을 차단할 수 있습니다. 주로 백업, 스키마 변경 등 데이터베이스 전반에 걸친 중요한 관리 작업을 수행할 때 활용됩니다.

마무리

이처럼 JDBC의 잠금 시스템은 행·키 잠금, 페이지 잠금, 테이블 잠금, 데이터베이스 잠금 네 가지로 구분됩니다. 잠금 범위가 좁을수록 동시성은 높아지지만 관리 오버헤드가 커지고, 범위가 넓을수록 일관성은 강해지지만 성능 저하가 발생할 수 있습니다. 따라서 애플리케이션의 트래픽 패턴과 작업 특성에 맞는 적절한 잠금 수준을 선택하는 것이 중요합니다.