개발환경
Language: Java
Version: Java 17
Gradle: Build tool
Spring Boot: Version 3.2.4
H2 Database 설명
H2 Database란?
Java로 개발된 오픈 소스 SQL 데이터베이스 관리 시스템(DBMS)이다.
가볍고 빠른 속도를 자랑하며 다양한 플랫폼에서 사용할 수 있다는 장점으로 인해 개발 및 테스트 환경에서 널리 활용된다.
특히 In-Memory 모드는 데이터베이스를 메모리에 저장하여 빠른 데이터 접근 속도를 제공하고
간편한 사용과 테스트 환경 적합성이라는 특징을 지닌다.
별도 설치할 필요 없다
Server Mode
H2 Database 서버를 별도의 프로세스로 실행하는 모드입니다.
장점 : In-Memory 모드보다 더 많은 기능을 제공 / 여러 클라이언트에서 동시에 접근할 수 있다.
단점 : In-Memory 모드보다 느림 / 별도의 설정이 필요함.
Embedded 모드
Java 애플리케이션 내에 H2 Database 엔진을 포함하는 모드입니다.
장점 : In-Memory 모드보다 느리지만 Server 모드보다 빠르다 / 별도의 서버 설정이 필요하지 않다.
단점 : In-Memory 모드와 마찬가지로 데이터 손실 가능성이 있다.
Mixed 모드
In-Memory 모드와 Server 모드를 함께 사용하는 모드입니다.
장점 : In-Memory 모드의 속도와 Server 모드의 기능성을 모두 제공함.
단점 : 설정이 다소 복잡합니다.
Web Console
웹 브라우저를 통해 H2 Database를 관리할 수 있는 인터페이스입니다.
장점 : 데이터베이스를 쉽게 관리하고 쿼리를 실행할 수 있다.
단점 : 별도의 설정이 필요하다.
선택 가이드
개발 및 테스트 환경 : In-Memory 모드 또는 Embedded 모드
빠른 속도가 중요 : In-Memory 모드
더 많은 기능이 필요 : Server 모드
간편한 설정 : Embedded 모드
웹 기반 관리 : Web Console
In-Memory 모드 장점
- 데이터베이스가 메모리에 저장되므로 파일 시스템에 접근하는 것보다 훨씬 빠른 속도로 데이터에 접근할 수 있다.
- 별도의 설정 없이 쉽게 사용할 수 있다.
- 테스트 환경에서 데이터베이스를 빠르고 쉽게 설정하고 사용할 수 있도록 함.
- 임시 데이터를 저장하는 데 적합하다
In-Memory 모드 단점
- 프로그램 종료 시 메모리에 저장된 데이터는 손실된다
- 메모리 용량에 따라 저장할 수 있는 데이터 양이 제한됨.
- 복잡한 쿼리는 메모리 부족 문제를 발생시킬 수 있다.
- In-Memory 모드는 실제 환경과 다른 동작을 할 수 있으므로 테스트 결과를 실제 환경에 적용할 때 주의해야 한다.
사용 예시
- 개발 환경에서 데이터베이스를 빠르고 쉽게 사용할 때
- 테스트 환경에서 데이터베이스를 빠르고 쉽게 설정하고 사용할 때
- 임시 데이터를 저장할 때
build.gradle 설정 파일
plugins {
id 'org.springframework.boot'
id 'io.spring.dependency-management'
id 'groovy'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.spockframework:spock-core:2.1.0-RC-4'
}
tasks.named('test') {
useJUnitPlatform()
}
application.properties
# H2 In-Memory Database URL 및 인증 정보 설정
# H2 Console 활성화
# DDL 자동 생성 및 SQL 로그 출력 설정
# h2 In-Memory url
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
# h2 username
spring.datasource.username=sa
# h2 Driver
spring.datasource.driverClassName=org.h2.Driver
# h2 password
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.h2.console.enabled=true
spring.sql.init.mode=embedded
#jwt.secret=szs_secret
spring.datasource.url
: H2 In-Memory Database를 사용하도록 설정합니다.spring.datasource.driverClassName
: H2 Database 드라이버 클래스를 설정합니다.spring.jpa.database
: 사용하는 Database 종류를 설정합니다.spring.jpa.hibernate.ddl-auto
: 테이블 스키마를 자동으로 생성하도록 설정합니다.
Entity Class
/*
[ 회원가입 포멧 ]
JPA Entity 클래스 선언
테이블 이름 매핑
주요 키 및 필드 정의
기본 생성자 제공
*/
@Entity
@Data
@Table(name="MEMBER")
public class MemberEntity {
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
private String userId;
private String password;
private String name;
private String regNo;
private String role;
public MemberEntity() {
}
}
@Entity
: 이 클래스가 JPA Entity임을 나타냅니다.@Table: Entity
: 클래스를 매핑할 데이터베이스 테이블 이름을 지정합니다.@Id
: 주요 키 필드를 나타냅니다.@GeneratedValue
: 주요 키 값 생성 전략을 지정합니다.
Repository Interface
/*
JPA Repository 인터페이스 선언
기본 CRUD 기능 상속
사용자 정의 메서드 정의
*/
@Repository
public interface MemberRepository extends JpaRepository<MemberEntity, Integer> {
boolean existsByUserId(String userId);
MemberEntity findByUserId(String userId);
}
JpaRepository
: 기본 CRUD 기능을 제공하는 JPA Repository 인터페이스existsByUserId
: 사용자 ID로 존재 여부를 확인하는 메서드findByUserId
: 사용자 ID로 엔터티를 찾는 메서드
data.sql
-- USERDATA 테이블 생성 및 초기 데이터 삽입
CREATE TABLE USERDATA(
reg_no varchar(255),
name varchar(255)
);
INSERT INTO USERDATA (reg_no,name) VALUES ('860824-1655068','홍길동');
INSERT INTO USERDATA (reg_no,name) VALUES ('921108-1582816','김둘리');
INSERT INTO USERDATA (reg_no,name) VALUES ('880601-2455116','마징가');
INSERT INTO USERDATA (reg_no,name) VALUES ('910411-1656116','베지터');
INSERT INTO USERDATA (reg_no,name) VALUES ('820326-2715702','손오공');
참고자료
H2 Database 공식 문서: [https://www.h2database.com/](https://www.h2database.com/)
블로그[초록색거북이]님 : https://yjkim-dev.tistory.com/3
블로그[로그]님 : https://m.blog.naver.com/hj_kim97/222619660259
블로그[호형]님 : https://oingdaddy.tistory.com/264
❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
gayulz - Overview
개발자가 되고싶은 개발어린이💟. gayulz has 11 repositories available. Follow their code on GitHub.
github.com
'🌱 𝐅𝐫𝐚𝐦𝐞𝐰𝐨𝐫𝐤 > ⠀⠀⠀⠀ SᴛʀɪɴɢBᴏᴏᴛ' 카테고리의 다른 글
스프링의 생태계/Spring과 객체지향/SOLID원칙/Spring의 핵심 및 컨셉 (1) | 2024.02.09 |
---|---|
Spring Boot - AOP (0) | 2023.12.28 |
Spring Boot - JPA (1) | 2023.12.27 |
Spring Boot - JdbcTemplate (0) | 2023.12.27 |
Spring Boot - 스프링 통합 테스트 (0) | 2023.12.27 |