H2 DB를 사용하다보면, Embedded
, Server
요런 설정을 본 적이 있을 것이다.
필자 같은 경우는 MySQL
을 주로 사용하다가, H2
를 사용해보니 위의 개념이 너무 헷갈렸다. 그래서 해당 내용에 대해 정리해 보고자 한다.
01. Server 모드
서버 모드의 경우에는 Java 애플리케이션이 실행되는 프로세스와, H2 DB가 실행되는 포트가 완전히 구별된다.
이때 두 프로세스 사이의 연결은 TCP/IP
방식으로 된다고 한다.
이때 서버모드로 h2 DB를 사용하기 위해서는, 별도의 프로세스를 실행시켜야 하므로 H2 Console을 다운 및 실행시킨 상태로 Java 애플리케이션을 실행해야한다.
서버 모드의 장단점은 아래와 같다.
- 프로세스 종료 후에도 데이터가 휘발되지 않고 남아있음
- Java 애플리케이션과 독립된 별도의 프로세스로 실행
- TCP/IC 통신을 사용하므로, 상대적으로 속도가 느림
02. Embedded 모드
임베디드 모드의 경우, h2가 Java 애플리케이션의 프로세스 안에서
종속적으로 실행된다.
임베디드 모드의 경우 사용되는 DB를 로컬환경에 저장하고 사용하기 때문에, 데이터가 휘발되지 않는다.
임베디드 모드의 장단점은 아래와 같다.
- 프로세스 종료 후에도 데이터가 남아있음
- Java 애플리케이션이 실행되는 JVM 안에서 실행된다.
- H2를 다운 및 실행하지 않고도 사용이 가능하다.
02-1. In-Memory 모드
해당 모드의 경우 Embedded
모드와 유사하지만, DB를 따로 저장하지 않는다.
따라서 DB의 처리 속도는 가장 빠르지만, 애플리케이션이 종료되면 데이터가 모두 휘발된다는 특징이 있다.
인메모리의 장단점은 아래와 같다.
- 프로세스가 종료되면 데이터가 날아감
- Java 애플리케이션이 실행되는 JVM 안에서 실행됨
- H@를 다운 및 실행하지 않고도 사용 가능
- 메모리 안에서만 동작하므로 속도가 가장 빠름
02-2. In-Memory 사용법
스프링부트에서 h2 인메모리 모드를 사용하기 위해서는, application.properties
파일에서 h2 데이터소스의 URL을 설정해주면 된다.
- Embedded 모드 URL
spring.datasource.url=jdbc:h2:~/test
- In-Memory 모드 URL
spring.datasource.url=jdbc:h2:mem:test
보면 In-Memory
모드를 사용할 경우 mem
키워드가 붙어있는 것을 볼 수 있다.
상황에 맞게 임베디드 모드와 인메모리 방식을 설정해 주면 된다.
02-3. In-Memory 콘솔로 보기
인메모리 방식의 경우 일반 h2 콘솔로 데이터를 확인할 수 없다.
인메모리 방식으로 h2를 사용할 경우, 스프링부트가 실행중인 port
에서 콘솔을 띄울 수 있다.
http://localhost:8080/h2-console/
스프링부트에서도 볼 수 있는 경로를 알려주는 것을 확인할 수 있다.
'Back End > Spring && Spring Boot' 카테고리의 다른 글
[Spring Security / JWT] 스프링 부트에서 JWT 구현하기 with Spring Security (0) | 2024.07.10 |
---|---|
[Spring Security] UsernamePasswordAuthenticationFilter 내부 동작 파해치기 (0) | 2024.07.05 |
[Spring boot / JPA] 스프링 부트 데이터베이스 초기화 (0) | 2024.06.26 |
JWT 개념과 구조, 작동 방식 (0) | 2024.06.22 |
[Spring Security] 현재 로그인된 유저 정보 얻기 - @AuthenticationPrincipal (0) | 2024.06.18 |