4.1 데이터베이스의 기본
데이터베이스(DB)

- 일정한 규칙에 따라 구조화되어 저장된 데이터의 집합
- 실시간 접근 가능
- 여러 사용자가 동시에 데이터 공유 가능
DBMS (DataBase Management System)
- 데이터베이스를 제어·관리하는 통합 시스템
- 데이터 삽입, 삭제, 수정, 조회 기능 제공
- DBMS마다 정의된 쿼리 언어 사용
데이터베이스 구조
- 데이터베이스 위에 DBMS가 존재
- 그 위에서 응용 프로그램이 데이터에 접근
- 예: MySQL + Node.js / PHP 등
4.1.1 엔터티 (Entity)

엔터티
- 사람, 장소, 물건, 사건, 개념 등 여러 속성을 가진 명사
- 서비스 요구 사항에 따라 속성 구성
예시: 회원 엔터티
- 이름
- 아이디
- 주소
- 전화번호
요구 사항과 무관한 속성은 제거됨
약한 엔터티와 강한 엔터티
강한 엔터티
- 독립적으로 존재 가능
약한 엔터티
- 다른 엔터티에 종속되어 존재
- 예: 건물(강한 엔터티) – 방(약한 엔터티)
4.1.2 릴레이션 (Relation)

릴레이션
- 엔터티 데이터를 저장하는 데이터베이스의 기본 단위
용어 차이
- 테이블: 관계형 DB(MySQL)
- 컬렉션: NoSQL DB(MongoDB)
데이터베이스 구조
- MySQL: 레코드 → 테이블 → 데이터베이스
- MongoDB: 도큐먼트 → 컬렉션 → 데이터베이스

4.1.3 속성 (Attribute)
속성
- 엔터티가 가지는 고유한 정보
- 서비스 요구 사항에 따라 선택됨
예시: '차' 엔터티 Car
- 차 번호 id
- 바퀴 수 wheels
- 차 색깔 color
- 차종 type

4.1.4 도메인 (Domain)
도메인
- 속성이 가질 수 있는 값의 집합
예시 ------------------------------>
- 성별 속성의 도메인: {남, 여}
4.1.5 필드와 레코드

필드(Field)
- 테이블의 열(column)
- 속성이 실제로 저장되는 공간
레코드(Record)
- 테이블의 행(row)
- 하나의 데이터 단위
- 튜플(tuple)이라고도 함
필드 타입
- 필드는 각각 타입을 가짐
- DBMS마다 지원하는 타입이 다름
- 여기서는 MySQL 기준으로 설명
숫자 타입
- 정수 값을 저장하는 데 사용
대표적인 타입
- TINYINT
- SMALLINT
- MEDIUMINT
- INT
- BIGINT
차이점
- 타입별로 저장 가능한 값의 범위가 다름
- 용량(바이트) 차이 존재
- 부호 있음 / 부호 없음 설정 가능
날짜 타입
- 날짜 또는 시간 정보를 저장하는 데 사용
DATE
- 날짜 정보만 저장
- 시간 정보는 포함하지 않음
- 지원 범위: 1000-01-01 ~ 9999-12-31
- 용량: 3바이트
DATETIME
- 날짜와 시간 정보를 모두 저장
- 지원 범위:
- 1000-01-01 00:00:00
- 9999-12-31 23:59:59
- 용량: 8바이트
TIMESTAMP
- 날짜와 시간 정보를 모두 저장
- 지원 범위:
- 1970-01-01 00:00:01
- 2038-01-19 03:14:07
- 용량: 4바이트
문자 타입
- 문자열 데이터를 저장하는 데 사용
CHAR와 VARCHAR
공통
- 괄호 안 숫자로 최대 길이 지정
- 예: CHAR(30) → 최대 30글자 저장
CHAR
- 고정 길이 문자열
- 길이 범위: 0 ~ 255
- 선언한 길이만큼 항상 고정 저장
- 예: CHAR(100)에 10글자 저장 → 100바이트 사용
- 길이가 일정한 데이터에 적합
VARCHAR
- 가변 길이 문자열
- 길이 범위: 0 ~ 65,535
- 실제 입력된 데이터 크기만큼 저장
- 예:
- 10글자 저장 시
- 문자열 바이트 + 길이 기록용 1바이트 사용
- 선언 길이가 커도 실제 저장 용량은 입력값 기준
- 길이가 유동적인 데이터에 적합
정리
- 고정 길이 데이터 → CHAR
- 가변 길이 데이터 → VARCHAR
TEXT와 BLOB
공통
- 큰 데이터를 저장할 때 사용하는 타입
TEXT
- 큰 문자열 저장
- 주로 게시판 본문 등에 사용

BLOB
- 이미지, 동영상 등 바이너리 데이터 저장
- 실제 서비스에서는
- 파일은 서버(S3 등)에 저장
- 파일 경로만 VARCHAR로 DB에 저장하는 경우가 많음
ENUM과 SET
공통
- 문자열을 열거한 타입
ENUM
- 미리 정의한 값 중 하나만 선택 가능
- 예: ENUM('x-small', 'small', 'medium', 'large', 'x-large')
- 리스트에 없는 값 입력 시 빈 문자열 저장
- 내부적으로 숫자(0, 1, 2 …)로 매핑
- 메모리 사용량이 적음
- 최대 65,535개 요소 지정 가능
SET
- ENUM과 유사하지만 여러 값 선택 가능
- 비트 단위 연산 가능
- 최대 64개 요소 지정 가능
ENUM / SET 단점
- 애플리케이션 수정 시
- DB에 정의된 ENUM, SET 목록도 함께 수정해야 함
4.1.6 관계 (Relationship)
관계
- 테이블 간의 연관성
1:1 관계

- 하나의 엔터티가 하나의 엔터티와만 관계
- 구조를 단순화하기 위해 테이블 분리 목적
1:N 관계

- 하나의 엔터티가 여러 엔터티와 관계
- 예: 사용자 – 장바구니
N:M 관계

- 양쪽 엔터티 모두 여러 개와 관계
- 직접 연결하지 않음
- 중간 테이블을 생성하여
- 1:N, N:1 관계로 분리
4.1.7 키 (Key)
키




- 테이블의 레코드를 식별하기 위한 속성
- 테이블 간 관계 설정 및 인덱스 역할
기본키 (Primary Key)
- 유일성 + 최소성 만족
- 중복 불가
- 보통 인조키 사용
자연키
- 실제 데이터 중 자연스럽게 선택된 키
- 변경될 가능성 있음
인조키
- 인위적으로 생성한 키
- auto increment, sequence 등
- 값이 변하지 않음
- 기본키로 가장 많이 사용
외래키 (Foreign Key)
- 다른 테이블의 기본키를 참조
- 중복 가능
- 테이블 간 관계 표현
후보키
- 기본키가 될 수 있는 키
- 유일성 + 최소성 만족
대체키
- 후보키 중 기본키로 선택되지 않은 키
슈퍼키
- 유일성을 만족하는 모든 키
'STUDY' 카테고리의 다른 글
| 코드 리팩토링 - 멘토님의 조언을 적용해보자 (0) | 2026.02.12 |
|---|---|
| CPU 스케줄링 알고리즘 (0) | 2026.02.09 |
| 운영체제 - 메모리, 프로세스와 스레드 (0) | 2026.02.03 |
| 파이프라인 모니터링 클러스터 모니터링 (0) | 2026.02.01 |
| HTTP 프로토콜 & 운영체제 (0) | 2026.01.28 |