본문 바로가기

🎀 포트폴리오 업데이트

🗂️ 기술 면접 대비 | DB 관련 질문 정리

데이터베이스의 특징

실시간 접근성

  • 비정형적인 조회에 대해 실시간 처리에 의한 응답이 가능.

지속적인 변화

  • 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지하는 동적인 상태.

동시 공용

  • 다수의 사용자가 동시에 같은 내용의 데이터 이용 가능.

내용에 의한 참조

  • 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 탐색 가능.

 

데이터베이스 언어

DDL

  • 데이터베이스의 구조를 정의, 수정, 삭제하는 언어.
  • CREATE, ALTER,  DROP

DML

  • 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어.
  • SELECT, INSERT, UPDATE, DELETE

DCL

  • 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어.
  • COMMIT, ROLLBACK, GRANT, REVOKE

 

SELECT 쿼리의 실행 순서

FROM

  • 각 테이블 확인.

ON

  • JOIN 조건 확인.
  • WHERE보다 먼저 실행되어 해당 조건으로 필터링된 레코드들 간에 JOIN이 발생.

JOIN

  • JOIN이 실행되어 데이터가 SET으로 모임.
  • 서브 쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와줌.

WHERE

  • 데이터 SET을 형성하게 되면 WHERE 조건이 개별 행에 적용.
  • WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용.
  • JOIN한 결과에서 해당 조건으로 필터링이 발생.
  • 그룹화 또는 집계 발생 전 필터링에 사용.

GROUP BY

  • WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화.
  • 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 함.
  • 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹 짓는 역할.
  • 집합 연산자는 COUNT, SUM, AVG, MAX, MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거함.

HAVING

  • GROUP BY절이 쿼리에 있을 경우 HAVING절의 제약 조건이 그룹화된 행에 적용.
  • 그룹화 또는 집계 발생 후 필터링에 사용.

SELECT

  • SELECT에 표현된 식이 마지막으로 적용.

DISTINCT

  • 표현된 행에서 중복된 행 삭제.

ORDER BY

  • 지정된 데이터를 기준으로 오름차순 OR 내림차순 정렬.

LIMIT

  • 지정한 범위를 벗어나는 행 제외.

 

INNER JOIN vs. OUTER JOIN

INNER JOIN

  • 서로 연관된 내용만 검색하는 방법.

OUTER JOIN

  • 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 검색하는 방법.

 

DELETE vs. TRUNCATE vs. DROP

DELETE

  • 원하는 데이터만 골라서 지우는 방식.
  • 테이블 용량은 줄지 않음.
  • 삭제 후 되돌릴 수 있음.

TRUNCATE

  • 전체 데이터를 한 번에 삭제하는 방식.
  • 테이블 용량이 줄어들고 인덱스도 삭제됨.
  • 테이블은 삭제 불가.
  • 삭제 후 되돌릴 수 없음.

DROP

  • 테이블 자체를 완전 삭제하는 방식.
  • 삭제 후 되돌릴 수 없음.

 

INDEX의 정의 & 장단점 & 자료구조

테이블을 처음부터 끝까지 검색하는 방법인 full table scan과 달리 인덱스를 검색하여 해당 자료의 테이블에 접근하는 방법.

항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는 것은 빠름.

새로운 값을 추가, 삭제, 수정하는 경우 실행 속도가 느림.

✅ 데이터의 저장 성능을 희생하는 대신 데이터의 검색 속도를 높이는 기능.

B+Tree 인덱스 자료구조

  • 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조.
  • BTree 리프 노드들을 LinkedList로 연결하여 순차 검색에 용이.

 

트랜잭션(transcation)

작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상을 방지하는 기능.

하나의 트랜잭션은 commit(작업 완료)되거나 rollback(취소)됨.

4가지 주요 특성

  1. 원자성(Atomicity)
    • 작업이 모두 반영되거나 전혀 반영되지 않아야 함.
  2. 일관성(Consistency)
    • 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 함.
  3. 독립성(Isolation)
    • 둘 이상의 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없음.
  4. 영속성(Durability)
    • 완료된 결과는영구적으로 반영되어야 함.

 

DB LOCK

트랜잭션 처리의 순차성을 보장하기 위한 방법.

공유락(read lock)

  • 트랜잭션이 읽기를 할 때 사용하는 락.
  • 데이터를 읽기만 하기 때문에 같은 공유락끼리는 동시에 접근 가능.

베타락(write lock)

  • 데이터를 변경할 때 사용하는 락.
  • 트랜잭션이 완료될 때까지 유지됨.
  • 베타락이 끝나기 전까지 어떠한 접근도 허용하지 않음.

 

