RTSP로 전송되는 CCTV영상을 브라우저에서 스트리밍하는 과정에 대해 정리하고자 합니다. 요구사항은 간단했습니다. RTSP URI를 이용하여 브라우저에서 스트리밍 하는 것입니다. 단, 이때 스트리밍되는 데이터들은 백엔드를 거쳐서 프론트엔드로 전송되어져야 합니다. 기존방식 - HLS로 스티리밍 애초에 브라우저에서는 RTSP 프로토콜을 지원하지 않기 때문에, RTSP URI를 브라우저에서 직접 사용할 수는 없습니다. 이 방식은 RTSP로 받은 데이터들을 브라우저에서 지원하는 HLS 방식으로 convert(m3u8파일들)해서 해당 파일들을 프론트엔드로 전송해주는 방식이었습니다. 참고로 m3u8파일은 아래와 같은 구조를 가지고 있습니다. // 이 파일이 M3U8플레이 리스트 라는 것을 의미 #EXTM3U //..
java,springboot
새로운 스프링 프로젝트를 생성했는데, 다음과 같은 에러가 발생하였다. 원인과 해결 방법은 간단하다. [원인] 1. 자바 경로 설정 오류 2. 자바 버전 맞지 않음 [해결 방법] 나의 경우 vscode를 사용하고 있었기에, settings.json("command + ," 눌러 설정에서 settings.json)에 들어가서 경로를 확인했다. 아래처럼 정상적으로 설정되어져 있었다. "spring-boot.ls.java.home": "/opt/homebrew/Cellar/openjdk@17/17.0.6/libexec/openjdk.jdk/Contents/Home", build.gradle에서 자바 버전을 확인했다. 아니 왜 버전 20으로 되어져 있지? plugins { id 'java' id 'org.sp..
문제 상황 대량의 데이터를 insert 하는 로직이 있었는데, 계속 데이터 일부분이 누락되는 현상이 발생 하였다. 총 400row가 insert 되어야 하는데, 380개 정도만 insert 되는 식이었다. 내가 insert하는 방식은 아래와 같았다. public Flux setDatas(List dataList){ repository.saveAll(dataList); } repository는 아래처럼 R2DBC Repository를 상속받아 사용하였다. public interface TestRepository extends R2dbcRepository 해결 방법 기존의 Iterable을 바로 인자로 넘기는 방법에서, 아래처럼 Flux형태로 바꾸어 saveAll 하는 방식으로 바꾸니 정상적으로 작동함을 볼..
문제 상황 아래 2개의 서버가 있다. A server : 다량의 데이터를 Body에 심어 B 서버로 요청을 보낸다. B server: A 서버가 보낸 요청을 받아 처리 한다. 난 B server의 입장이었고, 아래와 같은 에러 메시지를 받게 되었다. org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 참고로, 상단의 메시지는 Webflux 기본으로 설정된 코덱의 메모리 사이즈 256KB를 초과했다는 내용이다. 해결 방법 구글링을 해보면 대부분의 사이트들에서 아래 코드처럼 WebClient 빌드 시 maxInMemorySize를 늘려 주라고 한다. @Bean @Loa..
mapstruct는 객체간 매핑한 코드를 생성 해주는 library 이다. 이번 포스팅에서는 mapstruct를 사용하는 이유와 그 사용법에 대해 자세히 알아보도록 하겠다. mapstruct 공식 홈페이지 : https://mapstruct.org/ MapStruct – Java bean mappings, the easy way! Java bean mappings, the easy way! Get started Download mapstruct.org mapstruct를 사용해야 하냐, 하지 말아야 하냐에 대해 의견은 꽤나 분분한 것 같다. mapstruct 대신 stream과 정적팩토리 메소드를 이용한 방식을 추구하시는 분도 계셨고(참고 블로그), modelmapper를 선택 한 분들도 있었다. 결론적..
DB에서 가져온 값을 읽으려고 하는데, 아래와 같은 에러메시지가 발생했다. Error:IllegalStateException: Required property b not found for class 처음에는 내가 만든 DTO에 실수로 b라는 property를 잘못 지정했나 하고 찾아 봤으나, 아무 문제도 없었고 @SuperBuilder가 문제였다. 상속 관계도 없는 DTO 클래스에 @SuperBuilder 어노테이션을 붙여서 생기는 문제였고, @Builder 어노테이션으로 바꿔주니 정상적으로 작동하는 것을 볼 수 있었다.