Spring 입문 (데이터베이스)

KimGwangmin·2026년 9월 7일

DB의 종류

1. 관계형 DB (RDBMS)

  • 테이블 형태로 데이터를 저장
  • 테이블 간의 관계를 이용해 데이터 연결
  • 가장 많이 쓰이는 데이터베이스
  • 안정성 중심
개념적으로 DB는 데이터의 집합, DBMS는 그걸 관리하는 시스템을 의미하지만, 실무적으로 RDB, RDBMS를 구분하지는 않는다.

2. 비관계형 DB (NoSQL)

  • 테이블이 아닌 형태로 데이터를 저장, 관리
    • key-value, document, graph, ...
  • 스키마가 고정되지 않음, 대규모 데이터 처리, 높은 확장성 제공
  • 성능 중심

트랜잭션

하나의 논리적인 작업 단위

  • A(Atomicity): 하나의 트랜잭션 내 모든 작업은 전부 성공하거나 전부 실패해야 함
  • C(Consistency): 트랜잭션 전후로 DB에 모순이 없는 일관된 상태여야 함
  • I(Isolation): 여러 트랜잭션이 동시에 실행되어도 서로 간섭 없이 독립적으로 실행되어야 함
  • D(Durability): 트랜잭션의 결과가 DB에 영구적으로 저장

RDBMS 특징

테이블

  • 데이터는 행과 열로 구성된 테이블에 저장
  • 열(column): 데이터의 속성(attribute)
  • 행(row): 관계된 데이터의 묶음(tuple, record)

관계

  • 테이블 간의 관계는 외래키(Foreign Key, FK)를 통해 설정
  • 1:1, 1:다, 다:다 관계 모두 가능함
  • 개념적으로는 ER model 참조

SQL

  • RDBMS에서 데이터를 관리하는 표준 언어
  • 데이터에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행

Key

  • 기본키(Primary Key, PK)
    • 테이블 당 하나만 존재
    • 중복 불가
    • NULL 불가
  • 외래키(Foreign Key, FK)
    • 다른 테이블의 기본 키를 참조
    • 두 테이블 간 관계 설정
  • 유일키(Unique Key)
    • 중복 없음
    • NULL 허용

정규화

  • 데이터 중복 최소화, 일관성, 무결성 유지를 위한 데이터 구조화 프로세스
  • 여러 가지 정규화 단계가 있음
  • 과도한 정규화는 테이블의 개수를 늘리며 오히려 성능을 떨어뜨림

데이터 무결성

  • 엔티티 무결성: 기본키는 중복되지 않고, NULL 값이 아닌 상태를 유지
  • 참조 무결성: 외래키를 통해 참조되는 데이터가 유효성을 유지하도록 보장
    • 예: 게시글에 댓글이 달리면, 댓글은 해당 게시글의 PK를 보유하게 됨
      • 게시글의 PK가 댓글의 FK
      • 이때 게시글이 삭제되면 해당 데이터의 유효성이 깨짐
      • 따라서 1. 댓글이 달린 게시물은 삭제 불가 혹은 2. 게시글이 삭제되면 댓글도 삭제되어야 참조 무결성이 보장
  • 도메인 무결성: 데이터가 정의된 타입과 제약 조건에 따라 유효한 값을 유지
    • 예: 이름에 숫자나 true/false 값이 들어갈 수 없음

대표적인 RDBMS

  • MySQL
  • PostgreSQL
  • OracleDatabase
  • Microsoft SQL Server

Docker에서 MySQL 띄우기 (MySQL의 기본 포트는 3306)

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 mysql:8.4

SQL(Structed Query Language)

1. DDL: 데이터 구조 정의

  • CREATE: 데이터베이스, 테이블 생성
    CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50), email VARCHAR(100) );
  • ALTER: 데이터베이스, 테이블 구조 수정
    ALTER TABLE users ADD created_at TIMESTAMP;
  • DROP: 데이터베이스, 테이블 삭제 (통째로)
    DROP DATABASE hello;

2. DML: 데이터 조작(추가, 수정, 삭제)

  • INSERT: 테이블에 새로운 데이터(레코드) 삽입
    INSERT INTO users (id, username, email) VALUES (1, 'John', 'john123@gmail.com');
  • UPDATE: 테이블의 특정 데이터 수정
    UPDATE users SET email = 'new.email@example.com' WHERE id = 1;
  • DELETE: 테이블의 특정 데이터 삭제
    DELETE FROM users WHERE id = 1;

3. DQL: 데이터 조회

  • SELECT: 특정 데이터 조회
    SELECT email FROM users WHERE username = 'John';

특정 데이터는 WHERE절을 통해 조건을 지정

ORM (Object-Relational Mapping)

  • OOP 언어와 RDB 간의 데이터 변환 기법
  • OOP의 객체와 RDB의 테이블을 매핑하는 인터페이스

문제점: 패러다임의 불일치

  • DB의 데이터는 단일 값만 가능
  • OOP는 객체나 리스트 등 복잡한 값을 가질 수 있음
  • 따라서 naive하게 객체와 데이터를 동일시할 수 없음
  • ORM이 인터페이스로 존재하며 패러다임의 불일치를 해결하고, 편하게 코드로 다룰 수 있게 해줌

0개의 댓글