옵티마이저(Optimizer)

SQL를 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진.

여러 실행 계획을 세우고, 최고의 효율을 갖는 실행 계획을 판별해 그 실행 계획에 따라 쿼리를 수행.

 

DB 튜닝

첫번째 단계 : DB 설계 튜닝(모델링 관점)

  • DB 설계 단계에서 성능을 고려하여 설계.
  • 데이터 모델링, 인덱스 설계.
  • 데이터 파일, 테이블 스페이스 설계.
  • 데이터베이스 용량 산정.
  • ex. 반정규화, 분산파일배치.

두번째 단계 : DBMS 튜닝(환경 관점)

  • 성능을 고려하여 메모리나 블록 크기 지정.
  • CPU, 메모리 I/0 관점.
  • ex. buffer 크기, cache 크기.

세번째 단계 : SQL 튜닝(애플리케이션 관점)

  • SQL 작성 시 성능 고려.
  • JOIN, Indexing, SQL 실행 계획.
  • ex. hash, join.

 

RDBMS vs. NoSQL

RDBMS

  • 모든 데이터를 2차원 테이블 형태로 표현.
  • 장점
    • 스키마에 맞춰 데이터 관리하므로 데이터의 정합성 보장.
  • 단점
    • 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하되며 scale-out이 어려움.
  • 데이터 구조가 명확하고 변경될 여지가 없으며 스키마가 중요한 경우 사용하는 것을 권장.

NoSQL

  • 데이터 간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터 관리 가능.
  • 컬렉션이라는 형태로 데이터 관리.
  • 장점
    • 스키마 없이 key-value 형태로 데이터를 관리하므로 자유로움.
    • 데이터 분산이 용이하여 성능 향상을 위한 scale-up, scale-out이 가능.
  • 단점
    • 데이터 중복 발생 가능.
    • 중복된 데이터가 변경될 경우 모든 컬렉션을 수정해야 함.
    • 스키마가 존재하지 않으므로 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려움.
  • 정확한 데이터 구조를 알 수 없고 데이터가 변경 또는 확장될 수 있는 경우 사용하는 것을 권장.

 

JDBC

자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API.

데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공함.

 

MyBatis

JDBC를 좀더 편하게 사용할 수 있도록 객체를 SQL이나 저장 프로시저와 매핑 해주는 프레임워크.

SQL구문을 Java 메소드와 매핑해줌.

 

Redis

NoSQL의 종류로서, 간단한 키와 값의 쌍으로 데이터를 저장하는 구조.

메모리 기반으로 데이터베이스로, 디스크를 기반으로 하는 RDBMS보다 조회 속도 빠름.

실시간 데이터 처리 및 트랜잭션에 효과적.

사용자 세션, 캐싱, 랭킹 등 다양한 용도로 활용 가능.

 

캐싱(Caching)

나중에 요청 올 결과를 미리 저장해두었다가 빠르게 서비스할 수 있도록 하는 기술.

✅ 장점

  • 모든 유저의 요청을 DB로 처리하지 않아도 됨.
  • 사용자에게 높은 응답 속도를 제공하면서 DB 부하 감소로 성능적 이점을 취할 수 있음.

캐시 전략 패턴

  1. Look Aside
    • 데이터를 읽을 때 캐시를 우선 확인.
    • 캐시에 데이터가 있으면 캐시 데이터를 읽어서 반환.
    • 데이터가 없다면 DB에 접근해서 데이터를 가져와 레디스에 저장.
    • 캐시에는 찾는 데이터가 없을 때만 데이터가 캐싱되므로 지연 로딩에 해당.
    • 장점) 캐시에 문제가 생길 경우 DB로 요청 위임 가능.
    • 단점) 캐시와 DB의 데이터 정합성 유지가 어려움, 첫 조회 시 DB 부하 발생.
  2. Write Back
    • 모든 데이터를 캐시에 저장.
    • 캐시에 특정 시간 동안의 데이터가 저장됨.
    • 캐시에 있는 데이터를 DB에 저장함.
    • 장점) 쓰기 횟수 비용을 줄일 수 있음.
    • 단점) 캐시의 데이터 유실 문제 발생 가능.

사용 시 주의사항

  • 자주 사용되면서 변경이 되지 않는 데이터에 사용.
  • 유실되어도 크게 문제가 없는 데이터에 사용.
  • DB와 함께 사용할 때 데이터 정합성 문제 고려 필요.
댓글