본문 바로가기
IT

2025년 정보처리기사 필기 핵심 요약: 데이터베이스 이론 총정리

by 카카오망고 2025. 4. 11.
반응형

2025년 정보처리기사 필기 핵심 요약

목차

데이터베이스의 기본 개념과 정의

데이터베이스의 기본 개념과 정의

정보처리기사 필기를 처음 준비하시는 분이라면, 데이터베이스라는 단어 자체가 막연하게 느껴질 수 있어요. 무언가를 저장하는 시스템이라는 건 알겠지만, 그 구조나 목적, 그리고 왜 그토록 많은 기업과 서비스에서 데이터베이스를 사용하는지를 이해하지 못하면 공부가 지루해질 수 있어요. 그래서 이 과목을 제대로 시작하기 위해선, 가장 먼저 데이터베이스의 존재 이유와 기본 개념을 정확히 아는 것이 중요해요.

데이터베이스(Database)란 말 그대로 ‘데이터의 집합’이에요. 하지만 단순한 모음이 아니에요. 그것은 구조화된 방식으로 정리된 데이터의 체계를 의미해요. 더 정확하게 말하자면, 데이터베이스는 여러 사람이 공유하며 사용할 목적으로 체계적으로 저장된, 통합된 정보의 집합이에요. 그리고 그 정보는 언제든지 검색하고 수정할 수 있어야 하죠. 이처럼 데이터베이스는 정보의 저장소이자 지식의 기반이 된다고 할 수 있어요.

정보처리기사 필기 시험에서 자주 나오는 정의는 바로 이 부분이에요. 데이터베이스는 통합성(Integration), 저장성(Storage), 공유성(Sharing), 운영성(Operation)이라는 네 가지 주요 특성을 지녀요. 이 네 가지는 단순히 개념의 나열이 아니라, 실제 우리가 사용하는 데이터베이스의 기능과도 밀접한 관련이 있어요. 예를 들어 ‘공유성’은 여러 사용자가 동시에 데이터를 사용할 수 있게 해주는 시스템을 뜻하죠. 이런 특성들을 이해하면, 데이터베이스의 설계 철학도 보이기 시작해요.

데이터베이스를 효과적으로 활용하기 위해 우리는 DBMS(Database Management System)라는 시스템을 사용해요. DBMS는 데이터베이스를 만들고, 관리하고, 수정하고, 검색할 수 있도록 도와주는 소프트웨어예요. 오라클, MySQL, PostgreSQL 같은 이름들이 바로 대표적인 DBMS죠. 시험에서는 DBMS의 역할, 구성요소, 장단점 등을 자주 묻기 때문에 이 부분도 꼭 정리해두셔야 해요.

그리고 데이터베이스를 공부할 때 빼놓을 수 없는 개념이 있어요. 바로 데이터의 계층적 구조예요. 시험에서는 보통 ‘데이터 → 필드 → 레코드 → 파일 → 데이터베이스’의 순서로 구성된 계층 구조를 물어보곤 해요. 각각의 개념이 의미하는 바를 명확히 이해해야 문제를 정확히 풀 수 있어요. 예를 들어 레코드는 하나의 행, 필드는 하나의 열, 파일은 레코드들의 집합이라는 식으로 기억하시면 좋아요.

마지막으로, 데이터베이스는 단지 정보를 저장하는 도구가 아니라 의사결정을 지원하고, 기업과 사회가 돌아가도록 만드는 근간이에요. 우리가 앱에서 로그인하고, 온라인 쇼핑몰에서 상품을 검색하고, 병원에서 진료기록을 조회하는 모든 과정 뒤에는 데이터베이스가 있어요. 그래서 이 과목을 단순한 암기 과목으로 보지 말고, 현실 속 시스템을 이루는 ‘보이지 않는 엔진’으로 바라보시면 공부의 의미가 훨씬 더 깊어질 거예요.

ER 모델과 데이터 모델링 핵심 이해

