Spring

[Spring Boot] DB 연결하기 - MySQL, H2, Redis

Joo.v7 2024. 11. 30. 11:35

1. MySQL

(0) MySQL 로컬 서버 활성화/종료

# 서버 활성화
mysql.server start

# 서버 종료
mysql.server stop

 

(1) 터미널로 연결하기

  • 로컬에 설치된 MySQL 서버에 root 사용자로 접속하는 명령어.
mysql -u root -p

 

  • MySQL 원격 접속을 위한 명령어.
    • -h: 호스트. 111.111.111.111은 MySQL 서버의 IP 주소.
    • -P: 포트 번호.
    • -u: 사용자 이름.
    • -p: 비밀번호 입력을 요청.
mysql -h 111.111.111.111 -P 3306 -u nhn_exam_17 -p

 

(2) Spring Boot 에서 properties 파일로 연결하기

  1. 의존성 추가.
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

 

 

   2. properties 파일 설정.

  • MySQL URL 형식: jdbc:mysql://<host>:<port>/<database_name>
    (기본 localhost:3306)
  • JDBC 드라이브 클래스: com.mysql.cj.jdbc.Driver
  • DB username
  • DB password
  • JPA 및 Hibernate 설정
# DB 연결
spring.datasource.url=jdbc:mysql://<host>:<port>/<database_name>?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=hello
spring.datasource.password=world!

# SQL 쿼리 출력
spring.jpa.show-sql=true

# 쿼리를 보기 좋게 정렬
spring.jpa.properties.hibernate.format_sql=true

# DDL 자동 생성 및 dialect 설정
spring.jpa.hibernate.ddl-auto=update

# Hibernate가 사용할 DB 방언 설정 (MySQL 8에 최적화된 SQL 문법 사용)
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

 


2. H2

Spring Boot 에서 properties 파일로 연결하기 - 2가지 방법

1. 의존성 추가.

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

 

(1) TCP 서버 모드 (파일 기반)

2. properties 파일 설정.

  • H2 URL 형식: jdbc:h2:tcp://<host>:<port>/<database_name>
# tcp://localhost 는 H2 DB가 TCP 서버 모드로 로컬호스트에서 실행되고 있음을 의미 
# ~/h2test 는 H2 DB 파일이 사용자 홈에 h2test.mv.db 로 저장된다는 의미
spring.datasource.url=jdbc:h2:tcp://localhost/~/h2test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# Hibernate 설정
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create

# SQL 쿼리를 보기 좋게 정렬해서 출력
spring.jpa.properties.hibernate.format_sql=true 

# H2 콘솔 활성화
spring.h2.console.enabled=true

 

3. 콘솔창 실행.

  • 주소창에 "localhost:8080/h2-console" 입력.

 

(2) 인메모리 모드 (메모리 기반)

2. properties 파일 설정.

  • H2 URL 형식: jdbc:h2:mem:testdb
# H2 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# Hibernate 설정
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create

# SQL 쿼리를 보기 좋게 정렬해서 출력
spring.jpa.properties.hibernate.format_sql=true 

# H2 콘솔 활성화
spring.h2.console.enabled=true

 

3. 콘솔창 실행.

  • 주소창에 "localhost:8080/h2-console" 입력.

 

* 주요 차이점

구분 TCP 서버 모드 (파일 기반) 인메모리 모드 (메모리 기반)
데이터베이스 저장 위치 로컬 파일 시스템에 데이터베이스 파일로 저장 (h2test.mv.db) 메모리 내에서만 존재 (데이터 지속되지 않음)
데이터 지속성 데이터가 파일에 저장되어 애플리케이션 종료 후에도 유지 애플리케이션 종료 시 데이터가 사라짐
멀티 클라이언트 지원 여러 클라이언트가 동시에 연결 가능 애플리케이션에서만 연결 가능 (단일 클라이언트)
서버 실행 여부 h2.sh 명령어로 H2 서버를 실행하고 클라이언트가 연결 별도의 서버 실행 없이 애플리케이션에서 데이터베이스 사용
용도 실제 운영 환경에서 파일 기반 데이터베이스로 사용 테스트 환경 또는 데이터 지속성이 필요하지 않은 경우 사용

3. Redis

Spring Boot 에서 properties 파일로 연결하기

1. 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 

2. properties 파일 설정.

spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=your_redis_password (optional)
spring.data.redis.database=3

 

3. 터미널로 Redis 접속

(1) Redis 서버 실행 - 기본 포트: 6379

redis-server

 

(2) Redis-cli로 redis 접속

redis-cli


redis-cli -h <host> -p <port> -a <password>

# 비밀번호 (특수문자 있으면 따옴표 필수) ex) '!123143*nehs'
redis-cli -h <호스트> -p <포트> -a <비밀번호> -n <DB 번호>

 

(3) Redis DB 설정

# 현재 DB 확인
INFO keyspace

# 결과 예시: Keyspace
# db0, db1: 각각 데이터베이스 번호
# keys: 데이터베이스에 저장된 키의 수
# expires: 만료 설정이 있는 키의 수
# avg_ttl: 키의 평균 TTL(Time to Live) 값(밀리초 단위)
db0:keys=10,expires=2,avg_ttl=123456
db1:keys=5,expires=0,avg_ttl=0

# 특정 DB 선택
SELECT <DB 번호>