데이터베이스 기초 - feat.<면접을 위한 CS 전공지식 노트>
데이터를 더 잘 활용하기 위해 '데이터베이스'나 '데이터 텍소노미'에 관련된 내용들을 공부하고 블로그에 틈틈히 기록하자는 생각이 들어 우선 첫 번째 시리즈로 '데이터베이스' 기초 부분을 정리했다.
데이터베이스의 기본
- 데이터베이스 : 일정한 규칙을 통해 구조화되어 저장되는 데이터의 모음
- DBMS(DataBase Management System) : 데이터베이스를 제어, 관리하는 통합 시스템
- 쿼리 언어 : 데이터베이스 안에 있는 데이터를 삽입, 삭제, 수정, 조회 등을 수행할 수 있는 DBMS 마다 정의된 컴퓨터 언어
![]() |
데이터베이스 위에 DBMS가 있고, 그 위에 응용 프로그램이 있음 MySQL이라는 DBMS가 있고, 그 위에 응용 프로그램에 속하는 Node.js나 php에서, 해당 데이터 베이스 안에 있는 데이터를 끄집어내 해당 데이터 관련 로직을 구축함 |
데이터 베이스의 종류는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 나뉨
- 관계형 데이터베이스
대표적으로는 MySQL
레코드-테이블-데이터베이스
레코드가 쌓여서 테이블이 되고, 테이블이 쌓여서 데이터베이스가 된다.
- NoSQL 데이터베이스
대표적으로는 MongoDB
도큐먼트-컬렉션-데이터베이스
엔터티 & 릴레이션 & 속성 & 도메인
- 엔터티(entity) : 여러 개의 속성을 지닌 명사
회원이라는 엔터티가 있을 경우, 이름/아이디/주소/전화번호 등의 속성을 가질 수 있다.
서비스의 요구 사항에 맞춰 속성이 정해짐
엔터티는 약한 엔터티와 강한 엔터티로 나뉨
A가 혼자서는 존재하지 못하고 B의 존재 여부에 따라 종속적이라면 A는 약한 엔터티이고 B는 강한 엔터티 - 릴레이션(relation) : 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
엔터티에 관한 데이터를 데이터베이스에서는 릴레이션 하나에 담아서 관리
![]() |
회원이라는 엔터티가 데이터베이스에서 관리될 때 릴레이션으로 변화됨 릴레이션은 관계형 데이터베이스에서는 ‘테이블’, NoSQL 데이터베이스에서는 ‘컬렉션’ |
- 속성(attribute) : 릴레이션에서 관리하는 구체적이며 고유한 이름을 가진 정보
서비스의 요구 사항을 기반으로 관리해야 할 필요가 있는 속성들만 엔터티의 속성이 됨 - 도메인(domain) : 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값의 집합
성별이라는 속성이 있다면 이 속성이 가질 수 있는 값은 {남, 여} 라는 집합
![]() |
회원이라는 릴레이션에 이름, 아이디, 주소, 전화번호, 성별이라는 속성이 있고 성별은 {남, 여}라는 도메인을 가짐 |
필드 & 레코드
테이블은 필드와 레코드로 구성
회원이란 엔터티는 member라는 테이블로 속성인 이름, 아이디 등을 가지고 있으며 name, ID, address 등의 필드를 가짐
이 테이블에 쌓이는 행(row) 단위의 데이터가 레코드
또한, 레코드를 튜플이라고도 함
엔터티를 데이터 베이스에 넣어 테이블로 만들려면 속성에 맞는 데이터 타입을 정의해야 함
속성 이름은 보통 한글 보다는 영어 이름에 매핑해서 사용함
• 책의 아이디: id INT
• 책의 제목: title VARCHAR(255)
• 책의 저자 아이디: author_id INT
• 책의 출판년도: publishing_year VARCHAR(255)
• 책의 장르: genre VARCHAR(255)
• 생성 일시: cerated_at DATETIME
• 업데이트 일시: updated_at DATETIME
필드 타입
필드는 숫자, 날짜, 문자 등 타입을 가짐
- 숫자 타입
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바이트
- DATE
- 문자 타입
CHAR, VARCHAR, TEXT, BLOB, ENUM, SET- CHAR와 VARCHAR
CHAR 또는 VARCHAR 모두 그 안에 수를 입력해서 몇 자까지 입력할지 정함. CHAR(30)
CHAR는 테이블을 생성할 때 선언한 길이로 '고정', 길이는 0~255 사이의 값
VARCHAR는 가변 길이 문자열, 길이는 0~65,535 사이의 값으로 지정 가능. 입력된 데이터에 따라 용량을 가변시켜 저장
예를 들어 VARCHAR(10000)으로 선언했음에도 10글자의 이메일을 저장할 경우 10글자에 해당하는 바이트 + 길이기록용 1바이트로 저장
CHAR의 경우 유동적이지 않은 길이를 가진 데이터의 경우에 효율적 vs. 유동적인 길이를 가진 데이터는 VARCHAR로 저장 - TEXT와 BLOB
두 개의 타입 모두 큰 데이터를 저장할 때 쓰는 타입
TEXT는 큰 문자열 저장에 사용, 주로 게시판의 본문 저장
BLOB은 이미지, 동영상 등 큰 데이터 저장에 사용, 그러나 보통은 아마존 이미지 호스팅 서비스 S3 등을 이용해 서버에 파일을 올리고 파일 경로를 VARCHAR로 저장 - ENUM과 SET
ENUM과 SET 모두 문자열을 열거한 타입
- CHAR와 VARCHAR
테이블 관계
데이터베이스의 여러 개의 테이블을 서로의 관계가 정의되어 있음. 이런 관계를 관계화살표로 나타냄
- 1:1 관계
- 1:N 관계
한 개체가 다른 많은 개체를 포함하는 관계
쇼핑몰에서 한 유저당 여러 개의 상품을 장바구니에 넣을 수 있는 경우. 물론 하나도 넣지 않는 0개의 경우도 있으니 0도 포함되는 화살표를 통해 표현해야 함
- N:M 관계
학생도 강의를 많이 들을 수 있고, 강의도 여러 명의 학생을 포함할 수 있는 경우
N:M은 테이블 두 개를 직접적으로 연결해서 구축하지는 않고 1:N, 1:M이라는 관계를 갖는 테이블 두 개로 나눠서 설정
키
테이블 간의 관계를 조금 더 명확하게 하고 테이블 자체의 인덱스를 위해 설정된 장치로 기본키, 외래키, 후보키, 슈퍼키, 대체키가 있음
![]() |
슈퍼키는 유일성이 있고 그 안에 포함된 후보키는 최소성까지 갖춘 키 후보키 중에서 기본키로 선택되지 못한 키는 대체키가 됨 유일성은 중복되는 값은 없으며, 최소성은 필드를 조합하지 않고 최소 필드만 써서 키를 형성할 수 있는 것을 말함 |
- 기본키(Primary Key)
줄여 PK 또는 프라이머리키라고 많이 부르며, 유일성과 최소성을 만족하는 키
기본키에 해당하는 데이터는 중복되어서는 안 됨
기본키는 자연키 또는 인조키 중에 골라 설정
- 자연키
유저 테이블을 만든다고 가정하면 주민등록번호 / 이름 / 성별 등의 속성이 있을 때, 이 중 이름 / 성별 등은 중복된 값이 들어올 수 있으므로 부적절하고 남는 것은 주민등록번호
이런 식으로 중복된 값들을 제외하며 중복되지 않는 것을 ‘자연스레’ 뽑다가 나오는 키가 자연키
자연키는 언젠가는 변하는 속성을 가짐 - 인조키
유저 테이블을 만든다고 했을 때 회원 테이블을 생성한다고 가정할 때, 인위적으로 유저 아이디를 부여. 이를 통해 고유 식별자가 생김
이런 식으로 인위적으로 생성한 키가 인조키
인조키는 자연키와는 달리 변하지 않아서 보통 기본키는 인조키로 설정함
- 자연키
- 외래키(Foreign Key)
FK라고도 하며, 다른 테이블의 기본키를 그대로 참조하는 값으로 개체와의 관계를 식별하는 데 사용
중복되어도 괜찮음
- 후보키(candidate key)
기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족하는 키 - 대체키(alternate key)
후보키가 두 개 이상일 경우 어느 하나를 기본키로 지정하고 남은 후보키 - 슈퍼키(super key)
각 레코드를 유일하게 식별할 수 있는 유일성을 갖춘 키
ERD
- ERD(Entity Relationship Diagram) : 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할을 하며, 릴레이션 간의 관계들을 정의한 것
ERD는 시스템의 요구 사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축
데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우에 설계도 역할을 담당하기도 함
ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는 데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점이 있음
승원 영업부서의 ERD 요구 사항 • 영업사원은 0~n명의 고객을 관리한다. • 고객은 0~n개의 주문을 넣을 수 있다. • 주문에는 1~n개의 상품이 들어간다. |
![]() |
무무오브레전드의 ERD 요구 사항 • 선수들은 1명의 챔피언을 고를 수 있다. • 챔피언은 한 개 이상의 스킬을 갖는다. • 스킬은 한 개 이상의 특성을 갖는다. |
![]() |
출처