ER 모델과 데이터 모델링 핵심 이해


데이터베이스를 구성하고 설계한다는 건 결국 정보를 구조화한다는 뜻이에요. 무작정 데이터를 쌓아놓는 것만으로는 의미 있는 정보가 되기 어렵고, 이를 논리적이고 체계적인 방식으로 정리해야만 제대로 활용할 수 있어요. 이때 등장하는 것이 바로 ER 모델(Entity-Relationship Model)이에요. 정보처리기사 필기 시험에서도 이 개념은 매우 자주 등장하며, 모델링의 기본을 구성하는 출발점이기도 해요.

ER 모델은 현실 세계의 개체(Entity), 속성(Attribute), 관계(Relationship)를 도식적으로 표현하는 데이터 모델이에요. 쉽게 말해, 우리가 알고 있는 ‘사람’, ‘상품’, ‘주문’과 같은 실체를 개체로 정의하고, 이들이 지닌 성질들—예를 들어 이름, 가격, 생년월일—을 속성으로 표현해요. 그리고 이 개체들이 서로 어떻게 연결되는지를 관계로 나타내죠. 이 구조는 복잡한 데이터 흐름을 시각적으로 파악하고 설계하는 데 굉장히 유용해요.

ER 다이어그램에서는 개체는 직사각형으로, 속성은 타원으로, 관계는 마름모 형태로 표현해요. 그리고 속성에는 단순 속성, 복합 속성, 유도 속성이 있고, 이 중 유도 속성은 다른 속성으로부터 계산되는 값을 의미해요. 시험에서는 어떤 속성이 어떤 유형에 해당하는지를 묻거나, ER 다이어그램에서 누락된 요소를 찾아내는 문제가 종종 출제되곤 해요.

또한 개체 간의 관계에는 1:1, 1:N, N:M과 같은 ‘카디널리티’ 개념이 존재해요. 예를 들어 ‘학생’과 ‘수강 과목’의 관계는 보통 1:N이 되겠죠. 한 명의 학생이 여러 과목을 들을 수 있지만, 하나의 과목이 여러 명의 학생과 매핑되기도 해요. 이런 관계를 올바르게 파악하고 표현하는 것이 바로 효과적인 모델링의 핵심이에요. 이 부분은 정규화와도 연결되기 때문에 더욱 중요해요.

정보처리기사 시험에서는 ER 모델의 구조뿐만 아니라 모델링 과정에서 생길 수 있는 오류나 비효율성을 파악하는 능력도 중요하게 평가돼요. 예를 들어, 하나의 개체 안에 중복 속성이 들어가거나, 관계가 지나치게 복잡해지는 경우 문제로 출제되죠. 따라서 ER 모델링을 공부할 때는 단순한 기호 암기에 그치지 말고, 현실 세계의 상황을 어떻게 데이터로 추상화할지에 대한 감각을 키우는 것이 핵심이에요.

또한 모델링은 단순히 ER 다이어그램에서 끝나지 않아요. 이후 논리적 모델로 전환되고, 다시 물리적 모델로 구현돼요. 이 흐름을 이해하고 있어야 데이터베이스 설계 전반의 그림을 제대로 그릴 수 있어요. 즉, ER 모델은 데이터베이스 설계의 출발선이자 중심축이라고 볼 수 있어요.

정규화 이론: 1NF부터 BCNF까지

정규화(Normalization)는 데이터베이스 설계에서 가장 중요한 개념 중 하나예요. 처음엔 다소 낯설고 복잡하게 느껴질 수 있지만, 그 본질은 의외로 단순해요. 바로 데이터의 중복을 제거하고, 일관성을 유지하면서 효율적인 구조로 데이터를 정리하는 것이에요. 이 과정을 통해 우리는 더 안정적이고 유지보수하기 쉬운 데이터베이스를 만들 수 있어요. 정보처리기사 필기에서 자주 출제되는 파트이기도 해서, 반드시 확실히 이해하고 넘어가야 해요.

