인메모리(In-memory) DB란?
메모리 안에 데이터를 저장하는 데이터베이스입니다. (메모리는 휘발성으로 컴퓨터를 종료하면 저장되어 있는 데이터가 모두 삭제됩니다.)
인메모리(In-memory) DB는 애플리케이션이 실행되는 동안에만 데이터를 저장하고, 애플리케이션 실행을 종료했다가 다시 실행시키면 인메모리(In-memory) DB안에 저장되어 있던 데이터는 모두 삭제 됩니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // JPA 사용
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' // JDBC 사용
runtimeOnly 'com.h2database:h2' // H2 사용
}
Spring에서는 application.properties
또는 application.yml
파일을 통해 Spring에서 사용하는 다양한 설정 정보들을 추가합니다.
spring:
h2:
console:
enabled: true # H2 Console 사용 여부
path: /h2 # Context path 변경
datasource:
url: jdbc:h2:mem:test # JDBC URL 변경
sql:
init:
schema-locations: classpath*:db/h2/schema.sql # 테이블 생성 파일 경로
http://localhost:8080/h2
로 H2 Console 접속 가능/h2-console
url: jdbc:h2:mem:test
로 변경, URL이 유지됩니다.schema
라는 파일명으로 .sql
파일의 경로를 지정해주면 schema.sql
파일에 있는 스크립트 읽어서 애플리케이션 실행 시, DB에 테이블을 자동으로 생성해준다.schema.sql
파일의 스크립트가 매번 실행된다.src/main/resources/db/h2
에 위치
Spring Security를 사용하면 H2 Console에서 위와 같은 오류가 발생할 수 있습니다.
X-Frame-Options
Spring Security는 Clickjacking 공격을 막기 위해 기본적으로 frameOptions()
기능이 활성화 되어 있으며 디폴트 값은 DENY입니다.
<frame>
, <iframe>
, <object>
의 HTML 태그를 이용한 페이지 렌더링을 허용하지 않겠다는 의미입니다.
SecurityConfiguration
클래스의 filterChain()
메서드에 .headers().frameOptions().sameOrigin()
를 추가해주면 정상정인 H2 Console화면이 보입니다.frameOptions().sameOrigin()
은 동일 도메인으로부터 들어오는 request만 페이지 렌더링을 허용합니다.
H2 웹 콘솔의 화면이 내부적으로 태그를 사용하고 있기 때문에 H2 웹 콘솔을 정상적으로 사용할 수 있도록 위와 같이 설정하면 됩니다.
배포 애플리케이션에 H2를 사용하지 않는다면 삭제 후 배포합니다.
.headers().frameOptions().disable()
X-Frame-Options
를 비활성화 하는 설정
보안측면에서 sameOrigin()
보단 덜 안전하지만, 도메인이 다른 request의 페이지 렌더링을 허용해야 할 때 사용합니다.
환경 버전
Spring Boot 2.7.2
Gradle 7.5
JDK 11