Spring/강의

[📕 JPA 심화] 2. 데이터베이스 다루기

가지코딩 2025. 6. 26. 11:37

📕 목차

  1. 데이터베이스 생성 (H2)
  2. 데이터베이스에서 테이터 다루기 (SQL)
  3. 데이터베이스 연결 (Driver)
  4. 데이터베이스 데이터를 외부에서 다루기 (JDBC)

❤️ 학습 목표

  • 이 섹션에서는 내장형 H2 데이터베이스를 설치하고 설정하는 방법을 배웁니다. H2 데이터베이스의 주요 특징과 장점을 소개하며, 간단한 데이터베이스 생성 방법을 설명합니다.
  • SQL 기본 구문을 사용하여 데이터를 생성, 조회, 수정, 삭제하는 방법을 배웁니다. 이를 통해 데이터베이스 관리의 기본이 되는 SQL 문법에 대한 이해를 높입니다.
  • 데이터베이스 드라이버의 역할과 중요성을 이해하고, 적절한 드라이버 선택 및 설정 방법을 배웁니다. JDBC 드라이버를 사용하여 애플리케이션과 데이터베이스 간의 연결을 구성하는 과정을 다룹니다.
  • JDBC를 통해 Java 애플리케이션에서 데이터베이스 데이터를 직접 다루는 방법을 소개합니다. Connection, Statement, ResultSet 객체의 사용법을 배우며, 간단한 CRUD 작업을 실습합니다.

1. 데이터베이스 생성 (H2)

DB(H2) 사용 방식 3가지

  • Server Mode
    • 현업에서 사용하는 모드로 컴퓨터에 DB 엔진을 설치하고 엔진을 구동하여 사용하는 방식
    • 애플리케이션과 DB가 분리되어 있기 때문에 여러 애플리케이션에서 동일한 DB를 사용하기에 적합하다.
    • 경로 예: jdbc:h2:tcp://localhost/~/test  
  • In-memory Mode
    • 애플리케이션에 DB 엔진이 내장되어 애플리케이션과 함께 실행되고 종료되는 방식
    • 데이터가 애플리케이션의 메모리에 저장되기 때문에 애플리케이션이 종료되면 모든 데이터가 사라지는 휘발성의 특징을 갖고 있다.
    • 단위 테스트 등에서 많이 사용된다.
    • 경로 예:  jdbc:h2:mem:testdb
  • Embedded Mode
    • 인메모리 모드와 동일하게 애플리케이션에 DB 엔진이 내장되어 애플리케이션과 함께 실행되고 종료되는 방식이나, 데이터를 로컬에 저장하기 때문에 데이터 휘발에서 자유롭다.
    • 경로 예: jdbc:h2:~/test
Mode H2 다운로드 여부 실행 주체 DB 저장 위치 사용 용도
Server Mode O 외부 로컬(파일 시스템) 배포 용도
In-Memory Mode X 스프링 메모리 테스트 용도
Embedded Mode X 스프링 로컬(파일 시스템) 개발 용도

2. 데이터베이스에서 테이터 다루기 (SQL)

SQL 기본 개념

  • SQL (Structured Query Language): 데이터베이스를 정의하고 조작하는 표준 언어
  • SQL의 주요 분류
    • DDL (Data Definition Language): 데이터 구조 정의 (CREATE, ALTER, DROP)
    • DML (Data Manipulation Language): 데이터 조작 (SELECT, INSERT, UPDATE, DELETE)
    • DCL (Data Control Language): 트랜잭션 및 권한 제어 (COMMIT, ROLLBACK, GRANT, REVOKE)

 

DDL - 데이터 정의

  • CREATE TABLE: 테이블 생성
  • ALTER TABLE: 테이블 구조 변경 (컬럼 추가/삭제 등)
  • DROP TABLE: 테이블 삭제
CREATE TABLE users (id SERIAL, name VARCHAR(255));
DROP TABLE users;

 

 

DML - 데이터 조회 및 조작

  • SELECT: 데이터 조회
    • WHERE: 조건 검색
    • ORDER BY: 정렬
    • GROUP BY: 그룹화
    • JOIN: 테이블 연결
  • INSERT INTO: 데이터 삽입
  • UPDATE: 데이터 수정
  • DELETE FROM: 데이터 삭제
-- INSERT
INSERT INTO users (name) VALUES ('Alice');

-- SELECT
SELECT name FROM users WHERE id = 1;

-- UPDATE
UPDATE users SET name = 'Bob' WHERE id = 1;

-- DELETE
DELETE FROM users WHERE id = 1;

 

 

트랜잭션 (Transaction)

  • 데이터 변경 작업의 논리적 단위. 하나의 트랜잭션은 모두 성공하거나 모두 실패해야 함.

트랜잭션 제어 명령

  • BEGIN 또는 START TRANSACTION: 트랜잭션 시작
  • COMMIT: 트랜잭션 완료 및 반영
  • ROLLBACK: 트랜잭션 취소 및 원상복구

트랜잭션의 특징 (ACID)

  1. 원자성 (Atomicity): 전부 실행되거나 전부 실행되지 않음
  2. 일관성 (Consistency): 데이터 무결성 보장
  3. 독립성 (Isolation): 동시에 실행 중인 트랜잭션 간 간섭 없음
  4. 지속성 (Durability): 트랜잭션이 커밋된 후의 변경 내용은 시스템 장애가 발생해도 유지됨

 

 

DCL - 트랜잭션 관리와 보완

  • GRANT: 권한 부여
  • REVOKE: 권한 회수
BEGIN;
-- 쿼리 실행
COMMIT;

-- 또는 실패 시
ROLLBACK;

 

 

실습용 테이블 및 쿼리

더보기

추가 컬럼 및 테이블