정규화는 단계적으로 이루어지며, 각각의 단계에는 그에 맞는 조건과 목적이 존재해요. 제1정규형(1NF)은 가장 기본적인 단계로, 테이블 내 속성이 원자값만 가지도록 하는 것이 목적이에요. 즉, 하나의 셀에는 하나의 값만 들어가야 해요. 예를 들어 학생의 연락처를 하나의 필드에 ‘010-1234-5678, 010-9876-5432’처럼 저장하면 이는 1NF를 위반한 셈이죠. 이를 각각의 행으로 나누거나, 별도의 테이블로 분리하는 것이 정규화의 시작이에요.

다음 단계인 제2정규형(2NF)은 부분 함수 종속을 제거하는 단계예요. 이는 기본키가 복합키일 경우에만 해당돼요. 테이블 내 속성이 기본키의 일부분에만 종속되는 경우, 해당 속성을 따로 분리해야 한다는 원칙이에요. 이 과정에서는 ‘이 속성이 왜 이 테이블에 있어야 하지?’라는 질문을 스스로에게 던져보는 것이 좋아요. 불필요한 종속성은 곧 중복을 낳고, 이는 데이터 무결성에 악영향을 주게 되거든요.

제3정규형(3NF)은 이행적 함수 종속을 제거하는 단계예요. 다시 말해, 기본키가 아닌 어떤 속성이 또 다른 속성을 결정하게 되는 경우를 말해요. 예를 들어 학생 테이블에 학과코드와 학과명이 동시에 들어 있고, 학과코드로 학과명을 결정할 수 있다면, 이는 이행 종속이에요. 이런 구조는 테이블을 분리함으로써 해소할 수 있어요. 즉, 학과 정보를 따로 테이블로 분리하고 관계를 설정해주는 것이 바람직하죠.

정규화의 마지막 고지라 불리는 BCNF(Boyce-Codd Normal Form)는 제3정규형보다 한 단계 더 엄격한 조건을 요구해요. BCNF는 모든 결정자가 후보키일 것을 조건으로 해요. 쉽게 말해, 어떤 속성이 다른 속성을 결정한다면, 반드시 그 결정자도 후보키여야 한다는 뜻이에요. 시험에서는 BCNF에 해당하는 사례를 주고, 어느 정규형까지 만족하는지 묻는 유형이 자주 나오니, 예시 중심으로 정리해두면 좋아요.

정규화는 데이터를 정제하는 과정이자, 실수를 줄이기 위한 안전장치라고 할 수 있어요. 하지만 정규화가 지나치면 테이블이 너무 세분화돼서 조회할 때 비효율이 생길 수 있어요. 그래서 실무에서는 정규화뿐 아니라 역정규화(De-normalization)라는 개념도 함께 사용돼요. 이는 정규화를 어느 정도 풀어주는 방식으로, 성능 향상을 위해 일부 중복을 허용하는 전략이에요. 시험에서 자주 등장하지는 않지만, 정규화의 한계를 이해하는 데 도움이 되기 때문에 알아두는 게 좋아요.

SQL 핵심 구문과 실전 예시

정보처리기사 필기 시험에서 SQL은 빠질 수 없는 핵심 파트예요. 실무에서도 매일같이 사용되는 만큼 그 중요성은 두말할 필요도 없고, 시험에서도 꾸준히 출제되는 영역이에요. SQL은 ‘Structured Query Language’의 줄임말로, 데이터베이스에서 데이터를 조회하고, 삽입하고, 수정하고, 삭제하기 위해 사용하는 언어예요. 처음에는 그 문법이 익숙하지 않을 수 있지만, 자주 접하다 보면 오히려 가장 손에 잘 익는 도구가 되어준답니다.

