강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

seongmin2053님의 프로필 이미지
seongmin2053

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

38강. profile과 H2 DB

Whitelabel Error Page 오류가 났습니다.

작성

·

31

0

h2-console 웹에 접속하려고 하니 Whitelabel Error Page 오류가 뜹니다. 그래서 구글링하니 Spring Security에서 h2 console을 허용하라는데 어떻게 하는지 잘 모르겠습니다 ㅜㅜ.. 도와주세요 ㅜㅜ

답변 2

0

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요!! 🙂 seongmin2053님~

혹시 현재 application.yml 설정이 어떻게 되어 있는지, 어떤 경로로 h2-console로 접근하려 했는지 확인 가능하실까요?!

사용하신 설정을 기반으로 어떤 부분이 문제인지 추적해 볼 수 있을 것 같습니다. 🙇

seongmin2053님의 프로필 이미지
seongmin2053
질문자

넵 제가 확인이 늦었네요 죄송합니다ㅜㅜ

spring:
  config:
    activate:
      on-profile: local
    datasource:
      url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
      username: "sa"
      password: ""
      driver-class-name: org.h2.Driver
    jpa:
      hibernate:
        ddl-auto: create
      properties:
        hibernate:
          show_sql: true
          format_sql: true
          dialect: org.hibernate.dialect.H2Dialect
    h2:
      console:
        enabled: true
        path: /h2-console

---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: "1234"
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect
최태현님의 프로필 이미지
최태현
지식공유자

아유 아닙니다 ㅎㅎㅎ 편하신 때에 알려주셔요! 설정 확인 결과 특이사항은 없는데요! (= 이론상 잘 동작해야 하는데요!)

  1. 어떤 profile로 서버를 실행시키셨는지

  2. 서버가 실행될 때의 활성화된 profile은 무엇인지

  3. 어떤 경로로 접근하셨는지

알려주시면 원인 파악에 더 도움이 될 것 같습니다.

seongmin2053님의 프로필 이미지
seongmin2053
질문자

  1. profile은 local 로 실행시켰습니다!

  2. 활성화된 profile 역시 local 로 확인했습니다!

  3. 질문 이해를 잘 못하였습니다 ㅜㅜ http://localhost:8080/h2-console 경로로 접근하였습니다

     

그런데 제가 서버를 실행하니 h2 데이터베이스에서 user 예약어 때문에 오류가 떴는데 이것 때문에 접속이 안되는 것 같습니다. 이 오류를 해결하기 위해 "user" 이런식으로 따옴표로 감싸라고 하는데 어떻게 해결해야 하는지 잘 모르겠습니다.

 

최태현님의 프로필 이미지
최태현
지식공유자

3번, 접근 하신 경로는 URL을 문의 드린 것이 맞습니다! 모두 다 잘 하셨네요!

그런데 제가 서버를 실행하니 h2 데이터베이스에서 user 예약어 때문에 오류가 떴는데 이것 때문에 접속이 안되는 것 같습니다

라는 오류가 나는 경우는 서버 자체가 실행되다가 에러로 인해 종료될거라 /h2-console 로 접속되지 않는 충분한 원인이 될 것 같습니다.

아래 글을 타고 들어가 참고해보시면 도움이 될거에요!

 

여기에도 해결책을 간략히 말씀드리면

  1. User Entity 위에 @Table(name = "users") 라는 코드를 추가해 User entity는 user 테이블 대신 users 테이블을 사용하게 한다

  2. H2 예약에서 user 를 제외해 user 테이블을 사용할 수 있게 한다

두 가지 방법이 있습니다! 둘 중 편하신 쪽으로 적용해도 좋습니다. 감사합니다! 🙇

seongmin2053님의 프로필 이미지
seongmin2053
질문자

자세한 설명 너무 감사합니다! ㅜㅜ

보내주신 링크 질의글 확인했습니다! 제가 이해한 것이 맞다면 NON_KEYWORDS=USER가 H2 데이터베이스에서 USER 예약어를 제거하는 것인데 제가 위 답글에서 보내드린 YML 코드에 보면 현재 USER 예약어를 제거하고 있음에도 불구하고 여전히 오류가 뜨는 이유가 궁금합니다!

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요! 대댓글이라 늦게 확인했군요 😭

제가 이해한 것이 맞다면 NON_KEYWORDS=USER가 H2 데이터베이스에서 USER 예약어를 제거하는 것인데 제가 위 답글에서 보내드린 YML 코드에 보면 현재 USER 예약어를 제거하고 있음에도 불구하고 여전히 오류가 뜨는 이유가 궁금합니다!

이해 해주신 내용이 정확히 맞습니다. 말씀해주신 것처럼 이론적으로는 해당 오류가 사라져야 맞는데요, H2 버전이 다르거나 제가 아직 알지 못하는 모종의 이유로 해당 옵션이 동작하지 않는 가능성이 있을 것 같아요 🥺 제 경험상 이런 부분은 정확히 같은 환경, 정확히 같은 버전으로 확인해 깊이 있는 디버깅을 해야 하다보니... 우선은 @Table 을 사용해 지나가셔도 좋을 것 같습니다. 감사합니다. 🙇

0

안녕하세요, 인프런 AI 인턴입니다. seongmin2053님.

“Whitelabel Error Page”는 주로 Spring Boot에서 발생하는 일반적인 오류 페이지로, 주로 설정 문제로 인해 발생합니다. 특히, h2-console에 접근할 때 이 오류가 발생하는 경우, Spring Security 설정에서 h2-console 경로가 허용되지 않아 발생할 수 있습니다.

Spring Security를 사용하고 있는 경우, 다음과 같은 방법으로 h2-console에 대한 접근을 허용할 수 있습니다:

  1. WebSecurityConfigurerAdapter를 상속받는 Security Configuration 클래스를 생성합니다.
  2. configure 메서드를 오버라이드하여 h2-console 경로에 대한 접근을 허용합니다.

아래 예시를 참고하세요:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/h2-console/**").permitAll()  // h2-console 접근 허용
            .and()
            .csrf().disable()  // CSRF 비활성화 (개발 환경용)
            .headers().frameOptions().disable();  // 프레임 옵션 비활성화
    }
}

위 설정을 적용한 후, 다시 h2-console에 접속해 보시면 Whitelabel Error Page 문제 없이 접속이 가능할 것입니다.

관련하여 더 깊이 있는 정보가 필요하시다면, Whitelabel Error Page 라고 나옵니다.. 구글링해 보면서 찾아보았는데 어떻게 해결하죠?(해결) 게시물을 확인해 보세요.

저는 질문자님의 이해를 돕고자 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

seongmin2053님의 프로필 이미지
seongmin2053

작성한 질문수

질문하기