Don't Panic
in DB ☕ 3분 읽기

[DB] 데이터베이스 기초 — RDB 설계·MyBatis·Maven vs Gradle

#DB
목차

Relational Database (관계형 데이터베이스)

관계형 데이터베이스 구조

  • 관계형 모델: 데이터를 행(row)과 열(column)로 이뤄진 테이블로 정의
  • AutoIncrement: DB가 자동으로 다음 값을 증가시켜 PK로 사용 (Surrogate Key)
  • MySQL은 오라클에 인수된 이후 오픈소스 진영에서 MariaDB가 파생

주요 제약 조건 (Constraint)

제약설명
PK (Primary Key)각 row를 고유하게 식별, AutoIncrement로 자동 생성 가능
FK (Foreign Key)다른 테이블과의 관계 정의, 잘못 사용하면 DB 조작이 어려워짐
UQ (Unique)중복 불허, 로그인 ID 등 명백한 키에 적용

JPA를 사용하면 PK·FK 관리를 프레임워크가 대신 처리해준다.


Docker로 MySQL 실행

Docker MySQL 실행 명령어

docker run —name mysql-stub -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 -d mysql:8
옵션설명
--name컨테이너 이름 지정
-e환경 변수 설정 (예: MySQL 루트 비밀번호)
-p 3306:3306호스트 포트:컨테이너 포트 바인딩
-d백그라운드(detach) 모드로 실행
  • -d 없이 실행하면 터미널에 컨테이너가 붙어있는 상태가 됨
  • docker logs <컨테이너>: 컨테이너 로그 확인
  • docker inspect <컨테이너>: 컨테이너 실행 상태 확인
  • docker rm -f mysql: 컨테이너 강제 삭제

데이터 무결성과 Volume

  • 컨테이너는 삭제하면 내부 DB 데이터도 함께 삭제됨
  • -v (volume) 옵션: 컨테이너 내부 디렉토리를 호스트 디렉토리와 연결하여 데이터를 영속 보존
  • Docker Compose: 명령어로 전달할 내용을 파일로 저장해 한 번에 여러 컨테이너를 실행하는 편의 도구

MySQL 설정

MySQL 스키마 및 사용자 설정

  • 스키마: 조작하기 위한 테이블들이 모여있는 단위
  • 운영 환경에서는 root 계정 직접 사용을 권장하지 않음 → 전용 계정 생성 후 권한 부여
create database demo_school;
create user 'staff' identified by 'password';

grant insert,
delete,
create,
drop,
select,
update on demo_school.* to staff;

ER Diagram (Entity-Relationship Diagram)

ER 다이어그램 예시 1

  • DB 설계 시 다이어그램을 먼저 그리는 것이 좋다
  • 관계 예시:
    • 유저 1명이 애플리케이션 여러 개 소유 가능 (1:N)
    • 하나의 애플리케이션에 여러 Role이 들어갈 수 있어 조인 테이블 활용
    • Role은 반복 입력을 방지하기 위해 별도 테이블로 분리
    • Scope은 Role에 종속되어 1:N 관계
    • AppKey를 통해 접근 권한을 위임

ER 다이어그램 예시 2

돈이 들어가는 서비스는 상태 이력(입금·취소 등)이 생겨 DB 설계가 복잡해진다.


Java에서 DB 사용하기

  • 원초적인 방법: JDBC (Java Database Connectivity) Connection을 직접 받아와 사용
  • MyBatis: 인터페이스에 정의된 쿼리문을 실행하는 SQL 매퍼 프레임워크

MyBatis 주요 개념

  • useGeneratedKeys: INSERT 후 자동 생성된 PK를 DTO에 채워서 반환
  • keyProperty: 반환받을 DTO의 키 속성 지정
  • 매퍼 인터페이스를 통해 쿼리 실행, INSERT 반환값은 int (영향받은 row 수)

Maven vs Gradle

Maven pom.xml 예시

Gradle build.gradle 예시

두 도구 모두 빌드 자동화 도구(Build Automation Tool) 이며 Maven Central Repository에서 라이브러리를 내려받아 사용한다.

항목MavenGradle
설정 파일pom.xmlbuild.gradle (Groovy / Kotlin DSL)
빌드 방식라이프사이클 기반, 순차 빌드Incremental Build (변경된 부분만 빌드)
Task 정의플러그인 의존, 자유도 낮음커스텀 Task 정의 가능, 자유도 높음
속도초기에는 빠르게 느껴지나 대규모에서 느려짐수정이 잦은 대규모 프로젝트에서 빠름
특이사항mvnw (Maven Wrapper) 지원gRPC 프로토콜 등 커스텀 빌드 설정에 유리

Maven과 Gradle은 완전한 상호 호환이 아니라 다른 목적으로 설계된 도구. 환경 설정 방식이 다르다.