SQL은 크게 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나눌 수 있어요. 데이터 정의어는 테이블을 생성하거나 구조를 변경할 때 사용돼요. 예를 들어 CREATE TABLE, ALTER TABLE, DROP TABLE 등이 있어요. 테이블을 만들고 지우는 것부터 시작되니, 데이터베이스의 기초를 다지는 느낌이죠. 이 명령어들의 기본 문법을 이해하고, 각각 어떤 상황에서 사용하는지를 기억해두는 게 좋아요.

그다음으로 가장 자주 접하게 되는 것이 데이터 조작어예요. 여기에 속하는 명령어로는 SELECT, INSERT, UPDATE, DELETE가 있어요. 특히 SELECT 구문은 거의 모든 실전 문제에 등장한다 해도 과언이 아니에요. 단순히 데이터를 불러오는 것을 넘어서, WHERE 조건절, GROUP BY, HAVING, ORDER BY 등을 조합해서 다양한 조건에 맞는 결과를 추출할 수 있어야 해요.

예를 들어, 다음과 같은 SELECT 구문은 시험에서 자주 나오는 형식이에요:

SELECT name, salary
FROM employee
WHERE department = '영업부'
ORDER BY salary DESC;

이 쿼리는 ‘영업부’에 속한 직원들의 이름과 급여를 출력하되, 급여를 기준으로 내림차순 정렬하는 기능을 해요. 이처럼 SELECT 구문은 다양한 조건과 함께 응용되기 때문에, 문장 구조를 익히는 것만큼이나 문제 의도를 파악하는 능력도 중요해요. 시험에서는 결과값을 예측하거나, 틀린 문장을 고르는 문제로 자주 출제돼요.

그 외에도 JOIN 문법은 꼭 익혀야 할 항목이에요. INNER JOIN, LEFT JOIN, RIGHT JOIN 등 여러 테이블을 연결하는 방식이 있는데, 이 부분은 헷갈릴 수 있으니 예시를 반복해서 푸는 것이 좋아요. 시험에서는 두 테이블 간의 관계를 보여주고, 어떤 JOIN 방식이 적절한지를 묻거나 결과 행 수를 물어보는 식으로 출제돼요. ER 모델과도 연결되는 개념이라서 함께 공부하면 시너지가 나요.

또한 SQL에서는 서브쿼리집계 함수도 중요한 주제예요. MAX, MIN, COUNT, AVG 같은 함수는 기본 중의 기본이고, SELECT * FROM (서브쿼리) 형태로 중첩 쿼리를 사용하는 유형도 출제 가능성이 높아요. 이때는 괄호 안의 쿼리가 먼저 실행된다는 점을 잊지 말아야 해요.

결국 SQL은 암기보다는 많이 써보면서 익히는 과목이에요. 직접 코드를 작성해보고, 결과를 예측해보고, 실수를 수정하면서 점점 더 능숙해지는 구조예요. 시험을 준비할 땐 기출문제를 많이 풀어보는 것이 가장 좋은 방법이에요. 자주 나오는 패턴을 익히고, 조건절의 순서를 기억하며, 어떤 문장이 문법적으로 틀렸는지를 구분하는 연습을 하면 점점 감이 생길 거예요.

무결성 제약조건과 데이터 신뢰성

데이터베이스는 단지 정보를 저장하는 공간에 머무르지 않아요. 정보는 살아있는 유기체처럼 끊임없이 추가되고 수정되며 삭제되기도 해요. 그렇기에 그 정보를 믿고 사용할 수 있으려면, 일정한 규칙 아래에서 그 무결성이 유지되어야 해요. 바로 이 지점을 지켜주는 것이 무결성 제약조건(Integrity Constraints)이에요. 정보처리기사 필기 시험에서도 이 주제는 자주 출제되는 영역이에요. 왜냐하면 데이터의 ‘신뢰성’이라는 것은 곧 시스템의 근간이 되기 때문이에요.

