Q, Table Full Scan 과 Index Range Scan 을 설명해주세요.
Table Full Scan: 테이블의 모든 행을 순차적으로 읽어 원하는 데이터를 찾는 방법입니다. 테이블에 인덱스가 없거나, 조건이 인덱스를 사용하지 않을 때 발생합니다. 큰 테이블에서 비효율적일 수 있습니다.
Index Range Scan: 인덱스를 이용해 조건에 맞는 특정 범위의 데이터를 검색하는 방법입니다. 인덱스가 존재하고, 조건이 인덱스의 일부 또는 전체를 포함할 때 사용됩니다. 전체 테이블을 읽지 않으므로 효율적입니다.
Q. 트랜잭션이란 무엇인가요? 4 가지 원칙을 포함해서 설명해주세요.
트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다
트랜잭션은 ACID 원칙을 따릅니다.
원자성 (Atomicity): 트랜잭션의 모든 작업이 성공적으로 완료되거나, 아니면 전혀 실행되지 않아야 합니다.
일관성 (Consistency): 트랜잭션이 완료된 후 데이터베이스는 항상 일관된 상태를 유지해야 합니다.
격리성 (Isolation): 하나의 트랜잭션이 실행 중일 때 다른 트랜잭션이 간섭할 수 없어야 합니다.
영속성/지속성 (Durability): 트랜잭션이 완료되면 그 결과가 영구적으로 반영되어야 합니다.
Q. 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.
트랜잭션의 결리수준은 4가지로 나누어집니다 후 순위로 갈수록 격리수준이 높아지며 처리성능은 낮아집니다
Read Uncommitted: 다른 트랜잭션의 미완료 데이터도 읽을 수 있습니다. Dirty Read가 발생할 수 있습니다.
// Dirty Read / Non-repeatable Read /Phantom Read
Read Committed: 완료된 데이터만 읽을 수 있습니다. Non-repeatable Read와 Phantom Read가 발생할 수 있습니다.
//Non-repeatable Read / Phantom Read
Repeatable Read: 같은 트랜잭션 내에서 읽은 데이터는 항상 동일합니다. Phantom Read가 발생할 수 있습니다.
// Phantom Read
Serializable: 가장 높은 격리 수준으로, 트랜잭션 간의 간섭을 완전히 차단합니다. 성능 저하가 있을 수 있습니다.
Dirty Read: 한 트랜잭션이 다른 트랜잭션의 아직 커밋되지 않은 데이터를 읽는 상황입니다. 만약 읽은 트랜잭션이 롤백된다면, 잘못된 데이터를 참조하게 됩니다.
Non-repeatable Read: 한 트랜잭션 내에서 동일한 쿼리를 두 번 실행했을 때 다른 결과가 나올 수 있습니다. 이는 다른 트랜잭션이 중간에 데이터를 수정하고 커밋했기 때문입니다.
Phantom Read: Non-repeatable Read 의 종류로 한 트랜잭션이 일정한 범위의 데이터를 두 번 조회할 때, 다른 트랜잭션에 의해 중간에 레코드가 추가되거나 삭제되어 조회 결과가 달라질 수 있습니다.
Q. Mybatis 와 ORM 의 장단점을 설명하세요.
MyBatis:
장점: 프레임 워크와 직접적인 SQL 코딩제어 , 복잡한 쿼리문을 직접 구성가능합니다
단점: SQL 코딩이 필요하고 객체와 데이터베이스 사이에 매핑을 직접 구성하여야합니다.
ORM (Object-Relational Mapping):
장점: 객체와 데이터베이스 사이의 매핑을 자동으로 처리하고 sql 코딩이 필요없고 간결한 코드작성이 가능합니다
단점: 복잡한 SQL 쿼리 작성이 어렵고, 성능 최적화가 힘들 수 있습니다. 쿼리성능이 떨어질 수 있고 고급 기능지원이 제한적입니다
mybatis는 복잡하고 어렵지만 기능이 많고 orm은 기능이 적은대신 심플하고 간편한 사용을 제공합니다
Q. DB 클러스터링과 리플리케이션의 차이를 설명하세요.
DB 클러스터링: 여러 데이터베이스 서버를 하나의 시스템처럼 사용하여 부하 분산 및 고가용성을 제공하는 기술입니다.
수평적인 구조의 여러 노드로 구성된 분산 데이터베이스 시스템
높은 가용성과 부하분산 데이터중복을 통한 데이터복원등의 이점이 있지만 복제된 데이터사이의 동기화 클러스터 내 노드간 통신의 복잡성이 있습니다
리플리케이션: 데이터를 여러 복제본으로 유지하여 데이터 가용성과 안정성을 높이는 기술입니다. 한 서버에서 데이터 변경이 발생하면 다른 서버들에 복제됩니다.
수직적 구조로 데이터베이스 데이터를 복제하여 다수의 서버에서 동시에 처리 가능하게 하는 기술
리플리케이션은 복제된 데이터의 동기화 신뢰성등이 용이하지만 데이터복제에 따른 추가 리소스 사용 복제 데이터의 변경이 원본과 동기화 되지 않는경우등의 단점이있습니다
Q. DB 이중화 방식에 대해 모두 설명해보세요.
마스터-슬레이브 (Master-Slave) 복제
개념: 하나의 마스터 데이터베이스와 하나 이상의 슬레이브 데이터베이스로 구성됩니다. 마스터가 모든 쓰기 작업을 처리하고, 슬레이브는 마스터로부터 데이터를 복제하여 읽기 작업을 처리합니다.
특징: 읽기 성능을 향상시키고, 마스터에 장애가 발생할 경우 슬레이브를 마스터로 승격하여 서비스 연속성을 유지할 수 있습니다.
문제점: 마스터 장애 시, 슬레이브가 완전히 최신 상태로 동기화되지 않은 경우 데이터 손실 가능성이 있습니다.
//
마스터-마스터 (Master-Master) 복제
개념: 두 개 이상의 데이터베이스가 모두 마스터 역할을 하며, 모든 데이터베이스에 쓰기 작업을 분산시킵니다. 모든 마스터가 다른 마스터와 데이터를 동기화합니다.
특징: 높은 가용성과 부하 분산을 제공하며, 어느 마스터에서도 데이터 변경이 가능합니다.
문제점: 동기화 충돌이 발생할 수 있으며, 복잡한 충돌 해결 메커니즘이 필요합니다.
//
클러스터링 (Clustering)
개념: 여러 데이터베이스 서버를 하나의 클러스터로 묶어 단일 시스템처럼 운영합니다. 부하 분산 및 장애 조치(Failover)를 지원합니다.
특징: 고가용성 및 확장성을 제공하며, 특정 서버의 장애 시 다른 서버로 자동 전환됩니다.
문제점: 설정 및 관리가 복잡할 수 있으며, 클러스터링 소프트웨어에 따라 특정 요구 사항이 있을 수 있습니다.
//
데이터베이스 미러링 (Database Mirroring)
개념:주 서버(Principal)와 미러 서버(Mirror) 간에 실시간으로 데이터 복제하여 고가용성을 제공하는 기술입니다. 주 서버가 모든 쓰기 작업을 처리하고, 미러 서버는 주 서버의 데이터 변경을 실시간으로 복제합니다.
특징: 고가용성과 확장성을 제공하며, 특정 서버의 장애 시 다른 서버로 자동으로 전환됩니다.
문제점: 설정 및 관리가 복잡할 수 있으며, 클러스터링 소프트웨어에 따라 특정 요구 사항이 있을 수 있습니다.
//
미러링과 마스터-마스터의 차이점
마스터-마스터 복제는 여러 마스터 서버에서 읽기와 쓰기 작업을 동시에 처리하며, 부하 분산과 고가용성을 제공합니다. 하지만 동기화 충돌 문제가 있을 수 있습니다.
데이터베이스 미러링은 한 서버가 주 역할을 하고, 다른 서버가 복제본을 유지하여 고가용성을 제공합니다. 미러 서버는 장애 발생 시 주 서버 역할로 전환됩니다.
Q, MySQL, Oracle, Microsoft SQL Server 의 장단점들에 대해 설명하세요.
MySQL:
장점: 오픈 소스, 높은 성능, 많은 커뮤니티 지원
단점: 대용량 데이터에 대한 성능이 떨어질 수 있다 복잡한 쿼리 성능이 떨어질 수 있음
Oracle:
장점: 강력한 기능과 안정성, 대규모 데이터 처리에 적합
단점: 높은 비용, 복잡한 설정
Microsoft SQL Server:
장점: Windows 환경에서 최적화, 다양한 관리 도구 제공 대용량 데이터에 대한 처리성능이 우수합니다
단점: 윈도우 환경에 의존적, 비용 문제
Q. NoSql 에 대해 설명하세요.
NoSQL(not only sql)은 비관계형 데이터베이스로, 스키마가 없거나 유연한 스키마를 제공하며, 대용량 데이터를 처리하는데 적합합니다. 주로 Key-Value, Document, Column, Graph 등의 데이터 모델을 사용합니다.
Q. NoSql 과 RDB 의 차이는 무엇인가요?
NoSQL: 비정형 데이터에 유연하고, 스케일아웃이 용이하며, 특정한 스키마가 없습니다.
RDB (관계형 데이터베이스): 고정된 스키마를 가지고 있으며, 관계를 명확히 정의할 수 있습니다.
noSql은 관계성이 약하고 빠른 처리와 큰 데이터의 양의 처리를 지원하는 대신 관계성이 높은 데이터 모델링이 어렵습니다
RDB는 관계성이 강하고 트랜잭션 처리와 정규화 데이터모델링이 강조되지만 대용량 데이터 처리와 높은 처리속도를 지원하지 않습니다
Q. NoSQL 이 왜 더 빠른가?
데이터베이스의 구조적 규제와 특정 스키마가 없는 비구조화 된 데이터베이스 시스템입니다 이는 데이터의 추가 수정 제거에 대한 빠른 처리속도를 제공하고 대용량의 데이터를 처리하는데 강한 확장성을 가지고 있기 때문에 더 빠른것입니다
NoSQL은 수평적 확장이 가능하고, 비정형 데이터를 효율적으로 처리하며, 복잡한 조인 연산을 피하기 때문에 빠른 성능을 제공합니다.
Q. 관계형 데이터베이스와 비관계형 데이터베이스의 차이는 무엇인가요?
관계형 데이터베이스: 테이블 간의 관계를 통해 데이터를 구조화하며, 키-값 쌍의 관계를 기반으로 SQL을 사용합니다. 데이터 무결성 유지에 강점이 있습니다.
비관계형 데이터베이스: 다양한 데이터 모델을 지원하며, 스키마(테이블구조) 없이 데이터를 저장할 수 있어 유연성이 높습니다. 대규모 데이터와 고속 처리가 필요할 때 사용됩니다.