🤔 H2 Database
H2 DB는 Java로 작성된 RDBMS 이다.
특징으로는
1. 인메모리 데이터베이스로 프로그램 구동시 RAM에 데이터들을 저장하며 따라서
프로그램이 종료되면 모든 메모리들이 삭제된다.
2. 개발 단계나 테스트를 위해 자주 사용되는 DB이다.
3. 임베디드 모드와 서버 모드, In-Memory 모드가 존재한다. (후술)
4. 웹 콘솔이 존재한다.
장점으로는
1. 적은 용량을 필요로하는 프로그램이고 메모리에서 작동하므로 매우 가볍고 빠르다.
2. 웹 콘솔을 제공하므로 데이터를 쉽게 간편하게 관리할 수 있다.
단점으로는
1. 대규모 트랜잭션 처리나 매우 큰 데이터베이스에선 성능 저하가 발생할 수 있다.
2. 확장성이나 고급 기능이 타 DB에 비해 부족하다.
서버 모드
> 데이터 파일을 로컬에 저장하는 모드, H2를 다운로드해야한다.
application.yml or properties에 url을 입력해줘야한다. 외부 터미널을 통해 DB를 실행한다.
스프링 내부의 H2 DB를 사용하는 것이 아닌 외부 DB를 사용하는 것이므로 여러 애플리케이션이
데이터를 공유한다면 적절한 선택지가 될 수 있다.
임베디드 모드
> 마찬가지로 데이터파일을 로컬에 저장하는 모드이다.
단 스프링 부트 내 H2 DB를 쓰므로 다운로드가 필요없다.
build.gradle과 application.yml or properties 설정을 통해 실행한다.
스프링 부트 실행시 DB도 함께 실행된다.
In-Memory 모드
> 데이터를 로컬에 저장하지 않고 메모리에 저장한다. 영구적 저장이 아니고 휘발성이므로 주의.
임베디드 모드와 마찬가지로 스프링 부트 내 H2 DB를 쓰며 실행시 DB도 실행된다.
본인은 티스토리와 비슷한 블로그를 만드는 것을 주제로 토이프로젝트를 만들고 있으며
데이터가 크지 않고, 개발 초기 단계이기 때문에 만든 API 기능들이 잘 동작하는지 빠르게 테스트하기 위해
H2를 선택했고 스프링부트 내에서 실행되어 네트워크를 통해 DB에 접근하는 Server모드보다 속도가 빠른
In-Memory 모드로 진행했다.
또한 Spring 실력 향상과 JPA를 익히기 위한 토이프로젝트로 배포 계획이 없기 때문에
여러 클라이언트에서 접근할 일이 없으므로 더욱이 In-Memory 모드를 채택했다.
혹시라도 배포를 하거나 하게 된다면 Server모드를 사용한다던가 다른 DBMS로 교체하는 것을
고려해봐야 할 것 같다.
🛠️ H2 Database 파일 생성하기(In-Memory Mode)
1. application.yml (혹은 properties) 에 다음과 같이 사용할 스키마를 선언한다.
본인은 testdb 스키마를 사용하겠다고 선언했으며 In-memory 모드이므로 jdbc:h2:뒤에 "mem" 을 작성했다.
2. 웹 콘솔 접근하기
스프링부트 서버를 실행한 상태에서 브라우저에 localhost:8080/h2-console 을 입력한다.
JDBC URL에 스프링 부트 프로젝트 속 application.yml 파일에 명시한 url과 사용자명, 비밀번호를 작성하고
연결하면 된다.
🛠️ H2 Database 파일 생성하기(Embedded Mode)
1. application.yml (혹은 properties) 에 다음과 같이 db파일 생성 경로를 설정해준다.
본인은 현재 프로젝트 폴더 안에 있는 mytistorydb폴더 안에 mytistory라는 이름의 db 파일을 만들겠다고 선언했다.
가장 마지막에 명시한 것이 db파일의 이름이 된다.
2. 스프링부트 프로젝트를 실행하면 제대로 생성된 것을 확인할 수 있다.
3. 웹 콘솔에 접근하기
스프링부트 서버를 실행한 상태에서 브라우저에 localhost:8080/h2-console 을 입력한다.
JDBC URL에 스프링 부트 프로젝트 속 application.yml 파일에 명시한 url과 사용자명, 비밀번호를 작성하고
연결하면 된다.
아마 Server 모드도 H2 DB를 다운로드 하여 외부에서 실행해주는 것 이외에는 동일한 방식일거라고 생각한다.
'토이프로젝트 기록' 카테고리의 다른 글
Stream 과 ResponseEntity<>에 대하여 (0) | 2024.06.17 |
---|