Spring Cloud OpenFeign Spring Cloud 프로젝트의 일부로, 마이크로서비스 아키텍처에서 HTTP 클라이언트로 사용되는 도구 Spring 어플리케이션에서 RESTful 서비스를 손쉽게 호출하고 통합하는데 도움 build.gradle 의존성 추가 ext { springCloudVersion = "2022.0.3" } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } dependencies { implementation "org.springframework.cloud:spring-cloud-starter-openfeign..
@SpringBootTest Spring Boot 프로젝트에서 통합 테스트를 위해 사용되는 애노테이션 Spring 컨텍스트를 확장하고 Spring Boot 애플리케이션의 전체 설정을 로드하여 테스트 환경을 구성 내장 웹 서버를 사용하여 테스트를 실행 @SpringBootTest // Spring Boot 통합 테스트 설정 public class MyIntegrationTest { @Autowired private MyService myService; @Test public void testSomething() { // myService를 사용한 테스트 작성 } } SpringBootContextLoader 기본 사용: @ContextConfiguration(loader=...)이 특별히 정의되지 않은 경..
Spring Boot 에서 MockMvc 사용 시 403 Forbidden 에러 발생 Spring Security를 사용하고 있으면 SpringBootWebSecurityConfiguration 자동 설정 모든 Controller 요청할 때 Spring Security가 적용되어 권한이 없으면 에러 발생 MockMvc의 CSRF 비활성화 Spring Security는 기본적으로 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 CSRF 토큰을 사용 하지만 테스트 환경에서는 CSRF 토큰을 모의(Mock)로 주입하는 것이 번거로움 MockMvc 사용 시에는 CSRF 보호 기능을 비활성화하는 것이 편리 @Configuration @EnableWebSecurity public c..
WebMvcTest 웹 애플리케이션의 컨트롤러(Controller) 관련 테스트를 위해 사용 실제 웹 서버를 띄우지 않고도, Spring MVC 컨트롤러의 동작을 테스트 Spring 컨텍스트를 로드하고 의존성 주입(DI)을 사용하는 테스트 클래스에서 @Controller, @ControllerAdvice, @JsonComponent, Converter/GenericConverter, Filter, WebMvcConfigurer, HandlerMethodArgumentResolver 등 MVC 테스트에 필요한 설정만 로드 @Component, @Service, @Repository 등 불필요한 컴포넌트 로드 X 테스트에 필요한 컴포넌트는 @MockBean or @Import 활용해 사용 전체 애플리케이션의..
gradle 추가 implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16' datasource 설정 변경 spring: datasource: hikari: #jdbc-url: jdbc:mysql://127.0.0.1:3306/ #driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:log4jdbc:mysql://127.0.0.1:3306/ driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy logging 설정 logging: level: jdbc.sqlonly: OFF jdbc.audit: OFF jdbc.resultset: OFF jdb..
gradle 추가 dependencies { testImplementation("org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.0") } @MybatisTest @MybatisTest를 사용하면 불필요한 빈들은 로드되지 않으므로 더 가볍고 빠른 테스트가 가능 @MybatisTest @ActiveProfiles("mysql") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //Using a real database @ContextConfiguration(classes = {MyBatisConfig.class, DataSourceConfig.class})/..
yml DataSource 설정 spring.datasource.primary.url=jdbc:mysql://localhost:3306/db1 spring.datasource.primary.username=user1 spring.datasource.primary.password=pass1 spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2 spring.datasource.secondary.username=user2 spring.datasource.secondary.password=pass2 spring.datasource..
SqlSessionFactory MyBatis에서 SQL 세션을 생성하는 중요한 인터페이스 데이터베이스와의 연결을 설정하고 SQL 문을 실행하는데 사용되는 SQL 세션 객체를 생성 SqlSessionFactory를 생성하면 MyBatis의 SqlSession을 생성하고 데이터베이스와의 상호 작용을 수행 SqlSession은 SQL 쿼리를 실행하고 결과를 얻을 수 있는 인터페이스 @Configuration public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean ses..
현상 Spring Boot 2.5.* 내장 Tomcat 에서는 URL parameter에 특수문자가 있으면 400 error 발생 조치 원칙상 클라이언트에서 특수문자를 인코딩하여 호출해야하지만, 허용이 필요한 특수문자가 있을 수 있음. Tomcat에 relaxedQueryChars 옵션으로 특수문자 허용 설정 @Component public class TomcatWebServerConfig implements WebServerFactoryCustomizer { @Override public void customize(TomcatServletWebServerFactory factory) { factory.addConnectorCustomizers(connector -> connector.setPropert..
이벤트 발생 시 처리할 동작을 메소드로 정의 @Component public class XX implements ApplicationListener{ public void onApplicationEvent(ContextRefreshedEvent event){ } } ContextRefreshedEvent Published when the ApplicationContext is initialized or refreshed, for example, using the refresh() method on the ConfigurableApplicationContext interface. "Initialized" here means that all beans are loaded, post-processor bean..