ALTER TABLE users ADD COLUMN email VARCHAR(255);
ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE users ADD COLUMN status ENUM('active', 'inactive') DEFAULT 'active';

CREATE TABLE products (
  id SERIAL,
  name VARCHAR(255),
  price DECIMAL(10, 2),
  PRIMARY KEY (id)
);

CREATE TABLE orders (
  id SERIAL,
  user_id BIGINT,
  product_id BIGINT,
  quantity INT,
  order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

 

 

데이터 삽입

INSERT INTO users (name, email, status) VALUES ('Alice', 'alice@example.com', 'active');
INSERT INTO products (name, price) VALUES ('Laptop', 1000.00);
INSERT INTO orders (user_id, product_id, quantity) VALUES (1, 1, 2);

 

 

복잡한 쿼리 예시

-- 활성 사용자 조회
SELECT * FROM users WHERE status = 'active';

-- 사용자별 주문 정보 조회 (JOIN)
SELECT users.name, products.name AS product_name, orders.quantity
FROM orders
JOIN users ON orders.user_id = users.id
JOIN products ON orders.product_id = products.id;

-- 사용자별 주문 수 (GROUP BY)
SELECT users.name, COUNT(*) AS order_count
FROM orders
JOIN users ON orders.user_id = users.id
GROUP BY users.name;

-- 사용자별 총 주문 금액
SELECT users.name, SUM(products.price * orders.quantity) AS total_spent
FROM orders
JOIN users ON orders.user_id = users.id
JOIN products ON orders.product_id = products.id
GROUP BY users.name;

 

 

데이터 초기화

TRUNCATE TABLE orders;
TRUNCATE TABLE products;
TRUNCATE TABLE users;

3. 데이터베이스 연결 (Driver)

데이터베이스 Driver 역할 및 종류

  • 드라이버의 역할
    • 데이터베이스 드라이버는 애플리케이션과 데이터베이스 간의 통신을 중개하는 역할을 한다.
    • 드라이버는 애플리케이션의 요청을 데이터베이스가 이해할 수 있는 언어로 변환한다.
  • 드라이버의 종류
    • 다양한 데이터베이스 시스템마다 호환되는 드라이버가 있다.
    • Oracle, MySQL, PostgreSQL 등 각 데이터베이스 제품에 맞는 특정 드라이버가 필요하다.

 

 

데이터베이스 Driver 동작

  • 연결 초기화
    • 요청 수신: 애플리케이션이 데이터베이스 연결을 요청함
    • 연결 설정: 드라이버가 데이터베이스 서버에 접속하고 인증 및 설정을 완료함
  • SQL 전송 및 실행
    • SQL 명령 변환: 애플리케이션의 SQL 명령을 드라이버가 데이터베이스가 이해할 수 있는 형태로 변환
    • 명령 처리: 변환된 SQL이 데이터베이스에서 실행되어 데이터를 조회하거나 변경함
  • 결과 처리
    • 결과 수신: 데이터베이스가 처리 결과를 드라이버에 반환함
    • 결과 전달: 드라이버가 결과를 애플리케이션이 사용할 수 있는 형태로 변환하여 전달함
  • 연결 종료
    • 연결 해제: 작업 완료 후 드라이버가 데이터베이스 연결을 종료하고 자원을 정리함

 

 

JDBC DriverManager 역할

더보기
  • Connection 생성: 데이터베이스에 연결할 수 있는 객체를 생성
  • Statement 생성: SQL 쿼리를 실행할 수 있는 객체를 생성
  • ResultSet 생성: 실행된 쿼리의 결과를 받아오는 객체를 생성

4. 데이터베이스 데이터를 외부에서 다루기 (JDBC)

Spring Boot의 JDBC 라이브러리

  • spring-boot-starter-jdbc: JDBC 기반 데이터베이스 연동을 위한 스타터 패키지
    • 주요 기능:
      1. JDBC API 지원: 표준 SQL 작업 수행 가능
      2. DataSource 자동 구성: 연결 정보 기반으로 커넥션 풀 구성
      3. JdbcTemplate 제공: 쿼리 실행, 결과 처리, 예외 처리 등을 간결하게 처리하는 도구
    • 장점
      • 설정 간소화: 복잡한 JDBC 설정 없이 빠르게 DB 연동 가능
      • 자동 구성 지원: application.yml/properties만 설정하면 기본 연결 구성 완료
      • 일관된 예외 처리: JDBC 예외를 DataAccessException으로 추상화해 통합 처리 가능

 

 

JDBC 개념 정리

  • JDBC(Java Database Connectivity)
    • Java 애플리케이션과 관계형 데이터베이스를 연결하기 위한 표준 API
    • JPA, MyBatis 등도 내부적으로 JDBC를 기반으로 동작
  • JDBC 드라이버
    • DBMS와 통신을 담당하는 구현체
    • Type 4 드라이버 (Pure Java)가 가장 일반적이며, 대부분의 환경에서 사용
  • JDBC 동작 흐름
    1. Connection 생성: DriverManager로 데이터베이스 연결
    2. Statement 생성: SQL 쿼리 실행용 객체 생성
    3. ResultSet 수신: 실행 결과를 받아서 처리

 

(실습 생략)

  • 실습 내용: JDBC Template, QueryMapper

기초 Spring - 실습 참고

https://gajicoding.tistory.com/312

 

[📕 기초 Spring] 6-7. 메모장 프로젝트 - ver4 (데이터베이스 접근 기술 적용)

메모장 프로젝트 ver3 의 문제점데이터베이스에 영구적으로 데이터가 저장되지 않는다. (Database 접근 기술)예외 발생시 공통적으로 처리가 불가능하다.각각의 모든 예외를 try-catch 하여 처리해야

gajicoding.tistory.com