전체 글 (39) 썸네일형 리스트형 Kotlin + SpringBoot Kotest, Mockk, FixtureMonkey 적용기 이직 후 바쁘다는 핑계로 블로그를 아예 건들지도 않았다..다시 열심히 써야지..ㅠㅠ서론현재 우리 백엔드팀은 회사에서 사용중인 개발 환경을레거시 프로젝트에서 (Java + SpringBoot + MS-SQL)신규 프로젝트로 (Kotlin + SpringBoot + Aurora) 전환중에 있다오늘은 테이블 설계를 비롯해 데이터 마이그레이션, 새로운 API 명세를 진행하는 과정에서 도입하기로 결정된Kotest와 FixtureMonkey에 대해서 소개를 해보고자 한다.해당 글에서는 재직중인 회사에서 적용하고있는 테스트 라이브러리에 대한 도입 사유,도입을 하는 과정에서 발생한 문제들에 대해 기록을 목적으로 작성하기 때문에좀 더 상세한 정보나 장단점들은 레퍼런스로 대체하도록 하겠다.해당 내용에 대해 지식이 부족하기.. Spring Security Jwt Filter 테스트 우선 테스트를 위해 인증이 필요한 URL과 인증이 필요없는 테스트용 URL을 만들었다.@RestController@RequiredArgsConstructor@Slf4jpublic class AuthenticationTestController { @GetMapping("/api/v1/auth/use/test") public String useAuthentication() { return "success"; } @GetMapping("/api/v1/auth/not-use/test") public String notUseAuthentication() { return "success"; }} 이후 인증 없이 통과시키는 Test Url을 Security C.. Spring boot 3.2에서 Aws Sqs Temporary Queue를 이용한 요청 응답 구현하기 서론 정말 오랜만에 글을 쓴다 ! 최근 헥사고날 아키텍쳐에대한 관심이 높아져 그간 진행해오던 사이드 프로젝트를 헥사고날 아키텍쳐로 변경해보며 공부를 하고 있다. 프로젝트는 도메인별로 분리하여 최종적으로는 MSA 형태처럼 구현해보는것이 목표이다. 그러기 위해서는 각 도메인간 의존성이 존재하지 않아야 하기 때문에 각 도메인간 통신을 Spring에서 제공하는 EventPublisher를 통해 진행을 하였다. 그러던 중 회원과 인증에 대한 도메인을 분리하여 회원가입 및 로그인 기능을 구현하고 있었는데, 인증 서버로 들어온 요청에 대해 토큰을 반환하는 API 작업 중, 회원 서버를 거쳐야하는 동기 로직이 필요했다. 일반적인 http 요청 응답 형식으로도 진행을 할 수 있었지만 Aws의 Sqs의 기능 중 Tempo.. WebClient를 활용한 병렬 API 호출 및 예외 처리 서론 과제 테스트를 하며 외부 서버와의 통신으로 데이터를 받아와야했는데, 호출 시간을 단축 시켜야하는 요구사항이 있었다. 데이터를 분할하여 여러 요청들을 다른 서버로 요청하여 데이터를 받아오는 로직이였고, 실패 응답시 재호출에는 약 10초간 지연시간이 있었기 때문에 재호출 로직을 고려하여 병렬로 호출을 해야겠다고 생각을 하여 WebClient를 이용한 병렬 API 통신을 진행하였다. 본론 데이터를 분할하여 서버로 병렬 요청을 하는 로직이였기 때문에 로직은 다음과 같았다. 1. entity에 서버로 요청할 횟수만큼 requestCount를 설정하고 저장한다. 2. 반복문을 통해 데이터를 분할하여 RequestDto를 생성한다. 3. 생성한 RequestDto로 WebClient를 생성하여 Mono 객체를 .. Spring Boot @Async 비동기 로직 테스트 - 테스트 격리 서론 과제 요구사항을 구현하며, 비동기로 로직을 처리해야하는 작업이 필요했다. 해당 로직을 검증하기위해 테스트 코드를 작성하며 다양한 시행착오가 있었는데, 이를 글로 정리해보고자 한다. 본론 요구사항은 특정 API로부터 데이터를 가져와 필요한 데이터를 DB에 저장하는 로직이였는데, 특정 API로부터 응답 시간이 오래 걸리기 때문에 그동안 Connection을 유지하는건 리소스 낭비라고 생각하여 비동기로 구현을 해야겠다고 생각을 했다. @Async를 이용하여 비동기로 구현을 했고, 이제 테스트 코드를 통해 검증을 해야했는데 예상치 못한 문제가 발생했다. 기존에는 ServiceTest라는 최상위 클래스에서 @Transactional을 선언하여 테스트 데이터가 테스트 이후 Rollback되었는데, @Async.. Swagger 3 (springdoc-openapi-ui) 에서 @AuthenticationPrincipal 파라미터 무시 전역 설정 서론 현재 진행 중인 프로젝트의 공식 문서를 Swagger로 정하고 작업을 진행하고 있는데, 앱 개발자와 협업을 하며 Swagger 확인 도중 @AuthenticationPrincipal를 이용하여 회원을 파라미터로 받는 엔드포인트에 다음과 같이 지속적으로 빈 괄호를 넘겨줘야 정상 작동하는 상황이 발생하였다. 본론 위 내용을 해결하기 위해 @AuthenticationPrincipal이 들어가는 EndPoint에 @Parameter(hidden = true)를 설정을 하여 문제는 해결이 되었으나 저 메서드가 들어가는 모든 엔드포인트에 설정하기는 작업이 번거로워 전역적인 설정이 없는지 찾아보았다. 전역적인 설정을 위해 검색을 해보니 springfox-swagger-ui , springfox-swagger2 .. Spring WebClient를 이용한 Open API 통신 서론 회사 프로젝트의 상담 신청 Time Table에 대한 API를 구현해야했다. 요구사항은 다음과 같았다. 캘린더를 통해 해당 날짜에 맞는 타임 테이블을 노출 시켜준다. 기획서 요구사항 연도와 월을 설정하여 조회시 상담 가능한 날짜를 노출시켜준다. 날짜를 클릭하면 상담 가능한 시간대를 노출시켜준다. 작업하며 정의된 추가 고려사항 (개인 테스트 케이스) 휴일과 점심시간(수요일 2시간)을 제외하고 타임 테이블을 노출 시켜준다. 상담원이 1명이므로, 이미 상담이 신청되어있는경우 해당 시간대는 노출시키지 않는다. 해당 날짜에 상담 가능한 시간이 없는경우 해당 날짜를 노출시키지 않는다. 조회하는 달을 조회 할 경우, 조회하는 일자 기준 이전 날짜를 노출시키지 않는다. 조회시간 기준이 영업시간인 경우, 조회시간 .. Spring Boot에서 Batch, Scheduler 사용기 서론 그동안 글을 많이 못썼다.. 회사에서는 쿼리 튜닝하느라 바빴고.. 사이드 프로젝트는 애들이 각자 바빠서 작업을 못했기 때문.. 그러다 회사에서 상담신청 개선 작업을 진행하게 되면서 사용자 로그 및 1:1문의와 관련하여 개인정보 처리방침에 의거 사용자의 민감 정보에 대한 처리가 필요하다고 생각하여 작업을 진행하였다. 본론 기능 요구사항을 정리 하였을때, 내용은 크게 어렵지 않았다. 회사의 개인정보 처리방침에 따라 사용자 로그는 최대 3개월동안 저장 가능하였고, 1:1문의에서 사용되는 개인정보 (이메일, 휴대폰 번호)는 6개월동안 저장이 가능하였다. 위의 요구사항을 토대로 매일 새벽의 특정 시간에, 로그 테이블과 1:1 문의 테이블에서 데이터의 생성 시각을 확인하여 특정 일자가 지난 데이터들을 삭제시켜.. 이전 1 2 3 4 5 다음