2026.08.19 | 전공자·정보처리기사 수준 | 인프라 직무 대비 | 총 24문항 · ★★★ 최빈출 / ★★ 자주 출제 / ★ 기본
이 파일 하나로 모든 단원이 포함되어 있어 어디로 옮겨도 동작합니다.
| 단원 | |
|---|---|
| 데이터베이스 기초 개념 최빈출 | 12문항 |
| SQL 실습 최빈출 | 12문항 |
대상: 전공자 · 정보처리기사 취득자 | 목적: 인프라 직무(네트워크·클라우드·시스템·보안) 기술 면접 대비 중요도: ★★★ 최빈출 · ★★ 자주 출제 · ★ 기본 개념
답안 관계형 데이터베이스는 데이터를 행과 열로 구성된 테이블 형태로 저장하고, 스키마가 사전에 고정되어 있으며 SQL을 통해 데이터를 조작합니다. 테이블 간 관계는 외래키로 정의되고 ACID 트랜잭션을 보장해 정합성이 중요한 금융, 주문 시스템에 적합합니다. NoSQL은 스키마가 유연하거나 없으며 문서형(MongoDB), 키-값형(Redis), 컬럼형(Cassandra), 그래프형(Neo4j) 등 데이터 모델이 다양합니다. 대량의 비정형/반정형 데이터를 수평 확장(샤딩)으로 처리하는 데 강점이 있고, 강한 일관성보다 가용성과 확장성을 우선시하는 경우가 많습니다(BASE 특성). 면접에서는 "왜 이 프로젝트에 RDBMS 대신 NoSQL을 선택했는가"처럼 트레이드오프를 설명하는 능력을 자주 확인합니다.
관련 개념 스키마리스, 샤딩, CAP 이론, BASE, 수평/수직 확장
답안 정규화는 데이터의 중복을 최소화하고 삽입·삭제·갱신 이상(anomaly)을 방지하기 위해 테이블을 분해하는 설계 기법입니다. 제1정규형(1NF)은 각 속성이 원자값을 가지도록 하고, 제2정규형(2NF)은 기본키의 일부에만 종속되는 부분 함수 종속을 제거합니다. 제3정규형(3NF)은 기본키가 아닌 속성이 다른 비키 속성에 종속되는 이행적 종속을 제거해 데이터 일관성을 높입니다. 정규화를 거치면 저장 공간이 절약되고 갱신 시 한 곳만 수정하면 되지만, 조인이 늘어나 조회 성능이 저하될 수 있어 실무에서는 조회 성능을 위해 의도적으로 반정규화를 병행하기도 합니다.
관련 개념 이상현상(삽입/삭제/갱신 이상), 함수적 종속, BCNF, 반정규화, 조인 비용
답안 원자성(Atomicity)은 트랜잭션 내 모든 연산이 전부 성공하거나 전부 실패해야 한다는 원칙입니다. 일관성(Consistency)은 트랜잭션 수행 전후로 데이터베이스가 정의된 제약조건을 항상 만족하는 상태를 유지해야 함을 의미합니다. 고립성(Isolation)은 동시에 실행되는 트랜잭션들이 서로의 중간 결과에 영향을 주지 않도록 격리되는 것이고, 지속성(Durability)은 커밋된 트랜잭션의 결과는 시스템 장애가 발생해도 영구적으로 보존되어야 함을 뜻합니다. 이 네 가지 특성은 은행 이체처럼 여러 연산이 하나의 논리적 단위로 묶여야 하는 상황에서 데이터 정합성을 보장하는 핵심 근거가 됩니다.
관련 개념 커밋/롤백, 트랜잭션 로그(WAL), 격리 수준, 데드락, 회복 기법(REDO/UNDO)
답안 기본키는 테이블 내에서 각 행(row)을 유일하게 식별하는 속성 또는 속성 집합으로, NULL을 허용하지 않으며 중복될 수 없습니다. 외래키는 다른 테이블의 기본키를 참조하는 속성으로, 두 테이블 간의 관계를 표현하며 참조 무결성을 보장하는 역할을 합니다. 예를 들어 주문(Order) 테이블의 고객ID는 고객(Customer) 테이블의 기본키를 참조하는 외래키이며, 이를 통해 존재하지 않는 고객의 주문이 생성되는 것을 방지합니다. 외래키에는 NULL이 허용될 수 있고, 부모 테이블의 데이터가 삭제될 때 자식 테이블의 처리 방식을 CASCADE, SET NULL, RESTRICT 등으로 지정할 수 있습니다.
관련 개념 참조 무결성, 후보키/대체키, 복합키, ON DELETE CASCADE, 자연키/대리키
답안 인덱스는 테이블의 특정 컬럼 값을 빠르게 찾을 수 있도록 별도로 정렬·구조화해 둔 자료구조로, 대부분 B-Tree 기반으로 구현됩니다. 인덱스가 없으면 조건에 맞는 행을 찾기 위해 테이블 전체를 스캔(Full Table Scan)해야 하지만, 인덱스가 있으면 트리 구조를 탐색해 O(log n) 수준으로 원하는 데이터에 접근할 수 있습니다. 다만 인덱스는 별도의 저장 공간을 차지하고, INSERT/UPDATE/DELETE 시마다 인덱스도 함께 갱신해야 하므로 쓰기 성능은 저하될 수 있습니다. 따라서 WHERE절, JOIN, ORDER BY에 자주 사용되는 컬럼에 선택적으로 인덱스를 생성하는 것이 중요하며, 카디널리티(값의 다양성)가 낮은 컬럼은 인덱스 효과가 떨어집니다.
관련 개념 B-Tree/B+Tree, 클러스터형/비클러스터형 인덱스, 카디널리티, 커버링 인덱스, 풀 스캔
답안 ERD는 데이터베이스에 저장할 개체(Entity)와 개체 간의 관계(Relationship), 속성(Attribute)을 시각적으로 표현한 다이어그램입니다. 개체는 테이블로, 속성은 컬럼으로, 관계는 외래키나 별도의 관계 테이블로 구현되는 것이 일반적입니다. ERD를 작성하면 실제 구현에 앞서 데이터 구조와 업무 규칙을 이해관계자들과 함께 검토할 수 있어 설계 오류를 조기에 발견할 수 있습니다. 관계는 1:1, 1:N, N:M 등의 카디널리티로 표현되며, N:M 관계는 실제 테이블 구현 시 중간에 연결 테이블(교차 테이블)을 두어 두 개의 1:N 관계로 분해합니다.
관련 개념 개체·속성·관계, 카디널리티(1:1, 1:N, N:M), 연결 테이블, 개념적/논리적/물리적 설계, 식별관계
답안 트랜잭션은 시작되면 활성(Active) 상태가 되어 연산을 수행하고, 마지막 연산까지 실행되면 부분완료(Partially Committed) 상태가 됩니다. 이후 변경 사항이 데이터베이스에 영구 반영되면 완료(Committed) 상태가 되고, 정상적으로 트랜잭션이 종료됩니다. 만약 실행 중 오류가 발생하면 실패(Failed) 상태가 되고, 지금까지의 변경 사항을 취소하는 철회(Aborted/Rollback) 과정을 거쳐 트랜잭션 시작 이전 상태로 복구됩니다. 이 상태 전이 모델은 회복 관리자가 시스템 장애 시 REDO/UNDO 연산을 판단하는 기준이 됩니다.
관련 개념 커밋 포인트, 롤백, 회복 관리자, 체크포인트, 로그 기반 회복
답안 개체 무결성(Entity Integrity)은 기본키를 구성하는 속성이 NULL 값을 가질 수 없고 중복되어서도 안 된다는 제약으로, 각 행을 유일하게 식별하기 위한 최소 조건입니다. 참조 무결성(Referential Integrity)은 외래키 값이 참조하는 테이블의 기본키 값으로 존재하거나 NULL이어야 한다는 제약으로, 서로 다른 테이블 간의 관계 일관성을 보장합니다. 예를 들어 주문 테이블의 고객ID가 실제 고객 테이블에 존재하지 않는 값을 가지면 참조 무결성이 깨진 것입니다. 이 두 무결성 제약은 DBMS가 자동으로 검증하도록 스키마 정의 시 PRIMARY KEY와 FOREIGN KEY 제약조건으로 명시합니다.
관련 개념 도메인 무결성, 제약조건(CHECK, UNIQUE, NOT NULL), 캐스케이드 옵션, 무결성 위반 처리
답안 뷰는 하나 이상의 실제 테이블을 기반으로 정의된 가상 테이블로, 실제 데이터를 저장하지 않고 조회할 때마다 정의된 쿼리를 실행해 결과를 보여줍니다. 뷰를 사용하면 복잡한 조인이나 서브쿼리를 감춰 사용자가 단순화된 인터페이스로 데이터에 접근할 수 있고, 특정 컬럼이나 행만 노출시켜 보안성을 높일 수 있습니다. 반면 뷰는 매번 기반 쿼리를 다시 실행하므로 복잡한 뷰는 조회 성능이 저하될 수 있고, 일반적으로 여러 테이블을 조인한 뷰는 삽입·수정·삭제 연산에 제약이 따릅니다. 자주 조회되지만 실시간성이 크게 중요하지 않은 경우 결과를 실제로 저장하는 구체화 뷰(Materialized View)를 고려하기도 합니다.
관련 개념 가상 테이블, 구체화 뷰, 뷰 갱신 제약, 데이터 은닉, 논리적 독립성
답안 정규화되지 않은 테이블에서는 세 가지 이상현상이 발생할 수 있습니다. 삽입 이상은 예를 들어 학생-수강 정보가 한 테이블에 있을 때, 아직 수강 신청을 하지 않은 학생을 등록하려면 수강 정보를 NULL로 채워야 하는 문제입니다. 삭제 이상은 특정 학생의 유일한 수강 기록을 삭제하면 그 학생의 다른 정보(학과 등)까지 함께 사라지는 문제입니다. 갱신 이상은 동일한 정보가 여러 행에 중복 저장되어 있을 때 일부 행만 수정하면 데이터 불일치가 발생하는 문제입니다. 이러한 이상현상은 정규화를 통해 테이블을 적절히 분해함으로써 해결할 수 있습니다.
관련 개념 정규화, 함수적 종속, 데이터 중복, 무결성 유지, 테이블 분해
답안 슈퍼키(Super Key)는 튜플을 유일하게 식별할 수 있는 속성의 집합으로, 불필요한 속성이 포함되어도 무방합니다. 후보키(Candidate Key)는 슈퍼키 중에서 최소성을 만족하는, 즉 더 이상 속성을 제거하면 유일성을 잃는 키입니다. 후보키가 여러 개 존재할 수 있으며, 이 중 대표로 선택된 것이 기본키(Primary Key)이고 선택되지 않은 나머지 후보키들은 대체키(Alternate Key)라고 부릅니다. 예를 들어 학생 테이블에서 학번과 주민등록번호가 모두 후보키가 될 수 있다면, 학번을 기본키로 정하고 주민등록번호는 대체키가 됩니다.
관련 개념 최소성, 유일성, 복합키, 자연키/대리키, 무결성 제약
답안 CAP 이론은 분산 시스템에서 일관성(Consistency), 가용성(Availability), 분단 허용성(Partition Tolerance) 세 가지를 동시에 모두 만족할 수 없고, 네트워크 분단이 발생했을 때 최대 두 가지만 선택 가능하다는 이론입니다. 분산 환경에서는 네트워크 분단이 항상 발생할 수 있다고 가정해야 하므로, 실질적으로는 일관성과 가용성 중 하나를 우선시하는 트레이드오프를 하게 됩니다. 예를 들어 카산드라(Cassandra)는 가용성을 우선시하는 AP 시스템에 가깝고, 전통적인 RDBMS나 일부 NoSQL(HBase 등)은 일관성을 우선시하는 CP 시스템에 가깝습니다. 실무에서는 서비스 요구사항(강한 일관성이 필요한 결제 시스템 vs 높은 가용성이 필요한 SNS 피드)에 따라 적합한 데이터베이스를 선택합니다.
관련 개념 분산 시스템, 최종적 일관성(Eventual Consistency), AP/CP/CA, 복제(Replication), 파티션 분단
대상: 전공자 · 정보처리기사 취득자 | 목적: 인프라 직무(네트워크·클라우드·시스템·보안) 기술 면접 대비 중요도: ★★★ 최빈출 · ★★ 자주 출제 · ★ 기본 개념
답안 INNER JOIN은 두 테이블에서 조인 조건을 만족하는 행만 결과에 포함시킵니다. LEFT JOIN은 왼쪽 테이블의 모든 행을 포함하고, 오른쪽 테이블에 매칭되는 값이 없으면 해당 컬럼을 NULL로 채웁니다. RIGHT JOIN은 반대로 오른쪽 테이블의 모든 행을 기준으로 하며, FULL OUTER JOIN은 양쪽 테이블의 모든 행을 포함하고 매칭되지 않는 부분은 NULL로 채웁니다. 예를 들어 고객 테이블과 주문 테이블을 LEFT JOIN하면 주문 이력이 없는 고객도 결과에 포함되지만, INNER JOIN을 사용하면 주문한 적 있는 고객만 조회됩니다. MySQL은 FULL OUTER JOIN을 직접 지원하지 않아 UNION으로 LEFT JOIN과 RIGHT JOIN 결과를 합쳐 구현하기도 합니다.
관련 개념 카티전 곱, ON절/WHERE절, NULL 처리, 셀프 조인, 조인 순서와 옵티마이저
답안 서브쿼리는 하나의 SQL 문 안에 포함된 또 다른 SELECT 문으로, 메인 쿼리의 조건절이나 SELECT절, FROM절 등에 사용될 수 있습니다. 스칼라 서브쿼리는 단일 값을 반환해 비교 연산에 사용되고, 다중행 서브쿼리는 여러 값을 반환해 IN, ANY, ALL 연산자와 함께 사용됩니다. 상관 서브쿼리(Correlated Subquery)는 외부 쿼리의 각 행마다 참조되어 재실행되므로 일반 서브쿼리보다 성능이 떨어질 수 있어 실무에서는 JOIN으로 대체 가능한지 검토합니다. FROM절에 사용되는 서브쿼리는 인라인 뷰라고 부르며, 결과를 임시 테이블처럼 활용할 수 있습니다.
관련 개념 인라인 뷰, 상관 서브쿼리, EXISTS, ANY/ALL, 서브쿼리 대 조인 성능
답안 GROUP BY는 지정한 컬럼 값을 기준으로 행들을 그룹화하여 COUNT, SUM, AVG 등의 집계 함수를 적용할 수 있게 해줍니다. HAVING은 그룹화된 결과에 대해 조건을 걸어 필터링하는 절로, 집계 함수의 결과를 조건으로 사용할 수 있다는 점이 특징입니다. 반면 WHERE는 그룹화가 일어나기 전 개별 행 단위로 필터링을 수행하며 집계 함수를 조건에 사용할 수 없습니다. 예를 들어 "부서별 평균 급여가 300만원 이상인 부서"를 조회하려면 WHERE가 아닌 HAVING AVG(salary) >= 3000000 형태로 작성해야 하며, 실행 순서상 WHERE가 먼저 적용되고 그 다음 GROUP BY, 마지막으로 HAVING이 적용됩니다.
관련 개념 집계 함수, SQL 실행 순서, ROLLUP/CUBE, 그룹화 카디널리티, DISTINCT
답안 격리 수준은 낮은 순서대로 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE이 있습니다. READ UNCOMMITTED는 커밋되지 않은 데이터도 읽을 수 있어 더티 리드(Dirty Read)가 발생할 수 있습니다. READ COMMITTED는 커밋된 데이터만 읽도록 하여 더티 리드는 방지하지만, 같은 트랜잭션 내에서 동일 쿼리를 두 번 실행했을 때 결과가 달라지는 反복 불가능한 읽기(Non-repeatable Read)가 발생할 수 있습니다. REPEATABLE READ는 트랜잭션이 시작된 시점의 스냅샷을 유지해 반복 읽기 문제를 방지하지만, 새로운 행이 추가되어 나타나는 팬텀 리드(Phantom Read)는 완전히 막지 못할 수 있습니다(MySQL InnoDB는 갭 락으로 대부분 방지). SERIALIZABLE은 트랜잭션을 순차적으로 실행한 것과 동일한 결과를 보장하는 가장 엄격한 수준이지만 동시성이 크게 저하됩니다.
관련 개념 더티 리드, Non-repeatable Read, 팬텀 리드, MVCC, 갭 락
답안 공유 락(Shared Lock, S-Lock)은 데이터를 읽을 때 걸리는 락으로 다른 트랜잭션도 동시에 공유 락을 획득해 읽을 수 있지만 쓰기는 불가능합니다. 배타 락(Exclusive Lock, X-Lock)은 데이터를 수정할 때 걸리는 락으로, 해당 락이 걸린 자원에는 다른 트랜잭션이 공유 락이든 배타 락이든 획득할 수 없습니다. 데드락은 두 개 이상의 트랜잭션이 서로 상대방이 가진 락을 기다리며 무한 대기하는 상태로, 예를 들어 트랜잭션 A가 자원 1을 잠그고 자원 2를 기다리는 동시에 트랜잭션 B가 자원 2를 잠그고 자원 1을 기다리면 발생합니다. DBMS는 대기 그래프(Wait-for Graph)를 통해 데드락을 탐지하면 둘 중 하나의 트랜잭션을 강제로 롤백시켜 해결하며, 애플리케이션 차원에서는 자원 접근 순서를 일관되게 유지해 예방할 수 있습니다.
관련 개념 2단계 락킹(2PL), 데드락 탐지/예방, 타임아웃, 낙관적/비관적 락, 락 에스컬레이션
답안 인덱스는 조회 성능을 높이지만 만능은 아닙니다. 카디널리티가 낮은 컬럼(예: 성별처럼 값 종류가 적은 컬럼)에 인덱스를 걸면 옵티마이저가 인덱스를 타지 않고 풀 스캔을 선택할 수 있어 효과가 미미합니다. 또한 인덱스 컬럼에 함수나 연산을 적용하면(예: WHERE YEAR(date) = 2024) 인덱스를 활용하지 못하는 경우가 많습니다. 데이터의 INSERT/UPDATE/DELETE가 빈번한 테이블에 인덱스가 많으면 매 쓰기 연산마다 인덱스 구조도 갱신해야 하므로 오히려 쓰기 성능이 크게 저하될 수 있습니다. 따라서 인덱스는 조회 패턴을 분석해 실제로 자주 사용되는 컬럼에만 선택적으로 생성하는 것이 중요합니다.
관련 개념 카디널리티, 함수 기반 인덱스, 옵티마이저, 실행 계획(EXPLAIN), 인덱스 유지 비용
답안
실행 계획은 DBMS의 옵티마이저가 쿼리를 어떤 방식으로 처리할지(테이블 접근 방법, 조인 순서, 사용 인덱스 등) 보여주는 정보로, MySQL에서는 EXPLAIN, Oracle에서는 EXPLAIN PLAN으로 확인합니다. 이를 통해 쿼리가 인덱스를 제대로 사용하는지, 풀 테이블 스캔이 발생하는지, 예상 처리 행 수(rows)가 얼마나 되는지를 사전에 파악할 수 있습니다. 주요 확인 항목으로는 접근 방식(type: const, ref, range, ALL 등), 사용된 키(key), 예상 스캔 행 수(rows), 추가 정보(Extra: Using filesort, Using temporary 등)가 있습니다. 특히 "Using filesort"나 "Using temporary"가 나타나면 정렬이나 임시 테이블 생성으로 성능 저하가 발생할 수 있어 인덱스나 쿼리 구조 개선을 검토해야 합니다.
관련 개념 옵티마이저, 접근 방식(type), Using filesort, 통계 정보, 쿼리 튜닝
답안 UNION은 두 개 이상의 SELECT 결과를 합칠 때 중복된 행을 제거하여 반환하는 반면, UNION ALL은 중복 제거 없이 모든 결과를 그대로 합칩니다. 중복 제거 과정에는 정렬이나 해시 연산이 필요하기 때문에 UNION은 UNION ALL보다 일반적으로 성능이 느립니다. 따라서 두 결과 집합에 중복이 없다는 것이 보장되거나 중복 제거가 필요 없는 경우에는 UNION ALL을 사용하는 것이 성능상 유리합니다. 또한 UNION으로 결합하려는 각 SELECT 문은 컬럼의 개수와 데이터 타입이 서로 호환되어야 합니다.
관련 개념 중복 제거, 정렬/해시 연산, 컬럼 호환성, 성능 최적화, 집합 연산자(INTERSECT, MINUS)
답안 DDL(Data Definition Language)은 테이블이나 스키마 구조를 정의하는 명령어로 CREATE, ALTER, DROP, TRUNCATE가 있으며 실행 시 자동 커밋되는 경우가 많습니다. DML(Data Manipulation Language)은 데이터를 조작하는 명령어로 SELECT, INSERT, UPDATE, DELETE가 해당하며, 트랜잭션 제어의 대상이 됩니다. DCL(Data Control Language)은 권한을 부여하거나 회수하는 명령어로 GRANT와 REVOKE가 있습니다. TCL(Transaction Control Language)은 트랜잭션을 제어하는 명령어로 COMMIT, ROLLBACK, SAVEPOINT가 있으며, 이를 통해 여러 DML 작업을 하나의 논리적 단위로 묶어 처리할 수 있습니다.
관련 개념 트랜잭션 커밋/롤백, 권한 관리, 스키마 변경, SAVEPOINT, 암시적 커밋
답안
인덱스를 효과적으로 활용하려면 우선 인덱스가 걸린 컬럼을 가공하지 않고 그대로 조건절에 사용해야 합니다. 예를 들어 WHERE SUBSTR(name, 1, 3) = 'ABC'처럼 함수를 적용하면 인덱스를 타지 못하므로 WHERE name LIKE 'ABC%'처럼 앞부분 일치 검색으로 바꾸는 것이 좋습니다. 복합 인덱스를 사용할 때는 인덱스에 정의된 컬럼 순서와 조건절의 순서가 일치해야 효율적으로 활용되며, 이를 선행 컬럼 원칙이라고 합니다. 또한 JOIN을 사용할 때는 조인 조건에 사용되는 컬럼에도 인덱스를 생성해두면 조인 연산 속도가 크게 향상되며, 데이터 타입이 다른 컬럼끼리 비교하면 암묵적 형변환이 발생해 인덱스를 타지 못할 수 있으므로 주의해야 합니다.
관련 개념 복합 인덱스, 선행 컬럼, 암묵적 형변환, LIKE 검색 패턴, 커버링 인덱스
답안 세 함수 모두 윈도우 함수로 OVER절과 함께 정렬 순위를 매기지만 동점 처리 방식이 다릅니다. ROW_NUMBER()는 값이 같더라도 무조건 고유한 순번을 1, 2, 3, 4처럼 순차적으로 부여합니다. RANK()는 동점인 행에 같은 순위를 부여하되 다음 순위는 동점 개수만큼 건너뛰어(예: 1, 2, 2, 4) 부여합니다. DENSE_RANK()는 동점에 같은 순위를 부여하지만 다음 순위를 건너뛰지 않고 연속적으로(예: 1, 2, 2, 3) 부여합니다. 예를 들어 부서별 급여 순위를 매길 때 동점자를 어떻게 처리할지에 따라 적절한 함수를 선택해야 합니다.
관련 개념 윈도우 함수, PARTITION BY, OVER절, 동점 처리, TOP-N 쿼리
답안 옵티마이저는 SQL 문을 실행하기에 가장 효율적인 실행 계획을 자동으로 선택해주는 DBMS의 핵심 구성 요소로, 대부분의 현대 DBMS는 비용 기반 옵티마이저(CBO)를 사용합니다. CBO는 테이블의 행 수, 데이터 분포, 인덱스 유무 등의 통계 정보를 바탕으로 여러 실행 경로의 예상 비용(디스크 I/O, CPU 사용량)을 계산해 가장 저렴한 계획을 선택합니다. 만약 통계 정보가 오래되어 실제 데이터 분포와 차이가 크면 옵티마이저가 비효율적인 실행 계획(예: 인덱스가 있음에도 풀 스캔 선택)을 세울 수 있으므로, 대량의 데이터 변경 후에는 통계 정보를 갱신(ANALYZE TABLE 등)해주는 것이 중요합니다. 이는 실무에서 갑자기 쿼리가 느려지는 원인 중 하나로 자주 언급됩니다.
관련 개념 비용 기반 옵티마이저(CBO), 통계 정보 갱신, 실행 계획 캐시, 히스토그램, 인덱스 선택도