데이터베이스 연습문제¶
관계형 데이터베이스¶
Q1. 다음 중 제2정규형(2NF)을 위반하는 경우는?
- 속성값이 원자값이 아닌 경우
- 기본키의 일부에만 종속된 속성이 존재하는 경우
- 이행 함수 종속이 존재하는 경우
- 결정자가 후보키가 아닌 경우
Q2. 학생(학번, 이름, 학과코드, 학과명) 테이블에서 학번 → 학과코드 → 학과명 관계가 존재할 때 위반되는 정규형은?
- 1NF
- 2NF
- 3NF
- BCNF
Q3. ER 다이어그램에서 M:N 관계를 관계형 데이터베이스로 변환할 때 올바른 방법은?
- 한쪽 테이블에 외래키를 추가한다
- 중간 연결 테이블을 생성한다
- 두 테이블을 하나로 합친다
- 슈퍼타입/서브타입으로 분리한다
SQL¶
Q4. 다음 SQL 실행 결과로 옳은 것은?
- 전체 직원의 부서별 평균 급여를 조회한다
- 평균 급여가 3000 초과인 부서의 정보를 조회한다
- 급여가 3000 초과인 직원의 부서를 조회한다
- 모든 부서의 직원 수와 평균 급여를 조회한다
Q5. LEFT JOIN에 대한 설명으로 옳은 것은?
- 양쪽 테이블에서 일치하는 행만 반환한다
- 오른쪽 테이블의 모든 행과 왼쪽의 일치 행을 반환한다
- 왼쪽 테이블의 모든 행을 반환하며, 일치하지 않는 경우 NULL로 채운다
- 두 테이블의 모든 조합을 반환한다
Q6. 뷰(View)에 대한 설명으로 옳지 않은 것은?
- 실제 데이터를 저장하지 않는 가상 테이블이다
- 복잡한 쿼리를 단순화할 수 있다
- 뷰에 직접 인덱스를 생성하여 성능을 향상시킬 수 있다
- 특정 컬럼을 숨겨 보안성을 높일 수 있다
Q7. DDL과 DML의 차이로 옳은 것은?
- DDL은 수동 COMMIT이 필요하고, DML은 자동 COMMIT된다
- DDL은 자동 COMMIT되고, DML은 ROLLBACK이 가능하다
- DDL과 DML 모두 ROLLBACK이 가능하다
- DDL과 DML 모두 자동 COMMIT된다
트랜잭션¶
Q8. 트랜잭션의 ACID 속성 중 "트랜잭션이 완료된 후 결과가 영구적으로 반영된다"는 속성은?
- 원자성(Atomicity)
- 일관성(Consistency)
- 격리성(Isolation)
- 지속성(Durability)
Q9. 격리 수준 중 더티 리드(Dirty Read)를 허용하는 가장 낮은 격리 수준은?
- READ COMMITTED
- READ UNCOMMITTED
- REPEATABLE READ
- SERIALIZABLE
Q10. 다음 설명에 해당하는 동시성 문제는?
트랜잭션 A가 같은 조건으로 두 번 조회했을 때, 두 번째 조회에서 이전에 없던 행이 나타남
- 더티 리드(Dirty Read)
- 반복 불가능 읽기(Non-repeatable Read)
- 팬텀 리드(Phantom Read)
- 갱신 손실(Lost Update)
NoSQL¶
Q11. CAP 정리에서 분산 시스템이 반드시 만족해야 하는 속성은?
- 일관성(Consistency)
- 가용성(Availability)
- 분할 내성(Partition Tolerance)
- 원자성(Atomicity)
Q12. 다음 중 문서 저장소(Document Store) NoSQL에 해당하는 것은?
- Redis
- Cassandra
- MongoDB
- Neo4j
Q13. 세션 관리와 캐싱에 주로 사용되는 NoSQL 유형은?
- 문서 저장소
- 키-값 저장소
- 컬럼 패밀리 저장소
- 그래프 저장소
Q14. 기본키(Primary Key)의 특성으로 옳지 않은 것은?
- 테이블 내에서 유일한 값이어야 한다
- NULL 값을 가질 수 없다
- 하나의 테이블에 여러 개의 기본키를 설정할 수 있다
- 다른 테이블의 외래키가 참조할 수 있다
Q15. 다음 SQL에서 서브쿼리의 역할로 옳은 것은?
- 부서별 평균 급여를 계산한다
- 전체 직원의 평균 급여를 계산하여 비교 기준으로 사용한다
- 급여가 가장 높은 직원을 찾는다
- 모든 직원의 이름을 조회한다
Q16. TRUNCATE와 DELETE의 차이로 옳은 것은?
- TRUNCATE는 특정 행만 삭제할 수 있다
- DELETE는 ROLLBACK이 불가능하다
- TRUNCATE는 DDL로 ROLLBACK이 불가능하다
- 두 명령어는 동일하다
Q17. 인덱스가 가장 효과적으로 활용되는 경우는?
- 테이블 전체 행을 조회할 때
- 특정 컬럼으로 검색 조건이 자주 사용될 때
- INSERT가 빈번하게 발생할 때
- 데이터가 자주 변경될 때
Q18. 다음 중 공유락(Shared Lock)에 대한 설명으로 옳은 것은?
- 하나의 트랜잭션만 획득 가능하다
- 다른 트랜잭션의 읽기를 차단한다
- 여러 트랜잭션이 동시에 획득 가능하다
- 쓰기 연산에 사용된다
Q19. 다음 설명에 해당하는 NoSQL 유형은?
소셜 네트워크에서 친구 관계, 팔로워를 표현하거나 추천 알고리즘에 활용된다.
- 키-값 저장소
- 문서 저장소
- 컬럼 패밀리 저장소
- 그래프 저장소
Q20. 관계형 DB에서 참조 무결성(Referential Integrity)에 대한 설명으로 옳은 것은?
- 기본키는 NULL이 될 수 없다
- 외래키 값은 참조하는 테이블의 기본키에 존재하는 값이어야 한다
- 모든 속성값은 원자값이어야 한다
- 기본키는 변경할 수 없다
Q21. 다음 중 MVCC(Multi-Version Concurrency Control)의 장점으로 옳은 것은?
- 쓰기 성능이 읽기보다 항상 빠르다
- 읽기와 쓰기가 서로를 차단하지 않아 동시성이 높아진다
- 데이터를 이전 버전 없이 단일 버전만 유지한다
- 락(Lock) 기반보다 저장 공간을 적게 사용한다
복합 문제¶
Q22. 다음 상황에서 적합한 정규화 단계와 해결 방법은?
주문 테이블: (주문번호, 고객번호, 고객명, 고객주소, 상품코드, 상품명, 수량) 주문번호+상품코드가 기본키이며, 고객명은 고객번호에만 종속되어 있다.
- 1NF 위반 — 속성값을 원자값으로 분리
- 2NF 위반 — 고객 테이블을 별도로 분리
- 3NF 위반 — 이행 종속 제거
- BCNF 위반 — 결정자를 후보키로 변경
Q23. 다음 트랜잭션 시나리오에서 발생하는 문제와 이를 방지할 격리 수준은?
트랜잭션 A가 잔액 100만원을 읽음 → 트랜잭션 B가 잔액을 50만원으로 수정 후 COMMIT → 트랜잭션 A가 다시 잔액을 읽었더니 50만원으로 변경됨
- 더티 리드 — READ COMMITTED로 방지
- 반복 불가능 읽기 — REPEATABLE READ로 방지
- 팬텀 리드 — SERIALIZABLE로 방지
- 갱신 손실 — READ UNCOMMITTED로 방지
Q24. 대규모 쇼핑몰 시스템에서 상품 카탈로그(유연한 속성, 다양한 카테고리)와 주문/결제(정합성 필수) 데이터를 저장할 때 가장 적합한 DB 선택은?
- 상품 카탈로그: RDBMS / 주문: NoSQL
- 상품 카탈로그: NoSQL(문서) / 주문: RDBMS
- 상품 카탈로그와 주문 모두 RDBMS
- 상품 카탈로그와 주문 모두 NoSQL
Q25. 다음 SQL의 실행 순서로 옳은 것은?
SELECT dept, AVG(salary)
FROM Employee
WHERE age > 30
GROUP BY dept
HAVING AVG(salary) > 5000
ORDER BY AVG(salary) DESC;
- SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
- FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- FROM → SELECT → WHERE → GROUP BY → HAVING → ORDER BY
- WHERE → FROM → GROUP BY → SELECT → HAVING → ORDER BY
복합 문제 2¶
Q26. 인덱스와 트랜잭션의 관계에 대한 설명으로 옳은 것은?
- 인덱스는 트랜잭션 격리 수준에 영향을 받지 않는다
- INSERT/UPDATE/DELETE 트랜잭션 수행 시 인덱스도 함께 갱신된다
- 인덱스가 많을수록 트랜잭션 성능이 향상된다
- 인덱스는 ROLLBACK 시 원래 상태로 되돌아가지 않는다
Q27. 정규화와 성능의 관계로 옳은 것은?
- 정규화를 많이 할수록 항상 성능이 향상된다
- 정규화는 중복을 줄이지만 조인이 많아져 읽기 성능이 저하될 수 있다
- 역정규화(Denormalization)는 데이터 무결성을 높인다
- BCNF까지 정규화하면 더 이상 이상 현상이 발생하지 않는다
Q28. 다음 중 SQL 집계 함수와 NULL 처리에 대한 설명으로 옳은 것은?
- COUNT(*)는 NULL을 포함하여 행 수를 센다
- SUM(column)은 NULL을 0으로 처리한다
- AVG(column)는 NULL 포함 전체 행 수로 나눈다
- MAX(column)는 NULL을 최댓값으로 처리한다
Q29. 소셜 미디어 플랫폼에서 "A가 B를 팔로우하고, B가 C를 팔로우할 때, A와 C의 공통 팔로워 찾기"에 가장 적합한 DB는?
- RDBMS (MySQL)
- 키-값 저장소 (Redis)
- 문서 저장소 (MongoDB)
- 그래프 저장소 (Neo4j)
Q30. 다음 중 데이터베이스 설계 순서로 옳은 것은?
- 물리적 설계 → 논리적 설계 → 개념적 설계
- 개념적 설계(ER 다이어그램) → 논리적 설계(릴레이션) → 물리적 설계(인덱스, 파티션)
- 논리적 설계 → 개념적 설계 → 물리적 설계
- 개념적 설계 → 물리적 설계 → 논리적 설계
정답¶
| 번호 | 정답 | 해설 |
|---|---|---|
| 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) → 논리적(릴레이션) → 물리적(인덱스) |