Skip to main content Link Search Menu Expand Document (external link) Copy Copied

DB 사용방식 3가지

1. Server Mode

DB 엔진을 서버에 직접 설치하여 사용하는 방식이다. 외부에서 DB 엔진이 구동되므로 애플리케이션 종료 시에도 데이터가 유지된다. 주로 배포 환경에서 많이 사용된다.


2. In-memory Mode

DB 엔진을 따로 설치하지 않고, 애플리케이션과 함께 메모리 내에서 실행되는 방식이다. 애플리케이션 메모리에 데이터가 저장되어 종료 시 데이터가 사라지며, 주로 테스트 용도로 사용된다.

스프링부트 설정 예시

# application.yml
spring:  
    datasource:    
        driver-class-name: org.h2.Driver
        url: jdbc:h2:mem:{DB 이름}
        username: sa
        password:
# application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:{DB 이름}
spring.datasource.username=sa
spring.datasource.password=

3. Embeded Mode

DB 엔진을 따로 설치하지 않고 애플리케이션 내에서 구동하되, 데이터가 외부에 저장되어 애플리케이션 종료 시에도 유지된다. 주로 개발 환경에서 많이 사용된다.

스프링부트 프로젝트에서 설정

# application.yml
spring:  
    datasource:    
        driver-class-name: org.h2.Driver
        url: jdbc:h2:{DB 이름}
        username: sa
        password:
# application.properties
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:{DB 이름}
spring.datasource.username=sa
spring.datasource.password=

SQL

SQL은 데이터베이스를 조작하기 위한 언어로, 크게 DDL, DML, DCL로 나뉜다.

데이터 정의 언어(DDL)

  • 테이블 생성: CREATE TABLE
  • 테이블 수정: ALTER TABLE
  • 테이블 삭제: DROP TABLE

데이터 조작 언어(DML)

  • 데이터 조회: SELECT
    • 조건 조회: WHERE
    • 정렬: ORDER BY
    • 그룹화: GROUP BY
    • 조인: JOIN
  • 데이터 추가하기: INSERT INTO
  • 데이터 수정하기: UPDATE
  • 데이터 삭제하기: DELETE FROM

트랜젝션

트랜잭션은 데이터베이스 상태를 변경하는 작업 단위로, 작업 중 문제가 발생할 경우 이전 상태로 되돌릴 수 있다.

트랜잭션의 4가지 특징

  • Atomicity (원자성): 작업이 모두 실행되거나 전혀 실행되지 않는 것을 보장한다.
  • Consistency (일관성): 사전 정의된 규칙을 만족하며 데이터가 수정된다.
  • Isolation (독립성): 다른 작업의 영향을 받지 않도록 보장한다.
  • Durability (영구성): 트랜잭션 성공 시 로그를 남겨 그 결과가 지속되도록 보장한다.

데이터 제어언어

  • 트랜잭션 관리: begin, commit, rollback
  • 접근권한 관리: grant, revoke

데이터베이스 연결 및 드라이버

데이터베이스 드라이버

애플리케이션의 요청을 데이터베이스가 이해할 수 있는 언어로 변환하는 역할을 한다. 각 데이터베이스 시스템마다 호환되는 드라이버가 있다 (예: Oracle, MySQL, PostgreSQL).


데이터베이스 드라이버 동작

애플리케이션과 데이터베이스간의 데이터 교환을 조절하고 관리한다.

드라이버의 동작방식

  1. 연결초기화
    • 요청 수신
    • 연결 설정
  2. SQL 전송 및 실행
    • SQL 명령 변환
    • 명령 처리
  3. 결과 처리
    • 결과 수신
    • 결과 전달
  4. 연결 종료
    • 연결 해제

JDBC Driver Manager 역할

  • Connection(연결) 을 생성하여 쿼리를 요청할 수 있는 상태를 만들어주고
  • Statement(상태) 를 생성하여 쿼리를 요청하게 해주고
  • ResultSet(결과셋) 을 생성해 쿼리 결과를 받아올 수 있게 해줍니다.

데이터를 외부에서 다루기

Spring Boot의 JDBC 라이브러리

srping-boot-starter-jdbc 스타터 패키지

  • JDBC API 지원: SQL로 데이터베이스에 접근하고 작업을 수행한다.
  • DataSource 구성: 연결 설정을 자동으로 구성한다.
  • JdbcTemplate: SQL 실행, 결과 처리, 예외 처리 등을 단순화한다.

JDBC

JDBC 드라이버: 자바 애플리케이션이 데이터베이스에 접근할 수 있도록 하는 API이다. JDBC 드라이버 타입: 네 가지 유형(Type 1, 2, 3, 4)이 있으며, Type 4 드라이버(순수 자바 드라이버)가 가장 일반적으로 사용된다. Statement vs PreparedStatement: PreparedStatement는 SQL 캐싱과 SQL Injection 방어가 가능하여 더 안전하고 성능이 좋다.


Statement vs PreparedStatement

PreparedStatement는 Statement를 상속하고 있는 interface이다. Statement는 executeQuery() 나 executeUpdate()를 실행하는 시점에 파라미터로 sql문을 전달하는데, 전달하는 sql문은 완성된 형태로 파악하기 쉽지만 구문 분석을 수행하는 과정에서 하기때문에 효율성이 떨어진다.

Prepared Statement는 내부적으로 4단계(구문분석, 치환, 실행, 인출) 과정 중 첫번째 parse 과정의 결과를 캐싱하고 나머지 3가지 단계만 거쳐서 SQL문이 실행될수 있게되어 성능이 향상된다. 부가적으로 SQL Injection도 방어할 수 있다.


JDBC Template(QueryMapper)

SQL 쿼리 요청 시 반복되는 코드 최소화, 자원 관리 자동화 등의 문제를 해결하기 위해 등장했다. SQL Mapper: SQL과 객체 필드를 매핑하여 데이터를 객체화한다 (MyBatis 등).


JDBC Template(RowMapper)

쿼리 결과와 객체 필드를 매핑하며, 자원 관리 및 반복 코드를 최소화한다. RowMapper의 mapRow 메서드는 쿼리 응답을 쉽게 객체로 변환한다.