콘텐츠로 이동

데이터베이스 연습문제


관계형 데이터베이스

Q1. 다음 중 제2정규형(2NF)을 위반하는 경우는?

  1. 속성값이 원자값이 아닌 경우
  2. 기본키의 일부에만 종속된 속성이 존재하는 경우
  3. 이행 함수 종속이 존재하는 경우
  4. 결정자가 후보키가 아닌 경우

Q2. 학생(학번, 이름, 학과코드, 학과명) 테이블에서 학번 → 학과코드 → 학과명 관계가 존재할 때 위반되는 정규형은?

  1. 1NF
  2. 2NF
  3. 3NF
  4. BCNF

Q3. ER 다이어그램에서 M:N 관계를 관계형 데이터베이스로 변환할 때 올바른 방법은?

  1. 한쪽 테이블에 외래키를 추가한다
  2. 중간 연결 테이블을 생성한다
  3. 두 테이블을 하나로 합친다
  4. 슈퍼타입/서브타입으로 분리한다

SQL

Q4. 다음 SQL 실행 결과로 옳은 것은?

SELECT dept, COUNT(*), AVG(salary)
FROM Employee
GROUP BY dept
HAVING AVG(salary) > 3000;
  1. 전체 직원의 부서별 평균 급여를 조회한다
  2. 평균 급여가 3000 초과인 부서의 정보를 조회한다
  3. 급여가 3000 초과인 직원의 부서를 조회한다
  4. 모든 부서의 직원 수와 평균 급여를 조회한다

Q5. LEFT JOIN에 대한 설명으로 옳은 것은?

  1. 양쪽 테이블에서 일치하는 행만 반환한다
  2. 오른쪽 테이블의 모든 행과 왼쪽의 일치 행을 반환한다
  3. 왼쪽 테이블의 모든 행을 반환하며, 일치하지 않는 경우 NULL로 채운다
  4. 두 테이블의 모든 조합을 반환한다

Q6. 뷰(View)에 대한 설명으로 옳지 않은 것은?

  1. 실제 데이터를 저장하지 않는 가상 테이블이다
  2. 복잡한 쿼리를 단순화할 수 있다
  3. 뷰에 직접 인덱스를 생성하여 성능을 향상시킬 수 있다
  4. 특정 컬럼을 숨겨 보안성을 높일 수 있다

Q7. DDL과 DML의 차이로 옳은 것은?

  1. DDL은 수동 COMMIT이 필요하고, DML은 자동 COMMIT된다
  2. DDL은 자동 COMMIT되고, DML은 ROLLBACK이 가능하다
  3. DDL과 DML 모두 ROLLBACK이 가능하다
  4. DDL과 DML 모두 자동 COMMIT된다

트랜잭션

Q8. 트랜잭션의 ACID 속성 중 "트랜잭션이 완료된 후 결과가 영구적으로 반영된다"는 속성은?

  1. 원자성(Atomicity)
  2. 일관성(Consistency)
  3. 격리성(Isolation)
  4. 지속성(Durability)

Q9. 격리 수준 중 더티 리드(Dirty Read)를 허용하는 가장 낮은 격리 수준은?

  1. READ COMMITTED
  2. READ UNCOMMITTED
  3. REPEATABLE READ
  4. SERIALIZABLE

Q10. 다음 설명에 해당하는 동시성 문제는?

트랜잭션 A가 같은 조건으로 두 번 조회했을 때, 두 번째 조회에서 이전에 없던 행이 나타남

  1. 더티 리드(Dirty Read)
  2. 반복 불가능 읽기(Non-repeatable Read)
  3. 팬텀 리드(Phantom Read)
  4. 갱신 손실(Lost Update)

NoSQL

Q11. CAP 정리에서 분산 시스템이 반드시 만족해야 하는 속성은?

  1. 일관성(Consistency)
  2. 가용성(Availability)
  3. 분할 내성(Partition Tolerance)
  4. 원자성(Atomicity)

Q12. 다음 중 문서 저장소(Document Store) NoSQL에 해당하는 것은?

  1. Redis
  2. Cassandra
  3. MongoDB
  4. Neo4j

Q13. 세션 관리와 캐싱에 주로 사용되는 NoSQL 유형은?

  1. 문서 저장소
  2. 키-값 저장소
  3. 컬럼 패밀리 저장소
  4. 그래프 저장소


Q14. 기본키(Primary Key)의 특성으로 옳지 않은 것은?

  1. 테이블 내에서 유일한 값이어야 한다
  2. NULL 값을 가질 수 없다
  3. 하나의 테이블에 여러 개의 기본키를 설정할 수 있다
  4. 다른 테이블의 외래키가 참조할 수 있다

Q15. 다음 SQL에서 서브쿼리의 역할로 옳은 것은?

