H2 데이터베이스
는 자바 기반의 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. H2는 개발 및 테스트 환경에서 자주 사용되며, 내장형(In-Memory) 모드와 파일 기반 모드를 모두 지원하여 매우 유연하게 사용할 수 있습니다.
Spring Boot와 H2
Spring Boot에서 H2 데이터베이스는 특히 개발 및 테스트 단계에서 자주 사용됩니다. 기본적으로 Spring Boot에서는
spring-boot-starter-data-jpa
와 함께 H2 의존성을 추가하면 자동으로 설정이 이루어집니다.1. DB 라이브러리
build.gradle의 dependencies에 아래 코드를 한 줄 추가해줍니다.
runtimeOnly 'com.h2database:h2'
2. DB와 연결 설정
application.properties 에 추가합니다.
# 2. H2 데이터베이스 설정 spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=sa
3. 연결하기
H2 db 연결 주소
http://localhost:8080/h2-console spring boot 서버를 실행하고 주소에 접속한 후 위에 properties의 정보와 일치시켜 줍니다. 그리고 Save하고 Connect 해줍니다.

4. Spring Boot - Hibernate
application.properties 에 추가합니다.
# 3. 하이버네이트 설정 spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true
4-1.spring.jpa.hibernate.ddl-auto
이 속성은 Hibernate가 데이터베이스 스키마를 어떻게 처리할지 결정하는 설정입니다.
ddl-auto는 "Data Definition Language"의 약자로, 데이터베이스의 테이블 구조를 정의하는 SQL 명령어들과 관련된 설정을 의미합니다.
•
create
옵션은 애플리케이션이 시작될 때마다 데이터베이스 테이블을 새로 생성합니다. 이 경우 기존에 있는 모든 데이터는 삭제되고, 새로운 스키마가 생성됩니다. 주로 개발 및 테스트 시 사용됩니다.- 옵션 설명:
none
: Hibernate가 아무런 스키마 관련 작업을 하지 않습니다. 데이터베이스 스키마를 수동으로 관리하려는 경우 사용합니다.validate
: 기존 스키마를 검증만 합니다. 엔티티 매핑이 데이터베이스와 일치하는지 확인하며, 일치하지 않을 경우 예외를 발생시킵니다.update
: 엔티티 매핑에 따라 데이터베이스 스키마를 업데이트합니다. 기존 데이터는 유지되지만, 새로운 엔티티나 변경된 엔티티 구조가 반영됩니다.create
: 애플리케이션을 시작할 때 데이터베이스 스키마를 새로 생성합니다. 기존 데이터는 삭제되며, 애플리케이션이 종료되면 데이터는 유지됩니다.create-drop
:create
와 동일하게 동작하지만, 애플리케이션 종료 시점에 데이터베이스 스키마를 삭제(drop)합니다. 주로 테스트 환경에서 사용됩니다.- 옵션 설명:
true
: SQL 쿼리를 콘솔에 출력합니다. 개발 중에 SQL 쿼리의 실행을 확인하고 디버깅할 때 유용합니다.false
: SQL 쿼리를 콘솔에 출력하지 않습니다. (기본값)
4-2. spring.jpa.show-sql
이 속성은 Hibernate가 실행하는 SQL 쿼리를 콘솔에 출력할지 여부를 결정합니다. 이 설정이
true
로 되어 있으면, Hibernate가 데이터베이스에 대해 실행하는 모든 SQL 쿼리가 콘솔에 출력되어 실시간으로 확인할 수 있게 해줍니다.
이 두 가지 설정을 통해 개발자는 애플리케이션이 어떻게 데이터베이스와 상호작용하는지 쉽게 파악하고, 데이터베이스 스키마와 관련된 작업을 자동화할 수 있습니다.
5. 테이블을 만들기 위한 클래스 생성
5-1. 클래스 만들고 멤버 변수 추가

테이블을 만들어 볼 것이다. board 패키지에 Board 클래스를 만든다.

클래스에 붙은 어노테이션은
@NoArgsConstructor
Lombok 라이브러리에서 제공하는 기능으로 클래스의 기본 생성자를 자동으로 생성해준다
@Getter
@Setter
Lombok 라이브러리에서 제공하는 기능으로 모든 필드에 대한
Getter와 Setter를 자동으로 생성해준다.
@Table(name="name_tb")
테이블로 설정할 클래스에 붙여주고 테이블 이름도 써준다.
보통 테이블이름 뒤에 tb를 붙여준다.
참고
Hibernate로 컬럼을 만들면 camelCase적용이 안 되고 postContetn → postcontent
@Entity
DB에서 조회하면 자동 매핑이 됨. Hibernate는 @Entity 어노테이션이 붙은 클래스를 스캔하여, 해당 클래스가 데이터베이스 테이블과 매핑되는 엔티티(클래스)임을 인식합니다. 이로써 해당 클래스를 데이터베이스 작업에 사용할 수 있습니다.
멤버 변수에 붙는 어노테이션으로는 (아래 변수에 붙는다)
@GeneratedValue(strategy = GenerationType.
IDENTITY
)
Auto_increment 설정. 시퀀스 설정->1씩 상승(db에 넣을 때)
@Id
PK설정. primary key 설정, index 설정
@Column(nullable = false)
컬럼에 null값을 허용하지 않는 것.
table이 생성될 때 이 어노테이션이 붙은 컬럼은 NOT NULL 속성을 가진다5-2. 빈 생성자가 필요한 이유
Hibernate와 같은 JPA 구현체는 데이터베이스로부터 엔티티 객체를 생성할 때 리플렉션을 통해 기본 생성자(파라미터가 없는 생성자)를 사용합니다. 이 기본 생성자가 없으면 Hibernate는 객체를 제대로 생성할 수 없고, 결과적으로 애플리케이션이 제대로 동작하지 않을 수 있습니다. 기본 생성자를 통해 객체를 생성한 후, 리플렉션을 사용해 필드에 값을 설정하기 때문에 기본 생성자가 반드시 존재해야 합니다. 따라서 빈 생성자(기본 생성자)는 JPA 엔티티 클래스에서 필수적입니다. 이를 위해 클래스에 직접 빈 생성자를 추가하거나, @NoArgsConstructor 어노테이션을 사용하여 기본 생성자를 자동으로 생성하도록 합니다.
5-3. 서버 실행하면 H2 데이터베이스의 테이블 생성

테이블이 생성되면서
@Id
를 붙인 id에는 primary key 설정이
@Column(nullable = null)
을 붙인 title과 content에는 not null 설정이 되었다.
Share article