Fullstack 47

heo4·2026년 6월 22일

Fullstack

목록 보기
2/71

풀스택

DB

데이터 타입 알아보기

테이블을 만들기 전에, 각 컬럼에 어떤 자료형을 쓸지 알아야 합니다.

타입설명예시
INT정수1, 25, 100
BIGINT큰 정수 (자동증가 PK에 자주 사용)1, 1000000
VARCHAR(n)길이가 가변적인 문자열, n은 최대 길이'홍길동', 'hong@test.com'
TEXT길이 제한이 거의 없는 긴 문자열게시글 본문처럼 긴 글
DATE날짜만 (연-월-일)2026-06-21
TIMESTAMP날짜+시간2026-06-21 14:30:00
BOOLEAN참/거짓TRUE, FALSE

이름(name)이나 이메일(email)처럼 짧은 문자열은 VARCHAR, 게시글 본문처럼 긴 글은 TEXT를 사용하는 것이 일반적입니다.


4. CREATE TABLE 문법

4-1. 기본 문법

CREATE TABLE 테이블명 (
    컬럼명1 데이터타입 제약조건,
    컬럼명2 데이터타입 제약조건,
    ...
);

4-2. 주요 제약조건

제약조건의미
PRIMARY KEY기본키 지정
NOT NULL빈 값을 허용하지 않음
UNIQUE중복된 값을 허용하지 않음
AUTO_INCREMENT (H2에서는 보통 IDENTITY 사용)값이 자동으로 1씩 증가
DEFAULT 값값을 넣지 않으면 기본값 사용
FOREIGN KEY다른 테이블의 PK를 참조

DDL 심화와 제약조건

1. DDL이란?

DDL(Data Definition Language)은 테이블이나 데이터베이스의 구조 자체를 정의하는 명령어입니다. SECTION02에서 배운 CREATE TABLE도 DDL에 속합니다.

명령어역할
CREATE테이블/스키마 생성
ALTER테이블 구조 변경 (컬럼 추가/삭제/수정)
DROP테이블/스키마 삭제
TRUNCATE테이블 구조는 유지하고 데이터만 전체 삭제

DML(INSERT, UPDATE, DELETE)은 데이터의 “내용”을 다루고, DDL은 데이터가 담기는 “그릇(구조)” 자체를 다룬다는 차이가 있습니다.


2. ALTER TABLE — 컬럼 추가

ALTER TABLE member ADD COLUMN phone VARCHAR(20);

기본값을 지정하면서 추가할 수도 있습니다.

ALTER TABLE member ADD COLUMN is_active BOOLEAN DEFAULT TRUE;

컬럼을 추가하면 기존에 저장되어 있던 행들은 새 컬럼 값이 NULL(또는 DEFAULT 값)로 채워집니다.

3. ALTER TABLE — 컬럼 삭제 / 수정

-- 컬럼 삭제
ALTER TABLE member DROP COLUMN phone;

-- 컬럼 타입 변경 (H2 기준)
ALTER TABLE member ALTER COLUMN name VARCHAR(100);

-- 컬럼 이름 변경 (H2 기준)
ALTER TABLE member RENAME COLUMN phone TO mobile;

컬럼을 삭제하면 그 컬럼에 저장되어 있던 데이터도 함께 사라집니다. 운영 중인 서비스에서는 컬럼 삭제 전에 반드시 백업하거나 신중하게 검토해야 합니다.


4. DROP TABLE vs TRUNCATE TABLE

명령어데이터구조되돌리기
DROP TABLE삭제됨테이블 자체가 사라짐다시 CREATE TABLE 필요
TRUNCATE TABLE삭제됨테이블 구조는 유지구조는 남아있어 바로 INSERT 가능
DELETE FROM (조건 없이)삭제됨구조 유지TRUNCATE와 비슷하지만 속도가 더 느림
CREATE TABLE comment (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(500) NOT NULL,
    board_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (board_id) REFERENCES board(id),
    FOREIGN KEY (member_id) REFERENCES member(id)
);
-- 테이블 자체를 삭제
DROP TABLE comment;

-- 테이블은 남기고 데이터만 전체 삭제
TRUNCATE TABLE comment;

FK로 참조되고 있는 테이블은 참조하는 테이블을 먼저 DROP/TRUNCATE 해야 에러가 나지 않습니다. (예: comment가 board를 참조한다면 comment를 먼저 처리)

5. 제약조건 (Constraint) 심화

SECTION02에서 PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY를 배웠습니다. 여기서는 두 가지를 더 추가합니다.

5-1. CHECK — 값의 범위를 제한

CREATE TABLE member (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT CHECK (age >= 0 AND age <= 150)
);

age 컬럼에는 0~150 사이의 값만 들어갈 수 있습니다. 범위를 벗어나면 INSERT/UPDATE 시 에러가 발생합니다.

5-2. DEFAULT — 값을 넣지 않았을 때 자동으로 채워지는 기본값

CREATE TABLE board (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    view_count INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

게시글을 등록할 때 view_count를 따로 지정하지 않으면 자동으로 0이 들어갑니다.

5-3. 복합키 (Composite Key) — 2개 이상의 컬럼으로 PK 구성

게시글 “좋아요” 기능을 예로 들면, “한 회원이 한 게시글에 좋아요를 한 번만 누를 수 있다”는 규칙이 필요합니다.

CREATE TABLE member (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE board (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    content TEXT NOT NULL,
    member_id BIGINT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (member_id) REFERENCES member(id)
);
CREATE TABLE board_like (
    board_id BIGINT NOT NULL,
    member_id BIGINT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (board_id, member_id),
    FOREIGN KEY (board_id) REFERENCES board(id),
    FOREIGN KEY (member_id) REFERENCES member(id)
);

board_id와 member_id를 합쳐서 PK로 지정하면, 같은 (board_id, member_id) 조합은 두 번 들어갈 수 없습니다. 즉 같은 회원이 같은 게시글에 좋아요를 두 번 누르는 것을 DB 차원에서 막을 수 있습니다.


6. 모든 제약조건을 적용한 종합 예시

CREATE TABLE member (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    age INT CHECK (age >= 0 AND age <= 150),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

이 한 줄 한 줄이 곧 “데이터 정합성 규칙”입니다. 애플리케이션 코드(Java)에서 검증하기 전에, DB 자체가 1차 방어선 역할을 하게 됩니다.

정리

  • DDL은 테이블 구조를 정의/변경/삭제하는 명령어이다. (CREATE, ALTER, DROP, TRUNCATE)
  • ALTER TABLE로 컬럼을 추가/삭제/수정할 수 있다.
  • DROP TABLE은 테이블 자체를 삭제하고, TRUNCATE TABLE은 구조는 남기고 데이터만 삭제한다.
  • CHECK는 값의 범위를 제한하고, DEFAULT는 값을 넣지 않았을 때 기본값을 채운다.
  • 복합키(Composite Key)는 2개 이상의 컬럼을 묶어서 PK로 지정해 조합의 중복을 막는다.

능력단위평가 제출 (모바일 청첩장)

청첩장 샘플: https://wedd-sbdkrhpze.pages.dev/w

구조를 기획하고 설계하여 단독 개발 프로젝트로 특별한 기능은 직접 디자인과 구성에 참여하여
제작할수 있다는 것이 키 포인트

0개의 댓글