SELECT name FROM Employee
WHERE salary > (SELECT AVG(salary) FROM Employee);
  1. 부서별 평균 급여를 계산한다
  2. 전체 직원의 평균 급여를 계산하여 비교 기준으로 사용한다
  3. 급여가 가장 높은 직원을 찾는다
  4. 모든 직원의 이름을 조회한다

Q16. TRUNCATE와 DELETE의 차이로 옳은 것은?

  1. TRUNCATE는 특정 행만 삭제할 수 있다
  2. DELETE는 ROLLBACK이 불가능하다
  3. TRUNCATE는 DDL로 ROLLBACK이 불가능하다
  4. 두 명령어는 동일하다

Q17. 인덱스가 가장 효과적으로 활용되는 경우는?

  1. 테이블 전체 행을 조회할 때
  2. 특정 컬럼으로 검색 조건이 자주 사용될 때
  3. INSERT가 빈번하게 발생할 때
  4. 데이터가 자주 변경될 때

Q18. 다음 중 공유락(Shared Lock)에 대한 설명으로 옳은 것은?

  1. 하나의 트랜잭션만 획득 가능하다
  2. 다른 트랜잭션의 읽기를 차단한다
  3. 여러 트랜잭션이 동시에 획득 가능하다
  4. 쓰기 연산에 사용된다

Q19. 다음 설명에 해당하는 NoSQL 유형은?

소셜 네트워크에서 친구 관계, 팔로워를 표현하거나 추천 알고리즘에 활용된다.

  1. 키-값 저장소
  2. 문서 저장소
  3. 컬럼 패밀리 저장소
  4. 그래프 저장소

Q20. 관계형 DB에서 참조 무결성(Referential Integrity)에 대한 설명으로 옳은 것은?

  1. 기본키는 NULL이 될 수 없다
  2. 외래키 값은 참조하는 테이블의 기본키에 존재하는 값이어야 한다
  3. 모든 속성값은 원자값이어야 한다
  4. 기본키는 변경할 수 없다

Q21. 다음 중 MVCC(Multi-Version Concurrency Control)의 장점으로 옳은 것은?

  1. 쓰기 성능이 읽기보다 항상 빠르다
  2. 읽기와 쓰기가 서로를 차단하지 않아 동시성이 높아진다
  3. 데이터를 이전 버전 없이 단일 버전만 유지한다
  4. 락(Lock) 기반보다 저장 공간을 적게 사용한다

복합 문제

Q22. 다음 상황에서 적합한 정규화 단계와 해결 방법은?

주문 테이블: (주문번호, 고객번호, 고객명, 고객주소, 상품코드, 상품명, 수량) 주문번호+상품코드가 기본키이며, 고객명은 고객번호에만 종속되어 있다.

  1. 1NF 위반 — 속성값을 원자값으로 분리
  2. 2NF 위반 — 고객 테이블을 별도로 분리
  3. 3NF 위반 — 이행 종속 제거
  4. BCNF 위반 — 결정자를 후보키로 변경

Q23. 다음 트랜잭션 시나리오에서 발생하는 문제와 이를 방지할 격리 수준은?

트랜잭션 A가 잔액 100만원을 읽음 → 트랜잭션 B가 잔액을 50만원으로 수정 후 COMMIT → 트랜잭션 A가 다시 잔액을 읽었더니 50만원으로 변경됨

  1. 더티 리드 — READ COMMITTED로 방지
  2. 반복 불가능 읽기 — REPEATABLE READ로 방지
  3. 팬텀 리드 — SERIALIZABLE로 방지
  4. 갱신 손실 — READ UNCOMMITTED로 방지

Q24. 대규모 쇼핑몰 시스템에서 상품 카탈로그(유연한 속성, 다양한 카테고리)와 주문/결제(정합성 필수) 데이터를 저장할 때 가장 적합한 DB 선택은?

  1. 상품 카탈로그: RDBMS / 주문: NoSQL
  2. 상품 카탈로그: NoSQL(문서) / 주문: RDBMS
  3. 상품 카탈로그와 주문 모두 RDBMS
  4. 상품 카탈로그와 주문 모두 NoSQL

Q25. 다음 SQL의 실행 순서로 옳은 것은?

SELECT dept, AVG(salary)
FROM Employee
WHERE age > 30
GROUP BY dept
HAVING AVG(salary) > 5000
ORDER BY AVG(salary) DESC;
  1. SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
  2. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
  3. FROM → SELECT → WHERE → GROUP BY → HAVING → ORDER BY
  4. WHERE → FROM → GROUP BY → SELECT → HAVING → ORDER BY

복합 문제 2

Q26. 인덱스와 트랜잭션의 관계에 대한 설명으로 옳은 것은?

  1. 인덱스는 트랜잭션 격리 수준에 영향을 받지 않는다
  2. INSERT/UPDATE/DELETE 트랜잭션 수행 시 인덱스도 함께 갱신된다
  3. 인덱스가 많을수록 트랜잭션 성능이 향상된다
  4. 인덱스는 ROLLBACK 시 원래 상태로 되돌아가지 않는다

