티스토리 뷰
1. 이 포스트는 스프링 내장 데이터베이스 H2를 사용할 때 주의할 점이다.
2. 프로그램을 재기동한다고 해서 무조건 저장된 데이터가 삭제가 되는 것이 아니다. 종종 안될 때도 있다.
2-1 제대로 삭제가 되지 않으면 mvn clean으로 프로그램을 완전 삭제하고 mvn spring-boot:run(리빌드)을 실행한다.
3. 주요 키워드가 있어서 사용하면 안되는 단어들이 있다. 예를 들면 order, createdat 같은 것이다.
3-1 order를 테이블 이름으로 사용하면 그냥 에러가 나버린다. 이유도 제대로 설명해주지 않고 에러가 뜬다.
3-2 createdAt를 속성으로 사용하면 created_at을 찾는다.
3-2-1 @Column(name="createdAt")이라고 해도 create_at을 찾는다.
4. 절대로 schema.sql과 jpa 자동테이블 생성을 같이 사용하면 안된다.
4-0 데이터 로딩용 data.sql은 사용할 수 있다.
4-1 schema.sql을 사용하는 경우는 반드시 applicaton.properties에서 아래처럼 자동생성을 막아야 한다.
spring.jpa.hibernate.ddl-auto=none
4-2 h2의 경우는 자동생성을 권장하는데 워낙 사용할 수 없는 키워드들이 많기 때문이다.
4-3 웬만하면 다른 데이터베이스를 사용하는 게 좋다.
5. 스프링 최신 버전의 경우는 기본 데이터베이스 이름이 random으로 생성되는 경우가 있다.
5-1 이럴 경우 데이터베이스 이름을 application.properties에 명시해주면 편리하다.
spring.datasource.url=jdbc:h2:mem:testdb
6. h2 데이터베이스의 console은 기본적으로 false 되어 있다. 그래서 그냥 볼수가 없다.
6-1 물론 spring devtools 의존성이 설정되어 있는 경우는 기본값이 true가 된다.
6-2 devtools을 사용하지 않는 경우는 아래처럼 명시적으로 enabled=true로 해주어야 console을 사용할 수 있다.
6-3 console의 접근 경로는 아래의 path 속성으로 변경할 수 있다.
spring.jpa.show-sql=true
spring.h2.console.enabled=true
spring.h2.console.path=/h2
7. 스프링 보안이 의존성에 추가된 경우에는 h2 console의 진입이 되지 않는다.
7-1 그럴 경우 보안설정에서 csrf를 해지하고 frameOptions를 disable 해야 진입이 가능하다.
package pe.pilseong.springdepth.security;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().passwordEncoder((NoOpPasswordEncoder.getInstance()))
.withUser("pilseong").password("qwe123").roles("USER", "ADMIN").and()
.withUser("suel").password("qwe123").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and()
.authorizeRequests()
.antMatchers("/surveys/**").hasRole("USER")
.antMatchers("/users/**").hasRole("USER")
.antMatchers("/**").hasRole("ADMIN")
.anyRequest().authenticated().and()
.csrf().disable().headers().frameOptions().disable();
}
}
'Spring > Spring Basic' 카테고리의 다른 글
Spring Basic : form 바인딩 @InitBinder와 Converter (0) | 2020.07.08 |
---|---|
Spring Basic : Project Lombok (0) | 2020.06.30 |
Spring Basic : ConcurrentModificationException 해결하기 (0) | 2020.06.11 |
Spring : Jackson databind (0) | 2020.05.21 |
Spring : Web MVC with Java Config 설정 - Static 파일 사용하기 (0) | 2020.05.20 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- one-to-many
- 설정
- Spring Security
- crud
- 매핑
- XML
- 스프링
- Angular
- jsp
- Validation
- form
- spring boot
- Spring
- 로그인
- RestTemplate
- 스프링부트
- MYSQL
- 자바
- Security
- Rest
- mapping
- WebMvc
- one-to-one
- 상속
- 외부파일
- hibernate
- 하이버네이트
- Many-To-Many
- login
- 설정하기