2025-10-13

오늘 배운 것

JOIN과 SUBQUERY 중 언제 어떤 걸 선택하나요?

JOIN은 여러 테이블을 한 번에 결합해 데이터를 가져올 때 사용하고 SUBQUERY는 특정 조건을 만족하는 데이터를 먼저 필터링할 때 주로 사용합니다.

일반적으로 성능과 가독성 측면에서 JOIN이 우수하기 때문에, 가능하면 JOIN을 우선적으로 사용하고 논리적으로 분리된 조건이나 독립적인 데이터 집합이 필요한 경우에만 SUBQUERY를 사용합니다.

WHERE 절에 들어간 SUBQUERY는 어떻게 동작하나요?

내부적으로 먼저 SUBQUERY를 실행해 결과 집합을 임시 테이블로 만든뒤, 그 결과를 기반으롤 메인 쿼리의 조건을 평가합니다.

하지만 옵티마이저가 효율적이라고 판단하면 JOIN으로 변환해 실행하기도 합니다.

데이터 베이스 격리수준에 대해서 설명해주세요

“데이터베이스 격리 수준은 동시에 여러 트랜잭션이 실행될 때 데이터의 일관성을 유지하기 위한 단계입니다.

ANSI 표준으로는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 네 가지가 있습니다.

  • READ UNCOMMITTED: 커밋되지 않은 데이터도 읽을 수 있어 Dirty Read가 발생합니다.
  • READ COMMITTED: 커밋된 데이터만 읽지만, Non-repeatable Read가 생길 수 있습니다. (Oracle 기본)
  • REPEATABLE READ: 같은 쿼리에서 같은 결과를 보장하지만 Phantom Read가 생길 수 있습니다. (MySQL 기본)
  • SERIALIZABLE: 가장 높은 수준으로, 트랜잭션을 순차적으로 실행시켜 모든 문제를 방지하지만 성능이 떨어집니다.

저는 일반적으로 서비스에서는 READ COMMITTEDREPEATABLE READ를 사용해 일관성과 성능의 균형을 맞추는 게 중요하다고 생각합니다.”

ACID에 대해서 설명해주세요

ACID는 데이터베이스 트랜잭션이 안전하게 수행되기 위한 4가지 핵심 특성을 의미합니다.

먼저 Atomicity(원자성)은 트랜잭션 내의 모든 작업이 모두 수행되거나, 하나도 수행되지 않아야 한다는 성질입니다. 중간 단계에서 오류가 발생하면 모든 변경 사항이 롤백되어 이전 상태로 복구됩니다.

Consistency(일관성)은 트랜잭션이 실행 전후에도 데이터의 제약조건이 항상 만족되어야 한다는 것을 뜻합니다. 즉, 트랜잭션 수행 후에도 데이터베이스는 유효한 상태를 유지해야 합니다.

Isolation(고립성)은 동시에 여러 트랜잭션이 수행될 때 서로의 작업이 영향을 주지 않도록 격리되어야 한다는 원칙입니다. 이를 통해 트랜잭션 간의 간섭으로 인한 데이터 불일치를 방지합니다.

마지막으로 Durability(지속성)은 트랜잭션이 성공적으로 완료되어 커밋된 이후에는 시스템 장애가 발생하더라도 그 결과가 영구적으로 보존되어야 한다는 특성입니다.

결국 ACID는 데이터베이스의 신뢰성과 무결성을 보장하는 기본 원칙으로, 안정적인 트랜잭션 처리를 위해 필수적으로 지켜져야 하는 개념입니다.

results matching ""

    No results matching ""