SyncBoot는 Spring Boot 기반이라 H2 Database 설정도 일반 Spring Boot 방식 그대로 적용하면 됩니다. 아래는 개발/테스트용으로 H2를 사용하도록 설정하는 방법입니다.
1. pom.xml에 H2 의존성 추가
xml
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>- scope를
runtime으로 두면 빌드 시 포함되지 않고 실행 시만 로드됩니다.
2. application.yml (메모리 모드)
yaml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:syncboot;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.H2Dialect
# H2 콘솔 활성화
spring.h2.console.enabled: true
spring.h2.console.path: /h2-consolejdbc:h2:mem:syncboot: 메모리 DB, 서버 재시작 시 데이터 사라짐DB_CLOSE_DELAY=-1: 애플리케이션 종료 전까지 세션 유지/h2-console: 웹 브라우저로 DB 접속 가능
3. (선택) 파일 모드로 사용
yaml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:file:./h2data/syncboot;AUTO_SERVER=TRUE
username: sa
password:
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.H2Dialect
spring.h2.console.enabled: true
spring.h2.console.path: /h2-console- 파일 모드는 데이터가 로컬 파일(
./h2data/syncboot.mv.db)에 저장됩니다. AUTO_SERVER=TRUE를 붙이면 여러 프로세스에서 접근 가능.
4. SyncBoot에서 프로필별로 H2 적용하기
SyncBoot는 application-dev.yml 같은 환경별 프로필을 사용하니, 개발 모드에서만 H2를 쓰고 배포 모드에서는 MySQL/Oracle 등을 쓰도록 나눌 수 있습니다.
예:
yaml
# application-dev.yml
spring:
profiles: dev
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:syncboot;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.H2Dialect
spring.h2.console.enabled: true
spring.h2.console.path: /h2-consoleapplication.yml에서는:
yaml
spring:
profiles:
active: dev5. 접속 방법
서버 실행 후 브라우저에서:
http://localhost:8080/h2-console- JDBC URL :
jdbc:h2:mem:syncboot - User Name :
sa - Password : (비워둠)
6. H2 DDL 예시
sql
-- H2용 SyncBoot 핵심 테이블 생성 스크립트
-- 메모리 모드 또는 파일 모드 모두 호환 가능
CREATE TABLE sys_user (
id VARCHAR(36) PRIMARY KEY,
username VARCHAR(100) NOT NULL,
realname VARCHAR(100),
password VARCHAR(100) NOT NULL,
salt VARCHAR(50),
avatar VARCHAR(255),
birthday DATE,
sex INT,
email VARCHAR(100),
phone VARCHAR(50),
org_code VARCHAR(64),
status INT,
del_flag INT DEFAULT 0,
create_by VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(50),
update_time TIMESTAMP
);
CREATE TABLE sys_role (
id VARCHAR(36) PRIMARY KEY,
role_name VARCHAR(100) NOT NULL,
role_code VARCHAR(100) NOT NULL,
description VARCHAR(255),
create_by VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(50),
update_time TIMESTAMP
);
CREATE TABLE sys_user_role (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
role_id VARCHAR(36) NOT NULL,
create_by VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE sys_permission (
id VARCHAR(36) PRIMARY KEY,
parent_id VARCHAR(36),
name VARCHAR(100),
url VARCHAR(255),
component VARCHAR(255),
perms VARCHAR(255),
perms_type VARCHAR(2),
sort_no INT,
menu_type INT,
status INT,
icon VARCHAR(100),
create_by VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_by VARCHAR(50),
update_time TIMESTAMP
);
CREATE TABLE sys_role_permission (
id VARCHAR(36) PRIMARY KEY,
role_id VARCHAR(36) NOT NULL,
permission_id VARCHAR(36) NOT NULL,
create_by VARCHAR(50),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 인덱스 추가
CREATE INDEX idx_sys_user_username ON sys_user(username);
CREATE INDEX idx_sys_user_role_uid ON sys_user_role(user_id);
CREATE INDEX idx_sys_user_role_rid ON sys_user_role(role_id);
CREATE INDEX idx_sys_permission_pid ON sys_permission(parent_id);
CREATE INDEX idx_sys_role_permission_rid ON sys_role_permission(role_id);
CREATE INDEX idx_sys_role_permission_pid ON sys_role_permission(permission_id);7. MySQL → H2 변환 시 주의사항
| MySQL | H2 변환 규칙 |
|---|---|
AUTO_INCREMENT | IDENTITY 사용 |
DATETIME / TIMESTAMP | TIMESTAMP (H2 기본값) |
ENGINE=InnoDB | 제거 |
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | DEFAULT CURRENT_TIMESTAMP (H2는 ON UPDATE 없음) |
TINYINT(1) | BOOLEAN 또는 INT |
8. SyncBoot 전체 스키마를 H2로 자동 변환하는 방법
현재 MySQL에서
mysqldump로 스키마 추출bashmysqldump -u root -p --no-data syncboot > schema.sqlH2 Database 웹 콘솔 또는 CLI에서 실행 불가능한 MySQL 전용 구문 제거 (
ENGINE=,CHARSET=,ON UPDATE CURRENT_TIMESTAMP등)타입 변환
bigint(20)→BIGINTvarchar(255)→ 그대로 사용 가능int(11)→INT
- 날짜 필드:
datetime→timestamp