무결성 제약조건이란 말 그대로 데이터가 갖추어야 할 조건이나 규칙이에요. 이 규칙을 통해 우리는 ‘엉터리’ 데이터가 들어오는 것을 방지하고, 시스템이 예측 가능하고 안정적으로 작동할 수 있도록 만들 수 있어요. 예를 들어 주민등록번호에 영문이 들어가거나, 급여 항목에 음수가 입력되는 건 분명 이상하죠. 무결성 제약조건은 이런 잘못된 입력을 사전에 막는 일종의 ‘데이터 방역망’이에요.

시험에 자주 나오는 제약조건은 크게 다섯 가지예요: 도메인 제약조건, 개체 무결성, 참조 무결성, 고유 제약조건, NULL 제약조건이에요. 도메인 제약조건은 해당 열이 가질 수 있는 값의 유형과 범위를 지정하는 거예요. 예를 들어 성별 컬럼에는 'M' 또는 'F'만 들어가야 한다면, 이는 도메인 제약의 예시가 될 수 있어요.

개체 무결성(Primary Key Constraint)은 테이블 내의 각 행이 고유해야 한다는 규칙이에요. 즉, 기본 키(Primary Key)는 중복되거나 NULL일 수 없어요. 예를 들어 학생 테이블에서 학번은 각 학생을 식별하는 고유 값이기 때문에, 이 컬럼에 중복이나 비어 있는 값이 들어가는 것은 허용되지 않아요. 개체 무결성은 데이터를 정확히 식별하는 데 있어 가장 기본적인 조건이에요.

참조 무결성(Foreign Key Constraint)은 테이블 간의 관계를 유지시켜주는 조건이에요. 예를 들어 주문 테이블에 있는 고객 ID가 고객 테이블에 존재하지 않는다면, 이는 데이터 간 관계가 끊긴 것이죠. 외래 키(Foreign Key)는 이처럼 다른 테이블의 기본 키를 참조하도록 설정되어 있어요. 그리고 이 관계가 올바르게 연결되어 있는지를 검사하는 것이 바로 참조 무결성이에요.

고유 제약조건(UNIQUE Constraint)은 특정 컬럼 값이 중복되면 안 된다는 조건이에요. 기본 키와 유사하지만, 다른 점은 NULL 값이 허용된다는 것이에요. 예를 들어 이메일 주소처럼 고유해야 하는 데이터에 적절히 적용할 수 있어요. 반면 NULL 제약조건(NOT NULL)은 해당 컬럼에 비어 있는 값을 허용하지 않도록 설정하는 것이에요. 고객 이름이나 연락처처럼 반드시 값이 있어야 할 항목에 사용돼요.

무결성 제약조건은 단순히 데이터 오류를 방지하는 것 이상의 의미가 있어요. 그것은 시스템 전체의 신뢰를 지키는 최소한의 윤리이자 약속이에요. 우리가 어떤 시스템을 신뢰할 수 있으려면, 그 안의 데이터도 신뢰할 수 있어야 하잖아요. 그리고 그 신뢰는 결국 무결성이라는 단단한 기반 위에서만 가능하다는 걸, 이 과목은 끊임없이 말하고 있는 거예요.

트랜잭션과 병행 제어 이론 총정리

데이터베이스의 본질은 신뢰예요. 아무리 많은 데이터를 보관하고 있더라도, 그 정보가 언제 어떻게 바뀔지 예측할 수 없고, 동시에 여러 작업이 이루어질 때 충돌이 잦다면, 그 시스템은 결코 믿을 수 없을 거예요. 그래서 트랜잭션(Transaction)과 병행 제어(Concurrency Control)는 데이터베이스 이론의 정수라 불릴 만큼 중요한 개념이에요. 정보처리기사 필기에서도 이 단원은 개념의 깊이를 묻는 문제로 자주 출제돼요.

