Recording RTSP Stream
·
📘 Backend/기능 개발
📚 Recording RTSP Stream to mp4AI Engine에서 RTSP Stream을 받아서 Export하는 Stream을 받아 그대로 녹화해서 주기적(지정한 시간대)으로 mp4 파일로 저장하는 기능을 개발 할 일이 생겼습니다.Spring의 application.yml 파일에서 녹화 주기 시간을 2개 받아 (ex: 11:00 ~ 12:00 / 13:00 ~ 15:00) 해당 시간에만 녹화를 하도록 구현하였습니다.📚 application.ymlThread Pool은 시간을 체크해 녹화를 할지 말지 결정하는 Thread 1개 + 실제 녹화를 수행하는 Thread를 고려해,최소 3개의 Thread가 필요하므로 넉넉하게 최소 5개로 잡아줍니다.# Thread Pool thread: cor..
Nginx Static Contents Server
·
📘 Backend/기능 개발
📚 Nginx Static Contents Server이번에 구현해본 것은 Spring Rest API로 받는 MultiPart Form Data(이미지, 영상 파일)를 Nginx에 업로드/다운로드 할 수 있게 서버를 구축해 보았습니다.기본적으로 Docker Container를 사용하며, 기존에 다른 용도의 Nginx 컨테이너가 80포트로 떠있으므로, 이 글에서의 Nginx Container의 컨테이너 내부 Nginx 포트는 9001번을 사용합니다.📚 Nginx Container 설정Nginx Container를 9001번 포트로 포워딩 및 실행시켜 주면서 Local의 /data/nginx와 Container의 /data를 볼륨 마운팅 해줍니다.docker run -d --name nginx --re..
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..
Producer-Consumer Pattern with RabbitMQ
·
📘 Backend/Java
📚 Producer Consumer Pattern기존에 RabbitMQ의 Queue에서 대량의 데이터를 받아서 동시성을 처리할 때 사용하던 방법은,ReentrantLock의 tryLock을 이용해 명시적 Lock을 걸고 임계영역을 보호하는 방법을 사용 중 이었습니다.근데 문제는 평소 AI Engine에서 받은 MQTT 데이터의 흐름이 평상시에는 일정한 개수(1초에 200개 정도) 나오다가AI Engine에 특정 조건이 트리거 되어 특정 모드로 바뀔때 수 없이 많은 데이터가 쏟아져 나올 떄가 있으며, 그 메시지들을 그대로 Consume 해버리게 됩니다.Thread들을 충분히 나누었음에도 부하가 심해 Spring Server가 일시적으로 멈춤, 오작동하거나 API 호출이 안 먹는다거나 이슈들이 많았습니다...
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..