Open API 3.0 Swagger + Export Rest API Docs
·
📘 Backend/Spring
📚 Swagger API 적용사내에서 대부분 시스템쪽 개발을 맡다가 이번 프로젝트에서 맡은 서버들 중에 API쪽 서버가 있어 기억 속에서 잊혀져 가던 Swagger를 다시 복습할 겸 정리글을 작성합니다.Spring Doc 공식 페이지Spring을 사용한다면 아래 2개의 라이브러리를 사용할 수 있습니다.Spring FoxSpring DocSpring Fox의 경우 마지막 업데이트일인 2020년 이후 업데이트가 없으므로, Spring Doc을 이용하겠습니다.Spring Doc은 WebFlux를 통한 비동기 방식의 개발도 지원합니다.application.yml 설정해서 Path 설정을 안한다면 기본 Path는 {Server I{}:{Port}/swagger-ui/index.html입니다.저는 그냥 포트뒤에 ..
HikariCP - Thread Starvation & Clock Leap Detection
·
📘 Backend/Spring
📚 HikariCP - Thread Starvation & Clock LeapSpring Boot 서버에서 가끔 보이던 특정 문구가 있었는데, 일이 바빠서 무시하다가 이번에 여유가 좀 생겨서 알아보았습니다.이 경고 문구는 스레드가 기아상태가 되거나 시스템 시간이 실제 시간과 비동기화 되는 현상인 Clock Leap가 일어났을떄 발생합니다.어쩌다 1번씩 가끔 뜨고 가끔 API 호출도 안되는 현상이 있어 바로 알아보았습니다.master - Thread starvation or clock leap detected (housekeeper delta=20m34s90ms530µs700ns).정확한 원인은 아직도 잘 모르지만 검색 결과 유추할 수 있는 원인은 아래와 같습니다.House Keeping Thread 중..
Spring AOP - API Verification 공통화, 로깅
·
📘 Backend/Spring
📚 Spring AOP - API Verification 공통화이번에 코드 리팩터링 도중 이전에 구현 해두었던 API Filter에서 JWT만 검증하고, 나머지 Request를 요청하는 유저의 권한 등등을 컨트롤러 마다 검증 private method를 쓰거나, 공통 클래스에 넣어서 썼었습니다.Rest Controller 마다 다양한 검증 로직이 존재 하는 상태이고, 그 중 공통화를 할 수 있는 로직들만 묶고 싶어서 알아보다가 기존에 개념만 알고 있던 AOP를 한번 써보자 해서 구현 해보았습니다.검증 로직을 공통화 하기위해 Aspect 기능을 사용하여 검증할 값들을 Security Filter에서 Header로 넣고 API 호출 전, Aspect 클래스에서 검증하는 방향으로 잡았습니다.기본 흐름은 AP..
DataBufferLimitException - Webflux 버퍼 크기 제한 초과
·
📘 Backend/Spring
DataBufferLimitException - Webflux 버퍼 크기 제한 초과WebClient로 Data를 받는 작업 중, WebClient에서 허용하는 Buffer를 초과한 데이터가 들어왔을떄 발생한 에러 해결 기록입니다.아래 API 요청 코드에서 return되는 데이터 중 1개 필드의 값이 Encoding된 Streaming Frame 데이터를 받도록 되어 있었습니다.public Mono getRtspStreamFrame(final String uri) { return webClient.get().uri(uri).retrieve().bodyToMono(String.class); }서버를 실행 시킨 후, 해당 API 요청을 해보니 아래와 같은 에러가 발생했습니다.DataBufferLim..
비밀번호 찾기 & 재설정 구현(Google SMTP & Redis)
·
📘 Backend/Spring
비밀번호 찾기 & 재설정 기능 구현(Google SMTP)사내 비밀번호 찾기/초기화 기능을 위해 Email 인증을 자체 SMTP 서버를 만들어서 하려다가, 귀찮아서 Google SMTP를 이용하기로 했습니다.우선 Google 계정 설정에 들어가서 아래 2개의 작업을 해줍니다.Multi Factor Authentication(2FA) 활성화App Password 생성그리고 Gmail 탭으로 들어가 Mail 설정의 Forwarding and POP/IMAP 탭에 들어가서 아래와 같이 설정합니다.Spring Boot Server 설정build.gradle 파일에 Mail 추가implementation 'org.springframework.boot:spring-boot-starter-mail'applicatio..