NOTE
의도 : 데이터베이스 카테고리는 데이터베이스 설계 및 관리 능력을 평가합니다. RDBMS와 NoSQL의 차이를 이해하고, 데이터베이스 내에서 데이터를 어떻게 저장하고 조회할지에 대한 기본적인 이해를 확인하려는 의도입니다. 정규화, 인덱스, 트랜잭션 등의 개념을 알고 있는지는 실무에서 중요한 데이터 처리 성능과 무결성을 보장하는 능력으로 이어집니다.
답변에 포함해야 할 키워드
- RDB vs NoSQL: 관계형 데이터베이스와 비관계형 데이터베이스의 차이
- 정규화(Normalization): 데이터 중복을 최소화하여 데이터 구조를 최적화하는 과정
- 인덱스(Index): 데이터를 빠르게 검색하기 위한 구조
- 트랜잭션(Transaction): 일련의 데이터베이스 작업의 일관성을 보장하는 방법
- ACID 특성: 데이터베이스 트랜잭션의 신뢰성을 보장하는 특성 (원자성, 일관성, 고립성, 지속성)
- 개인/팀 프로젝트에 적용해 보았거나 사용할 줄 아는 RDB에 대해 이야기해주세요.
- RDB와 NoSQL DB의 차이점을 설명해주세요.
- 데이터베이스에서 인덱스를 사용하는 이유와 인덱스가 성능에 미치는 영향을 설명해주세요.
- 데이터베이스 정규화(Normalization)와 역정규화(Denormalization)의 차이점에 대해 설명해 주세요.
- 트랜잭션(Transaction)이 무엇이며, ACID 특성을 설명해 주세요.
1. RDB
개인/팀 프로젝트에 적용해 보았거나 사용할 줄 아는 RDB에 대해 이야기해주세요.
RDB (Relational Database)
- 관계형 데이터베이스
- 데이터를 구조적으로 저장하고 관리하기 위해 테이블 형식을 사용하는 데이터베이스
- 테이블간의 관계를 설정하여 데이터를 효율적으로 관리
주요 특징
- 테이블 기반 구조 : 행(row)과 열(column)로 구성된 표 형식
- 정규화 : 데이터의 중복을 최소화하고, 데이터 무결성 유지를 위해 테이블 분리 및 관계 설정
- SQL
- 관계 : 테이블 간 관계를 설정하여 데이터 연결 가능
- ACID 특성
장점
- 데이터 무결성 유지
- 효율적인 데이터 관리
- 중복 최소화(정규화)
RDBMS
- RDB를 관리하는 소프트웨어
- MySQL, PostgreSQL
MySQL
- 속도와 단순성을 중시하는 데이터베이스
- 사용이 간단함
- 빠르고 간단한 읽기 중심의 웹 애플리케이션에 적합
이커머스 플랫폼 개발에서 MySQL을 사용한 이유
- 팀원 대부분이 MySQL에 익숙하여 빠르게 시작할 수 있었고 조회 기능이 많이 사용되는 이커머스 플랫폼 특성상 단순 조회 성능이 빠른 MySQL을 선택
PostgreSQL
- 대량 데이터 처리 및 트랜잭션에 강력
- 단순 읽기 작업에선 성능이 떨어짐
- 안전성과 확장성이 중요하거나 복잡한 트랜잭션과 데이터 분석이 필요한 시스템에 적합
물류 관리 시스템에서 PostgreSQL을 사용한 이유
- MSA로 개발을 진행하다 보니 각 모듈 간 데이터 통신의 안전성과 무결성이 중요하여 복잡한 트랜잭션을 처리할 수 있는 PostgreSQL 선택
2. RDB와 NoSQL DB
RDB와 NoSQL DB의 차이점을 설명해주세요.
RDB
- 데이터를 테이블의 형태로 저장
- 각 테이블은 명확한 스키마를 가짐
- ACID를 완벽히 지원해 트랜잭션이 중요하고 데이터의 무결성이 필수인 경우 적합
- Scale-up(더 강력한 서버로 업그레이드)에 적합
- 복잡한 조인과 쿼리 처리 가능, 정형 데이터 처리에 적합
- 트랜잭션과 데이터 무결성이 중요한 시스템(금융, 은행, ERP 등)
NoSQL DB
- 데이터를 비정형 방식으로 저장
- 키-값, 문서, 열 등 여러 유형의 데이터 모델 지원
- 스키마가 유연하거나 없어 데이터구조가 변동되는 애플리케이션에 적합
- 일관성이 즉각적으로 보장되지 않으며 성능과 확장성을 위해 일관성 대신 가용성을 우선시
- Scale-out(노드를 추가해 확장)에 적합
- 대량의 데이터를 처리하거나 고가용성이 필요한 시스템에 적합
- 비정형 데이터나 반정형 데이터 처리에 적합
- 조인 대신 데이터 중복을 허용해 성능 개선
- 대규모 처리와 유연성이 중요한 시스템(소셜 네트워크, 캐싱 등)
RDBMS와 NoSQL의 장단점은 무엇인가요?
RDBMS는 정형화된 스키마로 일관성과 데이터 무결성이 유지되며 안전한 트랜잭션을 보장합니다. 하지만 확장이 어렵고 스키마 변경이 복잡하다는 단점이 있습니다. NoSQL은 대규모 데이터를 효율적으로 처리할 수 있지만 트랜잭션 보장이 약한 단점이 있습니다.
RDB와 NoSQL DB의 차이점을 설명해주세요.
RDB와 NoSQL은 데이터 저장 방식에서 큰 차이가 있습니다. RDB는 데이터를 테이블 형태로 저장하며 각 테이블은 정형화된 데이터로 구성됩니다. 데이터를 저장하기 전에 스키마를 정의하고 데이터 간의 관계를 명확히 설정합니다. 또한 ACID 원칙을 엄격하게 따르기 때문에 데이터의 일관성과 무결성을 보장하며 트랜잭션 처리가 중요한 시스템에 적합합니다. NoSQL DB는 데이터를 키-값 형태나 json등 다양한 형태로 저장할 수 있습니다. NoSQL은 유연한 스키마를 제공하기 때문에 데이터 구조가 자주 변경될 경우에 적합합니다. 일관성보다 가용성과 확장성을 중요시해 대규모 데이터 처리와 유연성이 중요한 시스템에 주로 사용됩니다.
3. 데이터 베이스 인덱스
데이터베이스에서 인덱스를 사용하는 이유와 인덱스가 성능에 미치는 영향을 설명해주세요.
인덱스를 사용하는 이유
- 검색 속도 향상
- 빠른 검색 지원을 위해 데이터를 정렬하거나 트리 구조로 저장하여 전체 테이블을 스캔하지 않고도 빠르게 검색할 수 있음
- 정렬 및 그룹화 성능 향상
- 정렬이나 그룹화 연산을 빠르게 수행할 수 있도록 도와줌
- JOIN 성능 향상
- JOIN연산을 수행할 때 인덱스를 사용하면 두 테이블을 결합할 때 필요한 데이터를 더 빨리 찾을 수 있어 성능이 향상됨
인덱스가 성능에 미치는 영향
- 읽기 성능 향상
- 데이터를 조회하거나 검색할 때 인덱스를 활용하면 테이블 전체를 스캔하는 것보다 빠르게 원하는 데이터를 찾을 수 있음
- 쓰기 성능 저하
- 데이터베이스에 데이터를 삽입, 갱신, 삭제할 때 인덱스를 업데이트해야하기 때문에 쓰기 연산이 느려질 수 있음
- 디스크 공간 증가
- 인덱스를 사용하면 추가 디스크 공간이 필요해짐. 특히 복합 인덱스나 큰 테이블에서 인덱스가 차지하는 공간이 많아질 수 있음.
인덱스는 읽기 성능을 크게 향상시키지만 쓰기 성능에는 부정적인 영향을 미칠 수 있음
인덱스를 삭제하거나 변경하는 경우, 성능에 어떤 영향을 미칠까요?
단기적인 성능 개선이나 디스크 공간 절약을 가져올 수 있지만 읽기 성능 저하나 쓰기 성능의 일시적인 저하를 초래할 수 있습니다. 인덱스를 삭제하는 경우 삽입, 삭제, 갱신 시 인덱스를 업데이트 할 필요가 없으므로 쓰기 성능이 향상되며 인덱스가 차지했던 디스크공간을 확보할 수 있습니다. 하지만 해당 인덱스를 사용한 검색 쿼리의 조회 성능이 떨어지게 됩니다. 또한 인덱스를 변경하여 쿼리를 최적화하거나 자주 사용하지 않는 인덱스를 제거하거나 변경하여 불필요한 디스크 공간을 절약할 수 있지만, 인덱스를 변경하는 과정에서 테이블 잠금이 일어나 성능 저하가 발생할 수 있고 인덱스 변경 후 해당 인덱스를 다시 업데이트하거나 정렬하는 데 시간이 소요됩니다.
4. 데이터베이스 정규화(Normalization)와 역정규화(Denormalization)
데이터베이스 정규화(Normalization)와 역정규화(Denormalization)의 차이점에 대해 설명해 주세요.
데이터베이스 정규화
- 중복을 최소화하고 데이터의 무결성을 유지하기 위해 데이터를 여러 테이블로 나누는 과정
- 유지보수에 용이하지만 테이블 분리로 인해 JOIN 연산이 많아지고 조회 성능이 떨어질 수 있음
데이터베이스 역정규화
- 정규화된 데이터베이스 구조를 다시 중복 데이터를 포함하도록 결합하는 과정
- 자주 조회되는 데이터를 한 테이블에 모아서 쿼리 속도를 빠르게 만듦
- 데이터를 여러 테이블에서 하나의 테이블로 합치거나, 중복데이터를 일부로 저장하여 조인 연산을 줄이도록 설계
- 쿼리 성능이 향상되지만 중복 데이터가 발생해 저장 공간이 증가하고 한 곳에서 데이터가 수정될 때 다른 테이블의 데이터를 일관성있게 갱신해야 함
정규화와 역정규화의 차이점에 대해 설명해주세요
정규화는 데이터베이스에서 중복을 최소화하고 데이터 무결성을 보장하는 방식으로 데이터를 여러 테이블에 분리하여 저장합니다. 이를 통해 데이터 중복을 방지하고, 일관성을 유지할 수 있습니다. 반면 역정규화는 성능을 개선하기 위해 정규화로 분리된 테이블을 다시 합치거나 데이터를 중복시켜 저장하는 방식입니다. 조인 연산을 줄일 수 있어 읽기 성능을 높일 수 있습니다.
정규화된 데이터베이스에서 발생할 수 있는 성능 문제는 무엇인가요?
정규화된 데이터베이스는 여러 테이블에 데이터가 분산되어 있기 때문에 데이터를 조회할 때 조인 연산이 많이 발생합니다. 이로 인해 조회 성능이 저하될 수 있습니다.
정규화 진행 후 성능 문제가 발생하면 어떻게 대응하시겠습니까?
만약 정규화 진행 후 성능 문제가 발생한다면 역정규화를통해 읽기 성능을 개선하거나 자주 조회되는 컬럼에 인덱스를 추가하여 조회 성능을 개선할 수 있습니다. 또한 불필요한 조인이나 서브쿼리를 제거하거나 자주 조회되는 데이터는 캐싱을 이용해 데이터 베이스 조회를 최소화 할 수 있습니다.
정규화된 테이블에서 데이터 삽입 성능을 최적화하려면 어떻게 해야할까요?
여러 개의 삽입 작업을 하나의 트랜잭션으로 묶어 처리하거나 다수의 데이터를 한번에 삽입하는 배치 작업을 사용하여 성능을 개선할 수 있습니다. 필요한 경우 정규화 수준을 조정하여 일부 테이블을 합쳐 성능을 개선할 수 있습니다.
데이터베이스에서 중복된 데이터를 피하기 위해 사용하는 기법은 무엇이 있나요?
정규화를 사용해 데이터를 여러 테이블로 분리하여 중복된 데이터를 제거할 수 있습니다. 또한 테이블 컬럼에 Unique 제약조건을 설정하거나 primary Key를 설정하여 중복된 데이터를 방지할 수 있습니다.
역정규화를 고려할 때, 어떤 점을 가장 중요하게 고려하나요?
데이터의 일관성과 성능의 균형을 고려해야합니다. 역정규화를 통해 데이터를 중복시킬 수 있지만 그로 인한 데이터 일관성 문제를 해결해야 하며, 데이터 업데이트시 동기화 문제를 고려하고 읽기 성능이 개선되는지 확인해야 합니다.
5. 트랜잭션, ACID
트랜잭션(Transaction)이 무엇이며, ACID 특성을 설명해 주세요.
트랜잭션
- 데이터베이스에서 일련의 작업들이 하나의 단위로 처리되도록 보장하는 작업의 집합
- 데이터의 무결성을 유지하고 여러 사용자가 동시에 데이터에 접근할 때 발생할 수 있는 문제를 방지하는 역할
원자성
- 트랜잭션 내의 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함
- 트랜잭션 내 일부 작업이 실패하면 그 이전까지의 작업도 모두 취소되어야 하며 데이터는 트랜잭션 시작 전 상태로 롤백되어야 함
일관성
- 트랜잭션이 완료 후에 일관된 상태를 유지해야한다는 특성
- 트랜잭션 실행 전후로 규칙과 제약조건이 모두 지켜져야 함
격리성
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 보장하는 특성
- 트랜잭션간의 충돌을 방지하고 일관성있는 결과를 보장함
지속성
- 트랜잭션 성공 후 그 결과가 영구적으로 데이터베이스에 반영되어야 한다는 특징
- 변경된 데이터는 손실도지 않고 지속적으로 저장
트랜잭션이 실패했을 때 어떤 방식으로 데이터를 복구하나요?
데이터베이스는 ACID의 원자성을 보장하며 데이터의 무결성을 유지합니다. 트랜잭션 실패 시 데이터베이스는 이전 상태로 돌아가기 위해 롤백을 수행합니다. 롤백은 트랜잭션이 수행한 모든 변경 작업을 취소하고 트랜잭션이 시작되기 전 상태로 데이터를 복원합니다.
트랜잭션이 일관성을 유지하는 방법에 대해 설명해주세요
트랜잭션의 일관성은 ACID의 일관성을 기반으로 합니다. 데이터베이스는 키본키, 외래키 등 무결성 제약조건을 설정하여 데이터를 일관되게 유지합니다. 만약 중간에 오류가 발생하면 롤백하여 일관성을 유지합니다.
데이터베이스에서 트랜잭션이 완료되지 않은 경우에 어떻게 처리가 되나요?
시스템 장애 등으로 트랜잭션이 완료되지 않은 경우 트랜잭션 로그를 사용하여 데이터의 일관성을 보장합니다. 시스템이 복구될 때 트랜잭션 로그를 이용해 완료되지 않은 트랜잭션을 식별하고 이를 롤백하여 데이터베이스를 장애 발생 전으로 되돌립니다.
Feedback
- 좋았던 점 : ACID 특성, RDB와 NoSQL DB의 차이점에 대해 잘 말했다.
- 개선할 점
- 전체적으로 답변이 단순하다 → 다양한 답변이 나오지 않고 단답형으로 말했다. 예) 인덱스의 성능이 미치는 영향을 단점에 대해서만 말했다.
- 트랜잭션의 개념을 잘못 말했다. 개념이 정의가 정확하지 않을 때가 있다.