Spring Security & jOOQ with H2: 설정 및 문제 해결 가이드

Spring Security & jOOQ with H2: 설정 및 문제 해결 가이드

1. Spring Security 설정

Spring Boot 프로젝트에서 Spring Security를 설정하는 과정에서 몇 가지 문제가 발생할 수 있습니다. 주요 이슈와 해결 방법을 정리하겠습니다.

1.1. 기본 로그인 설정 변경

Spring Security는 기본적으로 로그인 페이지를 제공하지만, 이를 커스터마이징하려면 SecurityConfig 설정이 필요합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(Customizer.withDefaults())
.logout(LogoutConfigurer::permitAll);
return http.build();
}
}

1.2. CSRF 비활성화 (필요 시)

API 요청 테스트 중 403 Forbidden 오류가 발생하면 CSRF 설정을 확인해야 합니다.

http.csrf(AbstractHttpConfigurer::disable);

1.3. CORS 설정

외부 API 호출 시 CORS 에러가 발생할 수 있습니다. 이를 해결하려면 다음과 같이 설정합니다.

@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of("*"));
configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
configuration.setAllowedHeaders(List.of("*"));

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}

2. H2 데이터베이스 & jOOQ 코드 생성

Spring Boot에서 H2 메모리 모드를 사용하여 jOOQ 코드 생성을 자동화하는 과정에서 몇 가지 문제가 발생할 수 있습니다.

2.1. H2 TCP 모드 실행

H2 데이터베이스가 메모리 모드로 실행되면, jOOQ 코드 생성 시 테이블을 찾지 못하는 문제가 발생할 수 있습니다. 이를 해결하려면 H2 TCP 서버를 실행한 후 Spring Boot 애플리케이션을 실행해야 합니다.

1) H2 TCP 서버 실행
& "D:\AlertemWorkspace\jdk-17\bin\java.exe" -cp "D:\AlertemWorkspace\h2-2.3.232.jar" org.h2.tools.Server -tcp -tcpAllowOthers -tcpPort 9092 -ifNotExists
2) Spring Boot 애플리케이션 실행 (테이블 생성)
./gradlew bootRun
3) jOOQ 코드 생성
./gradlew generateJooq

3. jOOQ 코드 생성 시 오류 해결

3.1. jOOQ 코드가 생성되지 않는 문제

문제:
Spring Boot에서 H2를 메모리 모드로 실행한 후 generateJooq 실행 시 테이블이 존재하지 않는 오류 발생.

해결 방법:

  1. H2 TCP 모드를 활성화하여 유지된 DB를 사용할 것.
  2. Spring Boot 애플리케이션을 한 번 실행하여 테이블을 먼저 생성한 후 generateJooq 실행.
jooq {
version = '3.17.6'
configurations {
main {
generationTool {
jdbc {
driver = 'org.h2.Driver'
url = 'jdbc:h2:tcp://localhost:9092/mem:testdb'
user = 'sa'
password = ''
}
generator {
database {
name = 'org.jooq.meta.h2.H2Database'
schemata {
schema {
inputSchema = 'PUBLIC'
}
}
includes = '.*'
}
target {
packageName = 'com.surp.jooq'
directory = 'build/generated-sources/java'
}
}
}
}
}
}

4. 정리 및 최종 실행 순서

  1. H2 TCP 서버 실행 & "D:\AlertemWorkspace\jdk-17\bin\java.exe" -cp "D:\AlertemWorkspace\h2-2.3.232.jar" org.h2.tools.Server -tcp -tcpAllowOthers -tcpPort 9092 -ifNotExists
  2. Spring Boot 애플리케이션 실행 (테이블 생성) ./gradlew bootRun
  3. jOOQ 코드 생성 실행 ./gradlew generateJooq

이 순서를 따르면 Spring Security 및 jOOQ 코드 생성 문제 없이 프로젝트를 원활하게 구성할 수 있습니다.

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다