먼저 트랜잭션이란, 데이터베이스에서 하나의 작업 단위로 처리되는 연산들의 집합이에요. 예를 들어, 은행 계좌에서 돈을 이체할 때 ‘A 계좌에서 출금 → B 계좌로 입금’이 모두 끝나야만 의미가 있어요. 둘 중 하나라도 실패하면 전체 작업은 무효가 되어야 하죠. 이러한 전제에서 트랜잭션은 반드시 4가지 특성을 만족해야 해요. 그것이 바로 ACID예요.

ACID란 원자성(Atomicity), 일관성(Consistency), 독립성 또는 격리성(Isolation), 지속성(Durability)을 의미해요. 원자성은 트랜잭션 내 모든 작업이 하나처럼 실행되거나, 전부 실패하는 걸 뜻해요. 일관성은 트랜잭션 전과 후의 데이터 상태가 항상 규칙을 지켜야 함을 말하죠. 격리성은 동시에 실행되는 여러 트랜잭션이 서로 영향을 주지 않아야 한다는 뜻이고, 지속성은 성공적으로 완료된 트랜잭션은 시스템이 장애가 발생해도 그 결과가 유지되어야 한다는 특성이에요.

하지만 현실은 늘 이상적이지 않아요. 여러 사용자가 동시에 데이터를 조작하려 하면, 충돌이 발생할 수 있어요. 바로 이때 필요한 것이 병행 제어예요. 병행 제어는 여러 트랜잭션이 동시에 실행될 때도 데이터의 일관성을 유지하기 위해 사용돼요. 대표적인 병행 제어 방식에는 로킹(Locking), 타임스탬프 순서 제어, 낙관적 검증 기법 등이 있어요.

가장 기본적인 방식은 로킹이에요. 하나의 트랜잭션이 특정 데이터를 사용하는 동안에는 다른 트랜잭션이 그 데이터를 건드리지 못하게 잠그는 방식이에요. 이때는 공유 잠금(Shared Lock)과 배타 잠금(Exclusive Lock)의 개념을 이해해야 해요. 공유 잠금은 읽기만 가능하게 하고, 배타 잠금은 읽기와 쓰기를 모두 막는 방식이에요. 하지만 잠금은 충돌을 줄여주는 대신, 성능 저하나 교착 상태(Deadlock) 같은 문제도 동반할 수 있어요.

이런 이유로 등장한 것이 타임스탬프 기반 병행 제어예요. 트랜잭션마다 시간 값을 부여하고, 이를 기준으로 순서를 결정하는 방식이에요. 비교적 정교한 제어가 가능하고 교착 상태를 피할 수 있지만, 연산 취소(Rollback)가 잦을 수 있다는 단점도 있어요. 반면 낙관적 검증 기법은 충돌이 잘 일어나지 않을 거라 가정하고 일단 작업을 진행한 후, 마지막에 검증을 통해 문제가 없으면 반영하고, 있으면 취소하는 방식이에요.

트랜잭션 관련 문제에서는 ACID 특성 중 어느 것이 위배되었는지 고르거나, 병행 제어 방식 중 어떤 것이 사용되었는지를 묻는 유형이 자주 나와요. 따라서 용어와 정의를 암기하는 것을 넘어, 실제 시나리오 속에서 어떤 방식이 왜 필요한지를 이해하는 것이 중요해요. 예를 들어 두 사람이 동시에 같은 장바구니를 수정할 때 어떤 문제가 발생하는지를 상상해보면, 격리성과 병행 제어의 필요성을 몸으로 느낄 수 있을 거예요.

결론적으로 트랜잭션과 병행 제어는 단순한 기술적 개념을 넘어서, 데이터를 어떻게 안전하게 다룰 수 있는가에 대한 철학이기도 해요. 이 개념을 정확히 이해하고 있다면, 정보처리기사 필기뿐만 아니라 실무에서도 훨씬 탄탄한 기반을 다질 수 있어요. 여러분이 설계하는 시스템이 믿음을 주는 구조가 되길 바란다면, 이 단원에서 반드시 확실한 이해를 얻고 넘어가야 해요.

반응형