Skip to content

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-console
  • jdbc: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-console

application.yml에서는:

yaml
spring:
  profiles:
    active: dev

5. 접속 방법

서버 실행 후 브라우저에서:

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 변환 시 주의사항

MySQLH2 변환 규칙
AUTO_INCREMENTIDENTITY 사용
DATETIME / TIMESTAMPTIMESTAMP (H2 기본값)
ENGINE=InnoDB제거
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPDEFAULT CURRENT_TIMESTAMP (H2는 ON UPDATE 없음)
TINYINT(1)BOOLEAN 또는 INT

8. SyncBoot 전체 스키마를 H2로 자동 변환하는 방법

  1. 현재 MySQL에서 mysqldump로 스키마 추출

    bash
    mysqldump -u root -p --no-data syncboot > schema.sql
  2. H2 Database 웹 콘솔 또는 CLI에서 실행 불가능한 MySQL 전용 구문 제거 (ENGINE=, CHARSET=, ON UPDATE CURRENT_TIMESTAMP 등)

  3. 타입 변환

  • bigint(20)BIGINT
  • varchar(255) → 그대로 사용 가능
  • int(11)INT
  1. 날짜 필드: datetimetimestamp

Last updated: