2026년 5월 23일
안녕하세요 아기사자 여러분! 오늘은 데이터베이스에 대해 알아보는 시간을 가질 거에요. 객체지향 프로그래밍에서 데이터와 메서드를 묶어 안전하게 관리했다면, 이제는 "데이터 그 자체를 어떻게 효율적으로 설계하고 관리할 것인가"에 대해 이야기해 볼 차례입니다.
오늘은 데이터베이스의 기초가 되는 핵심 개념들을 정리해 보겠습니다.
많은 분이 데이터베이스와 DBMS를 혼용해서 부르곤 합니다. 하지만 둘은 명확히 구분해야 합니다.
데이터베이스(Database, DB): 데이터의 집합입니다. 논리적으로 연관된 데이터들을 체계적으로 모아놓은 보관소라고 생각하면 됩니다.
DBMS(Database Management System): 이 데이터베이스를 관리하는 소프트웨어입니다. 우리가 직접 DB 파일을 건드리는 대신, DBMS가 제공하는 인터페이스를 통해 데이터를 삽입, 조회, 수정, 삭제(CRUD)할 수 있도록 돕습니다. (예: MySQL, PostgreSQL, Oracle 등)
왜 직접 파일을 관리하지 않고 DBMS를 쓸까요? 데이터의 중복을 최소화하고, 여러 사용자가 동시에 접근해도 데이터의 일관성(Consistency)과 무결성(Integrity)을 보장하기 위해서입니다.
집을 짓기 전 도면이 필요하듯, DB를 설계할 때도 틀이 필요합니다.
스키마(Schema): 데이터베이스의 구조와 제약 조건을 정의한 것입니다. 테이블이 어떤 칼럼을 가지고, 각 칼럼은 어떤 데이터 타입(Integer, Varchar 등)인지 정하는 설계도입니다.
ER(Entity-Relationship) diagram: 현실 세계의 사물이나 개념(Entity)과 그들 간의 관계(Relationship)를 시각적으로 표현한 도면입니다. "학생이 강의를 수강한다"와 같은 비즈니스 로직을 테이블로 옮기기 전, 명확한 논리적 구조를 세우는 과정이죠.
관계형 데이터베이스(RDBMS)는 데이터를 표(Table) 형태로 저장합니다.
Relation: 우리가 흔히 말하는 'table' 그 자체를 의미합니다.
Tuple: table의 Row입니다. 하나의 데이터 객체를 의미합니다.
Attribute: table의 Column입니다. 데이터가 가진 속성을 나타냅니다.
데이터 간의 질서를 세우는 중요한 개념입니다.
Primary Key (기본키): 각 튜플을 유일하게 식별할 수 있는 값입니다. (예: 학번, 주민등록번호) 절대 중복될 수 없으며, NULL 값을 가질 수 없습니다.
Foreign Key (외래키): 다른 테이블의 기본키를 참조하여 두 테이블 간의 관계를 맺어줍니다. 예를 들어 '수강신청' 테이블에서 '학번'은 학생 테이블을 참조하는 외래키가 되어, 존재하지 않는 학생은 수강신청을 할 수 없도록 막아줍니다.
DBMS와 대화하는 언어입니다. 데이터를 조회(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 모든 명령을 SQL로 수행합니다. 백엔드 개발자라면 반드시 마스터해야 하는 필수 언어죠.
데이터가 중복되거나 이상(Anomaly) 현상이 발생하는 것을 막기 위해 테이블을 나누는 과정을 정규화라고 합니다.
제1정규형(1NF): 테이블의 각 셀에는 하나의 값만 존재해야 합니다. (원자성)
제2정규형(2NF): 제1정규형을 만족하고, 기본키가 아닌 속성들이 기본키에 완전 함수 종속되어야 합니다. (부분 함수 종속 제거)
제3정규형(3NF): 제2정규형을 만족하고, 기본키가 아닌 속성들끼리의 종속성(이행적 함수 종속)을 제거합니다.
BCNF: 3NF보다 더 엄격한 기준으로, 모든 결정자가 후보키여야 한다는 원칙입니다.
요약하며 데이터베이스 설계는 단순히 데이터를 넣는 곳을 만드는 것이 아니라, "어떻게 하면 중복을 줄이고 무결성을 지키며 데이터를 빠르게 처리할 것인가"를 고민하는 과정입니다.
잘 설계된 스키마는 개발 후반부에 닥칠 복잡한 쿼리와 데이터 오류를 예방하는 강력한 방패가 됩니다. 오늘 정리한 개념들을 바탕으로, 여러분의 프로젝트에서도 체계적인 데이터 설계를 실천해 보는 것은 어떨까요? 우리 모두 DB를 잘 다루어 해커톤에서 활약하는 아기사자가 되봅시다!
댓글 0