Q27. 정규화와 성능의 관계로 옳은 것은?

  1. 정규화를 많이 할수록 항상 성능이 향상된다
  2. 정규화는 중복을 줄이지만 조인이 많아져 읽기 성능이 저하될 수 있다
  3. 역정규화(Denormalization)는 데이터 무결성을 높인다
  4. BCNF까지 정규화하면 더 이상 이상 현상이 발생하지 않는다

Q28. 다음 중 SQL 집계 함수와 NULL 처리에 대한 설명으로 옳은 것은?

  1. COUNT(*)는 NULL을 포함하여 행 수를 센다
  2. SUM(column)은 NULL을 0으로 처리한다
  3. AVG(column)는 NULL 포함 전체 행 수로 나눈다
  4. MAX(column)는 NULL을 최댓값으로 처리한다

Q29. 소셜 미디어 플랫폼에서 "A가 B를 팔로우하고, B가 C를 팔로우할 때, A와 C의 공통 팔로워 찾기"에 가장 적합한 DB는?

  1. RDBMS (MySQL)
  2. 키-값 저장소 (Redis)
  3. 문서 저장소 (MongoDB)
  4. 그래프 저장소 (Neo4j)

Q30. 다음 중 데이터베이스 설계 순서로 옳은 것은?

  1. 물리적 설계 → 논리적 설계 → 개념적 설계
  2. 개념적 설계(ER 다이어그램) → 논리적 설계(릴레이션) → 물리적 설계(인덱스, 파티션)
  3. 논리적 설계 → 개념적 설계 → 물리적 설계
  4. 개념적 설계 → 물리적 설계 → 논리적 설계

정답

번호 정답 해설
Q1 2 2NF 위반 = 부분 함수 종속 (기본키 일부에만 종속)
Q2 3 학번→학과코드→학과명은 이행 함수 종속 → 3NF 위반
Q3 2 M:N은 중간 연결 테이블로 분해해야 관계형 DB에서 표현 가능
Q4 2 HAVING은 GROUP BY 후 집계 조건 필터
Q5 3 LEFT JOIN = 왼쪽 테이블 전체 + 오른쪽 일치 행 (없으면 NULL)
Q6 3 뷰에는 직접 인덱스 생성 불가
Q7 2 DDL(CREATE/DROP 등)은 자동 COMMIT, DML은 수동 COMMIT/ROLLBACK 가능
Q8 4 지속성(Durability): COMMIT 후 영구 반영
Q9 2 READ UNCOMMITTED는 커밋 안 된 데이터도 읽음 (더티 리드 발생)
Q10 3 팬텀 리드: 같은 조건 조회 시 없던 행이 나타나거나 사라지는 현상
Q11 3 분산 시스템에서 네트워크 파티션(P)은 불가피 → P는 필수
Q12 3 MongoDB = 문서 저장소 / Redis = 키-값 / Cassandra = 컬럼 / Neo4j = 그래프
Q13 2 키-값 저장소(Redis)가 세션·캐싱에 최적
Q14 3 하나의 테이블에 기본키는 1개만 설정 가능
Q15 2 스칼라 서브쿼리: 단일 값(전체 평균) 반환 후 비교 기준으로 사용
Q16 3 TRUNCATE = DDL → 자동 COMMIT, ROLLBACK 불가 / DELETE = DML → ROLLBACK 가능
Q17 2 인덱스는 검색 조건(WHERE)이 자주 사용되는 컬럼에 효과적
Q18 3 공유락(S-Lock): 읽기용, 여러 트랜잭션 동시 획득 가능
Q19 4 그래프 저장소: 노드(사람)와 엣지(관계) 표현에 최적
Q20 2 참조 무결성: 외래키 값은 참조 테이블의 PK에 반드시 존재해야 함
Q21 2 MVCC: 이전 버전 데이터 유지 → 읽기와 쓰기가 서로 차단 안 함
Q22 2 고객명이 기본키 일부(고객번호)에만 종속 → 2NF 위반 → 고객 테이블 분리
Q23 2 같은 데이터를 두 번 읽었을 때 값이 달라짐 = 반복 불가능 읽기 → REPEATABLE READ로 방지
Q24 2 유연한 스키마 → NoSQL(문서) / 결제·정합성 → RDBMS
Q25 2 SQL 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
Q26 2 DML 수행 시 인덱스도 함께 갱신 → 쓰기 성능 저하 원인
Q27 2 정규화: 중복↓, 조인↑ → 읽기 성능 저하 가능 → 역정규화로 보완
Q28 1 COUNT(*)는 NULL 포함 / COUNT(column)은 NULL 제외 / SUM·AVG는 NULL 무시
Q29 4 관계 탐색(팔로워, 공통 친구)은 그래프 DB가 최적
Q30 2 DB 설계 순서: 개념적(ER) → 논리적(릴레이션) → 물리적(인덱스)