전체 글
-
ClickHouse[2] 내부 동작 정리기타 2026. 3. 7. 18:01
간단한 내용 정리 (데이터 파트, 데이터 병합)OLAP 제품 중 우리는 클릭하우스를 선택했다. 클릭 하우스를 선택 한 이유는 애플리케이션 비즈니스 로직으론 사용 한 적은 없지만. 회사 내에서 다른 분석 자료를 만드는데 이미 사용중인 제품이였기에,이미 사용중인 제품을 선택했다. 처음 사용하는 OLAP 제품이라 배움이 필요했다.공식 문서 참고 및 GPT를 통해 간단한 아키텍처를 배울 수 있었다. 간단하게 내용을 정리하자면 클릭 하우스는 1개의 Row를 열기반으로 Split을 하여 열기반으로 데이터를 정렬한다.정렬된 열 목록과, Row에 대한 메타데이터가 데이터 파트라는 하나의 디렉토리 개념에 저장된다. 데이터 조회 시 여러 데이터파트에서 필요한 데이터를 필터링하여 찾아서 마지막엔 Row로 만들어서 나..
-
클릭하우스 도입기 및 개념 정리기타 2026. 3. 7. 09:33
클릭하우스 도입하며.. 아파트너에서 입출차 시스템을 운영하면서대용량 데이터 조회 성능 문제를 해결하기 위해OLAP 데이터베이스인 ClickHouse를 도입하게 되었다. 현재 입출차 테이블에는 약 1억 건 이상의 데이터가 존재한다.특정 기능에서는 단지의 3개월치 입출차 데이터를 조회해야 하기 때문에수천만 건 이상의 데이터를 대상으로 조회가 발생한다. 입출차 기능 중 특정 기능에서 단지의 3개월치 입출차 목록을 모두 조회 해 정산 하는 기능이 있다.현재 테이블에는 1억 이상의 데이터가 존재하며 Mysql 테이블에만 의존하여 목록을 내려주고 있다.Mysql을 이용해서 데이터를 조회하다보니 많은 문제가 발생했다. Mysql 문제점- Row 기반 저장 구조 - 대량 데이터 조회 시 많은 Row를 스캔해야 ..
-
현업 개발자가 직접 만든 JSON → Java Class 자동 변환기 (JSON2Class.com)기타 2025. 11. 11. 13:25
🧑💻 내가 직접 만든 개발자 도구, JSON2Class.com 개발을 하다 보면 API 응답(JSON)을 처리하기 위해 DTO나 VO, 응답 객체 클래스를 일일이 만드는 일이 꽤 자주 있습니다. 간단한 JSON이라면 괜찮지만, 중첩 객체가 많고 배열 구조까지 섞여 있으면, 클래스 설계만 해도 생각보다 많은 시간이 들죠. 이런 반복 작업을 줄이고 실제 비즈니스 로직에 더 집중하고 싶어서, 현업에서 사용하는 기준으로 직접 만든 도구가 바로 JSON2Class.com 입니다. 🚀 왜 JSON2Class.com을 만들었을까? Spring Boot, JPA, REST API 기반 프로젝트를 진행하면서, 아래와 같은 JSON을 마주칠 때마다 같은 생각이 들..
-
MultipartFile 외부 서버 전송 시 파일 인식 오류 (filename 누락 문제)자바/Spring 2025. 7. 28. 21:18
Spring boot를 이용하여 서버를 구축할 때 가끔 파일을 전송하거나, 파일을 수신해야 되는 경우가 있다.클라이언트로 부터 파일을 받아 외부 서버에 전송해야 하는 경우가 위의 사례중 하나이다. 오늘은 MultipartFile을 수신 또는 외부에 발신하는 방법을 간단하게 정리할려고 한다.우선 파일을 수신 받는 방법은 RequestPart 또는 ModelAtribute 어노테이션을 사용하면 된다.@RestControllerpublic TestController { @PostMapping("/test") public ResponseEntity upload(@RequestPart file){ //TODO }}대부분 사람들은 (본인 포함) 어떻게 파싱하는지 모르는 상태로 위와 같이..
-
[Spring Jpa] OSIV 로 인한 발생한 디비 분리 실패자바/Spring 2025. 7. 12. 09:42
Open Session In View (OSIV)는 Spring Framework에서 JPA/Hibernate의 EntityManager(또는 Hibernate의 Session)의 생명주기를 웹 요청의 전체 기간 동안 유지하도록 하는 디자인 패턴입니다해당 설정을 활성화 했을 경우 발생할 수 있는 사이드 이펙트가 있기 때문에 프로젝트를 진행하면 보통 해당 속성의 활성화 여부를 false로 설정합니다.회사 업무를 진행하면서 해당 속성을 비활성화 하지 않고 업무를 진행한 경험이 있습니다.이 때 생긴 문제를 공유하기 위해 글을 작성합니다.OSIV를 활성화 하게 되면 웹 요청이 들어 왔을 경우 Entitymanager가 세션을 요청이 끝날 때 까지 유지하게 됩니다.이 때 MysqlDialect을 통해 최초 트랜잭..
-
Jackson ParameterNamesModule: 생성자 기반 역직렬화 깨짐 방지 및 원리자바/Spring 2025. 7. 9. 22:42
Jackson 생성자 기반 역직렬화 문제Spring Boot로 REST API를 개발할 때 DTO를 @RequestBody로 받으면 내부적으로 Jackson이 JSON → Java 객체로 역직렬화를 수행합니다.DTO를 불변 객체(immutable) 로 설계하기 위해 생성자 기반 역직렬화를 사용하는 경우가 많은데,Java는 기본적으로 컴파일 시 메서드 파라미터 이름을 arg0, arg1 로 치환하기 때문에 Jackson이 JSON Key와 생성자 파라미터를 자동으로 매핑할 수 없습니다.이로 인해:Cannot construct instance of ... no String-argument constructor/factory methodMissing required creator property ...등의 에..
-
지연로딩 으로 인한 null값 조회 [Jpa Proxy객체 조회 이슈]자바 2024. 12. 3. 19:32
Jpa를 이용해서 엔티티간의 연관관계를 설정할 경우 '지연로딩' 을 조심해야 한다. 연관관계가 모두 지연로딩일 때 멤버 존재 유무를 조회하기 위해 특정 멤버를 조회했을 경우,그 멤버에 해당하는 연관관계 데이터들은 모두 하이버 네이트 프록시 객체로 생성된다. 이후 프록시 객체를 직접 조회할 경우, 프록시 객체를 반환하기 때문에 안에 있는 데이터는 모두 null값이 조회가 된다.. 오늘 포인트 기능을 구현하는데 해당 이슈가 발생했다. 동료분이 특정 포인트에 대한 포인트 원장을 조회하는 과정에서 포인트 객체가 프록시 객체로 생성되었다. 객체가 생성된 이후 실제로 포인트를 사용하기 위해 조회를 진행했지만 계속 Null값은 가진 프록시 객체만 생성되고 있었다. 해당 이슈로 인해 정상적으로 비즈니스 로직은 실행이..
-
[자바] 함수형 인터페이스와 AOP..?자바 2024. 11. 9. 18:00
코드리뷰는 함수형 인터페이스에 대한 의문점이 생겼다.바로 AOP와 함수형 인터페이스의 영향도였다. 특정 메소드에서 함수형 인터페이스를 파라미터로 받게 된다면 구현체는 외부에서 만들어져서 들어오지만 실제 실행 구간은파라미터로 받은 해당 메소드에서 실행하게 된다. 이렇게 된다면 특이점이 생기게 된다. 인터페이스로 구현된 작업이 '디비에 쓰기 작업을 진행하는 행위'이고 메소드는 읽기 작업을 진행하는 ReadOnly트랜잭션이적용된 메소드라고 생각한다면 해당 작업은 실패하게 된다.이유는 간단하다. 실제 쓰기작업의 함수형 인터페이스의 호출되는 부분은 읽기 전용 트랜잭션이 적용된 메소드에서 호출되고 있다. 이렇게 된다면 상위에서 호출하게된 메소드에는 트랜잭션의 속성이 ReadOnly이기 때문에 정상적으로 Wr..