이번 포스트에서는 Java에서 JSON을 다루는 방법에 대해 정리해보고자 합니다. 간단하게 유틸화시켜 사용해보니 꽤나 편리합니다. Object to JsonString POJO를 JsonString으로 변환하는 방법입니다. 다양한 방법이 있지만 만약 아래처럼 field명과 jsonProperty가 달라야 한다면 ObjectMapper를 사용하는 것이 편리합니다. 따라서 저는 ObjectMapper를 사용하는 방법을 중심으로 설명하도록 하겠습니다. public class SampleClass{ @JsonProperty("Test Custom Field") private String testCustomField; } import com.fasterxml.jackson.databind.ObjectMapper;..
java,springboot
최근 진행 중인 프로젝트에서 서명, 검증 기능을 개발하는 부분을 담당하고 있습니다. 이번 포스트에서는 제가 어떻게 KMP 알고리즘을 이용하여 50%이상 성능개선을 이룰 수 있었는지 정리해보고자 합니다. 문제 상황기존상황은 아래와 같습니다. 검증하기 위해서는 byte[]로 되어 있는 구조체 전체에서 사내에서 정한 Delimiter(구분자)를 찾아야 했습니다. 여기에서 제가 맞이한 문제는 아래와 같았습니다.구조체의 크기가 매우 크다.(최대 2GB)기존의 Delimiter를 찾는 방식은 O(M*N)의 시간복잡도를 가진다. 기존 탐색알고리즘기존의 Delimiter를 찾는 방식은 아래와 같았습니다.public static Integer getPatternIndex(byte[] parent,..
사내에서 Springboot를 사용하면서 Reactive Redis를 쓰고 있습니다. 이번 포스트에서는 config는 어떻게 설정하는지, 테스트 코드 작성방법, Generic하게 클래스에 맵핑해서 꺼낼 수 있는방법에 대해 정리해보고자 합니다. Dependency springboot 3.2.2, java17을 사용하고 있으며, dependency는 아래와 같습니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive' implementation 'org.springframework.boot:spring-boot-starter-webflux' compileOnly 'org.projectlo..
사내에서 Excel Export/Import 기능을 구현 하던 중, try-with-resources를 남용하다 아래와 같은 에러를 만났다. "Cannot write data, document seems to have been closed already" try-with-resources이 무엇인지, webflux환경에서 reactive하게 개발할 때 주의할 점에 대해 알아보도록 하자. try-with-resources? 1. java7 이전의 try-catch-finally java7 이전에는 Closable인터페이스를 구현하고 있는 자원들은 사용이후에 반드시 close 메소드를 호출 해줘야 했다. 예를 들어 아래와 같은 코드처럼 말이다. //... SXSSFWorkbook workbook = new ..
RTSP로 전송되는 CCTV영상을 브라우저에서 스트리밍하는 과정에 대해 정리하고자 합니다. 요구사항은 간단했습니다. RTSP URI를 이용하여 브라우저에서 스트리밍 하는 것입니다. 단, 이때 스트리밍되는 데이터들은 백엔드를 거쳐서 프론트엔드로 전송되어져야 합니다. 기존방식 - HLS로 스티리밍 애초에 브라우저에서는 RTSP 프로토콜을 지원하지 않기 때문에, RTSP URI를 브라우저에서 직접 사용할 수는 없습니다. 이 방식은 RTSP로 받은 데이터들을 브라우저에서 지원하는 HLS 방식으로 convert(m3u8파일들)해서 해당 파일들을 프론트엔드로 전송해주는 방식이었습니다. 참고로 m3u8파일은 아래와 같은 구조를 가지고 있습니다. // 이 파일이 M3U8플레이 리스트 라는 것을 의미 #EXTM3U //..
성능향상을 위해 도입한 Springboot Webflux, 그리고 R2DBC 였지만 다량의 데이터를 INSERT할 때 성능이 훨씬 떨어지는 부분을 발견했습니다. 이번 포스트에서는 어떤식으로 성능에 대해 고민 하고 개선 할 수 있었는지 정리 해 보고자 합니다. 주니어 개발자로써 항상 부족함을 많이 느끼고 있기에, 추가적인 의견이나 잘못된 점에 대한 지적은 항상 환영입니다. Batch Insert란 ? Batch Insert라는 개념은 어려울 것이 없습니다. 예를 들어, 3건의 INSERT 쿼리를 날린다고 했을 때 아래처럼 3개의 INSERT문을 날리는 것이 아니라, INSERT INTO TestTable(c1, c2) VALUES(v1, v2); INSERT INTO TestTable(c1, c2) VAL..