본문 바로가기

Java & Kotlin/Spring24

Spring Security 인증 기본 구조 Spring Security의 인증에 사용되는 기본 구조와 component에 대해서 알아보도록 하자. (Spring Security는 인증 및 보안과 관련하여 관련하여 많은 기능들을 담고 있으나 여기서는 인증 관련하여 기본 구조만 알아보도록 하겠다) AuthenticationFilter 인증(authentication) 요청을 Spring Security에서 처리할 수 있도록 Authentication 객체로 변환시킨 뒤 이를 AuthenticationManager로 처리를 위임한다. AuthenticationManager에서 처리 후 Filter에서 성공/실패에 대한 응답을 핸들링을 한다. AuthenticationManager (implementation: ProviderManager) Authen.. 2021. 7. 18.
Spring Kafka 간단하게 맛보기 SpringBoot application에서 간단하게 Kafka Topic을 consume하고 message를 produce하는 방법에 대해 알아보자. 해당 코드는 여기 에서 확인 가능하다. Kafka Topic 생성 간단하게 테스트하고 시각적으로 쉽게 확인할 수 있는 환경을 위해 GUI를 사용한다. Client로 Conduktor를 사용한다. my_topic 으로 Topic을 생성한다. my_topic Topic은 방금 생성되었기 때문에 아직 Consumer가 붙어있지 않다. 이제 Spring Kafka를 통해서 Kafka Topic을 consume하고 message를 produce하는 법에 대해 알아보자. Spring Kafka를 사용하여 Consumer 설정 SpringBoot application.. 2021. 7. 11.
Spring JPA Querydsl 세팅 (with Kotlin) Spring Data JPA를 사용한 Spring Boot 프로젝트 기반으로 코드를 작성할 때 Command 작업은 큰 문제는 없지만 집계와 같은 Query 성 작업은 JPA 로는 어느정도 한계가 있다. JPQL을 사용할 순 있겠지만 String base로 코드가 작성되기 때문에 작업을 하면서 실수가 날 여지가 있고 직접 실행하지 않는 이상 이 실수를 알기 힘든 경우가 있다. Querydsl 를 사용하면 이러한 JPQL의 단점을 보완할 수 있다. Querydsl 에서 생성해준 컴파일 된 코드 기반으로 쿼리를 작성하기 때문에 일단 쿼리 작성 자체가 매우 쉬워지고 컴파일 시점에서 오류 또한 찾을 수 있다. 이번 포스팅은 Kotlin 기반의 Spring Boot 프로젝트에 JPA 기반 Querydsl 을 세팅.. 2021. 6. 7.
Rest Assured 테스트 시 redirect 막기 Rest Assured 를 사용하여 서버에 요청을 보낼 때 Spring Web application 에서 Found 와 같은 Redirect 응답을 하면 Controller 리턴하는 Redirect 응답이 오는 것이 아니라, Redirect 처리가 되어 Location header의 URL로 요청을 보낸 응답이 와서 assertion이 실패되는 케이스가 있었다. 에를 들어 Controller 에서 아래와 같이 Redirect 에 대한 ResponseEntity 를 응답할 때 Rest Assured 에서는 https://devs0n.tistory.com/ 에 대한 응답을 받는 것이다. ResponseEntity .status(HttpStatus.FOUND) .location(URI.create("https.. 2021. 6. 3.
Github Actions로 PR 시 테스트를 돌려보자 PR을 올릴 때 Github Actions로 테스트를 돌려서 해당 PR에 대해 깨지는 테스트가 없는지 확인하는 세팅을 해보자. 코드는 여기에 예제 PR은 여기에서 확인할 수 있다. Github Actions에 Gradle Test 추가 .github/workflows/{파일명}.yml 으로 Github Actions 파일을 추가한다. name: PR Test on: pull_request: branches: [ master ] # master branch에 PR을 보낼 때 실행 jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v1 with: ja.. 2021. 4. 21.
MySQL Docker container를 이용한 통합 테스트 시 한글 깨짐 이슈 Spring Application 통합 테스트 시 H2 같은 in-memory DB를 사용할 수 있지만 최대한 운영 환경과 유사한 상황에서 테스트하고자 한다면 Testcontainers를 통해 테스트 용 DB container를 띄우는 방식도 고려할 수 있을 것이다. 이번 포스팅은 MySQL Docker container를 사용하여 통합 테스트 시 인코딩 관련 이슈와 이를 해결하기 위해 인코딩 설정하는 방법에 대해 알아보겠다. 관련 코드는 여기에서 확인 가능하다. 인코딩 관련 이슈를 테스트를 재현하기 위해 MySQL, JPA dependency를 추가하고 SpringBoot Application을 생성한 뒤 Testcontainers JDBC MySQL depdencey를 추가한다. 그리고 다음과 같이 .. 2021. 4. 7.