Backend Development/Spring boot (38) 썸네일형 리스트형 [Spring boot] Exception에 따라 조건부로 Transaction Rollback 하기 아주 흔한 케이스는 아니지만 Rest Api호출 후 Exception으로 에러 코드를 전달할 시에 대부분은 Transaction rollback으로 DB에 저장된 내용은 다시 취소를 한다 그러나 특정 케이스에서는 DB 상태는 Rollback하지 않고 Front 단에는 에러코드를 전달하고 싶을때가 있다. 아래는 보통 사용하는 Transactional 처리이다. @Transactional public void executeService() { RestHistoryVO vo = new RestHistoryVO(); vo.setCalldtlsId(Integer.parseInt(Instant.now() .atZone(ZoneId.of("Asia/Seoul")) .format(DateTimeFormatter.ofP.. [Spring boot] Spring boot test시 Static class mock 만들기 JUnit으로 테스트 작성 시 Static Class를 Mocking해서 테스트를 해야할 경우가 많이 생긴다. sprin-boot-starter-test 패키지에서 기본으로 제공하는 mockito-core패키지에는 static class mocking을 위해 아래 함수를 제공한다. MockedStatic mockSecurityUtils = Mockito.mockStatic(SecurityUtils.class); mockSecurityUtils.when(() -> getPlainCredential(anyString(), any())).thenReturn("1q2w3e4r5t!!"); Mokito.mockStatic 메소드에 Mocking을 할 static class를 지정해 주고 when, thenRetu.. [Spring boot] Spring Boot Test Sql script 활용하기 Backend api 개발 시 Spring boot test로 Unittest를 많이 하게 된다. 그러나 항상 고민하는게 실제 Insert 나 Update로 특정 DB 상태를 바꿀 시 다음 테스트에 영향을 준다는 것이다. 각각의 테스트 메소드가 종료시점에 해당 테스트에서 변경된 내용을 돌려줄 수 있으나 정리 로직을 추가하는것은 테스트 본연의 목표와 다른 부가 작업일 뿐이다. Spring Boot Test 에서는 각 메소드 실행 전후로 외부 sql script를 실행할 수 있게 설정을 가지고 있다. 간단하게 메소드 전에 DB 데이터들을 삽입하고 메소드 실행 후에 DB 데이터 전체를 지우도록 하면 중간에 테스트 도중 들어가거나 변경된 내용들도 손쉽게 리셋하는 효과를 가질수 있다. Unittest 설정 예시 .. [Spring boot] Spring boot test H2 DB 사용하기 보통 Unittest용으로 사용하는 DB는 실제 DB가 아닌 메모리 DB를 사용하는게 좋다. DB 서버의 물리적인 연결 필요없이 소스만 내려받으면 테스팅이 가능해지기 때문이다. H2 DB로 Unittest 환경을 구축하려면 우선 라이브러리 다운로드를 받아야 한다. Pom.xml 파일에 아래와 같이 디펜던시를 추가해 준다. com.h2database h2 compile Unit test를 실행할 active property(yml)에는 다음과 같이 database 설정 정보를 적어준다. spring.datasource.driver-class-name=org.h2.driver spring.datasource.url=jdbc:h2:mem:test;MODE=PostgreSQL;INIT=RUNSCRIPT FROM.. [Spring Boot] swagger ui HTML문서로 출력하기 Back end rest api를 개발하면 api 스펙 문서를 어떻게 만들지 고민하게 된다. 그 대안중 하나로 널리 쓰이고 있는 swagger-ui 를 활용하는 방법이 있을 것이다. swagger 형식에 맞게 doc 를 작성하고 서버를 실행하면 swagger 페이지를 볼 수 있다. 깔끔하게 rest api 스펙을 정리해서 보여주고 직접 api 테스트 및 결과 출력도 볼 수 있다. 그러나 여러 부서와 일을 하게 되면 산출물 공유시 문서가 필요할 경우가 있다. 서버 주소를 알려줄수도 있지만 오프라인으로 api 스펙 문서를 검토해야 할때는 별도의 문서 파일을 원하는 부서가 있을수 있다. swagger 구현을 넘어서 swagger 공식 홈페이지에서는 swagger editor라는 tool을 제공해주고 있다. 온.. [Spring boot] Spring Security login 예제 (filter 없이 수동 Autentication) Spring Security 로 개발을 진행하다 보면 수많은 커스터마이징으로 진행하는 인증 시퀀스가 헷갈리는 경우가 많다. 간단한 설정으로 Spring Security 개념들을 파악해 보고자 한다. 소스 트리는 다음과 같다. 기본이 되는 Security config 모습이다. Username/password 인증 및 필터없이 login api에서 직접 authenticate를 함으로 써 최소한의 설정으로 인증 테스트를 해본다. src/main/java/com/kindlove/security/example/login/config/SecurityConfig.java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter .. [Spring boot] Spring Security saml2.0 예제 분석 (spring-security-saml2-core) 필터 등록 /saml/config/WebSecurityConfig.java:87 @Bean public FilterChainProxy samlFilter() throws Exception { List chains = new ArrayList(); // IDP에 등록한 Recipient URL and Destination URL로 인증 프로세스를 위한 필터 chains.add(new DefaultSecurityFilterChain(new AntPathRequestMatcher("/saml/SSO/**"), samlWebSSOProcessingFilter())); // 등록한 IDP discovery를 위한 url chains.add(new DefaultSecurityFilterChain(new AntPat.. [Spring boot] authenticationEntryPoint /auth 인증을 위한 Entry point는 보통 아래와 같이 security config이 configure 메소드에서 설정을 한다. @Override protected void configure(HttpSecurity http) throws Exception { http .csrf() .disable(); http .httpBasic() .authenticationEntryPoint(samlEntryPoint); .httpBasic() 은 아래와 같이 미리정의된 HttpBasicConfigurer 을 실행해준다. /** * Creates a new instance * @see HttpSecurity#httpBasic() */ public HttpBasicConfigurer() { realmName(DEFAUL.. 이전 1 2 3 4 5 다음