TodoService코드를 보면, 데이터베이스를 사용하지 않고, 3개의 임의의 값만 미리 저장해둔 것을 확인할 수 있었음
static {
todos.add(new Todo(++todosCount, "minjiki2", "Learn springboot",
LocalDate.now().plusYears(1), false));
todos.add(new Todo(++todosCount, "minjiki2", "Learn db",
LocalDate.now().plusYears(1), false));
todos.add(new Todo(++todosCount, "minjiki2", "Learn algorithm",
LocalDate.now().plusYears(2), false));
}
하지만 이제는 H2 DB를 사용해 보자.
1. pom.xml - jpa, H2 DB 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
콘솔창 실행시키면, 다음과 같은 H2 콘솔이 제공된 것을 확인할 수 있었다.
2. localhost:8080/h2-console 기본 URL 접속
3. H2 console URL을 constant하게 만들자
어플리케이션을 재실행할 때마다, 1번의 콘솔창 url이 계속 바뀌는데, 이 url 값을 간단하게 고정시키고 싶다. 변하지 않게.
// application.properties
spring.datasource.url=jdbc:h2:mem:testdb
콘솔창을 보니, 잘 실행된 것을 알 수 있었다.
4. localhost:8080/h2-console 재접속
application.properties에서 설정한 jdbc url을 그대로 입력하자
but, 에러남!
에러의 원인은 Spring Security의 특수한 설정 때문이다. 아래에서 코드를 수정해 에러를 고치자.
H2 데이터베이스 접근을 위한 설정을 추가해야 한다.
Spring Security가 기본적으로 제공해주는 2가지 기능
Spring Security에 추가할 설정 2가지
이 4가지 설정을 SpringFilterChain 클래스를 오버라이딩해줄 것이다!
public interface SecurityFilterChain {
boolean matches(HttpServletRequest request);
List<Filter> getFilters();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// All URLs are protected
http.authorizeHttpRequests(
// 모든 request에 대한 권한 보호 - 람다함수
auth -> auth.anyRequest().authenticated());
// A login form is shown for unauthorized requests
http.formLogin(withDefaults());
// CSRF disable
http.csrf().disable();
// Frames
http.headers().frameOptions().disable();
return http.build();
}
앞서 말했던 설정들을 모두 설정했다. 흐름만 이해하고 넘어가도 충분하다.
이 설정을 마치고, h2 console 창에 들어가서 다시 connect하면
드디어 h2 데이터베이스를 사용할 준비를 마쳤다!
참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/