Spring Boot 애플리케이션에서 H2 인-메모리 데이터베이스에 SQL 파일 사용하기
Spring Boot에서 SQL Server 테이블을 사용하는 방법은 일반적으로 2가지입니다.
1. 외부 데이터베이스 사용
외부 데이터베이스를 사용하는 경우, SQL Server 인스턴스를 시작하고 테이블을 생성합니다. 이후 Spring Boot 애플리케이션에서 해당 테이블을 사용할 수 있습니다. 이 방법은 일반적으로 많이 사용되며, 테이블이 생성 및 관리되는 위치와 Spring Boot 애플리케이션의 코드가 분리되기 때문에 보다 유연한 구성이 가능합니다.
2. 내부 데이터베이스 사용
내부 데이터베이스를 사용하는 경우, H2 데이터베이스를 사용하는 것과 마찬가지로 SQL Script를 작성하여 테이블을 생성할 수 있습니다. 이 경우, SQL Server 인스턴스가 아닌 Spring Boot 내부의 데이터베이스에 테이블이 생성됩니다. 다음은 SQL Script를 사용하여 SQL Server 테이블을 생성하는 방법입니다.
H2 인-메모리 데이터베이스를 사용하는 Spring Boot 애플리케이션에서는 데이터베이스와 테이블을 자동으로 생성하는 기능이 있습니다. 이때, SQL 파일을 사용하여 테이블을 생성하고 초기 데이터를 삽입할 수 있습니다.
H2 인-메모리 데이터베이스 설정
Spring Boot에서 H2 데이터베이스를 사용하기 위해서는 pom.xml
파일에 아래와 같이 의존성을 추가해야 합니다.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
의존성을 추가하면, application.properties
파일에서 데이터베이스 설정을 할 수 있습니다. 아래와 같이 설정하면, InMemory 방식으로 H2 데이터베이스를 사용할 수 있습니다.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
위 설정에서 "testdb"는 생성할 데이터베이스 이름을 나타냅니다.
SQL 파일 작성
Spring Boot에서 H2 데이터베이스를 사용하는 경우, src/main/resources
경로 아래에 schema.sql
파일과 data.sql
파일을 생성하여 SQL 문장을 작성할 수 있습니다. 이러한 SQL 파일을 사용하면 데이터베이스 테이블 및 데이터를 자동으로 생성할 수 있습니다.
먼저, H2 데이터베이스를 사용하는 경우, src/main/resources
경로 아래에 schema.sql
파일과 data.sql
파일을 생성하여 SQL 문장을 작성합니다. 이때, schema.sql
파일에는 테이블 생성 문장을 작성하고, data.sql
파일에는 초기 데이터 삽입 문장을 작성합니다.
아래는 Broths 테이블을 생성하고 초기 데이터를 삽입하는 SQL 문장의 예시입니다. 이 예시에서는 Broths 테이블에 Id, Name, IsVegan 세 개의 컬럼이 있으며, IsVegan 컬럼의 데이터 타입은 BOOLEAN으로 정의되어 있습니다.
-- schema.sql
CREATE TABLE Broths (
Id INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(50) NOT NULL,
IsVegan BOOLEAN NOT NULL
);
CREATE TABLE [dbo].[Noodles] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (25) NOT NULL,
[BrothId] INT NOT NULL,
CONSTRAINT [PK_Noodles] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Noodles_Broths_BrothId] FOREIGN KEY ([BrothId]) REFERENCES [dbo].[Broths] ([Id]) ON DELETE CASCADE
);
GO
CREATE NONCLUSTERED INDEX [IX_Noodles_BrothId]
ON [dbo].[Noodles]([BrothId] ASC);
CREATE TABLE [dbo].[Garnishes] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (25) NOT NULL,
[NoodleId] INT NULL,
CONSTRAINT [PK_Garnishes] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Garnishes_Noodles_NoodleId] FOREIGN KEY ([NoodleId]) REFERENCES [dbo].[Noodles] ([Id])
);
GO
CREATE NONCLUSTERED INDEX [IX_Garnishes_NoodleId]
ON [dbo].[Garnishes]([NoodleId] ASC);
-- data.sql
INSERT INTO Broths (Name, IsVegan) VALUES ('콩국물', TRUE);
INSERT INTO Broths (Name, IsVegan) VALUES ('멸치국물', FALSE);
INSERT INTO Broths (Name, IsVegan) VALUES ('라면국물', TRUE);
INSERT INTO Noodles (Name, BrothId) VALUES ('우동', 2);
INSERT INTO Noodles (Name, BrothId) VALUES ('쌀국수', 1);
INSERT INTO Noodles (Name, BrothId) VALUES ('라면', 3);
INSERT INTO Garnishes (Name, NoodleId) VALUES ('달걀', 1);
INSERT INTO Garnishes (Name, NoodleId) VALUES ('초고추장', 3);
이제 Spring Boot 애플리케이션을 실행하면, H2 인-메모리 데이터베이스가 자동으로 생성되며, schema.sql 파일에 정의된 테이블과 data.sql 파일에 정의된 초기 데이터가 자동으로 생성됩니다.
초기화 순서
Spring Boot는 데이터베이스 초기화를 수행할 때 다음 순서로 작업을 수행합니다.
스키마 생성 파일 (schema.sql)을 실행합니다. 데이터 삽입 파일 (data.sql)을 실행합니다.
SQL 파일 이름 변경
SQL 파일 이름을 다른 이름으로 변경하려면 application.properties 파일에 다음과 같은 설정을 추가합니다.
spring.datasource.schema=classpath:/db/create-script.sql
spring.datasource.data=classpath:/db/data-script.sql
위 설정에서 create-script.sql은 스키마 생성 파일의 이름을, data-script.sql은 데이터 삽입 파일의 이름을 나타냅니다.
H2 콘솔 사용
Spring Boot에서는 H2 데이터베이스 콘솔을 사용하여 데이터베이스에 대한 다양한 작업을 수행할 수 있습니다. H2 콘솔을 사용하려면, application.properties 파일에 다음과 같은 설정을 추가합니다.
# H2 Console 설정
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
위 설정에서 /h2-console 경로를 통해 H2 콘솔에 접근할 수 있습니다. H2 콘솔에 접근하려면, 웹 브라우저에서 http://localhost:8080/h2-console 주소로 접속합니다. 이후, JDBC URL 항목에는 jdbc:h2:mem:testdb를 입력하고, User Name 항목에는 sa를 입력합니다.
마무리
이 글에서는 Spring Boot 애플리케이션에서 H2 인-메모리 데이터베이스에 SQL 파일을 사용하는 방법에 대해 알아보았습니다. H2 데이터베이스를 사용하는 경우, SQL Script를 사용하여 데이터베이스를 초기화하고, SQL 파일을 사용하여 데이터를 자동으로 삽입할 수 있습니다. 또한, H2 콘솔을 사용하여 데이터베이스에 대한 다양한 작업을 수행할 수 있습니다. 이러한 방법을 활용하면 Spring Boot 애플리케이션에서 쉽게 데이터베이스를 구성하고 관리할 수 있습니다.