[Java] 특정 ID를 가진 노드의 하위 계층(Leaf)을 찾는 방법
·
개발 (Development)/Java
이 글은 트리 구조 데이터를 다루는 과정에서 특정 ID를 가진 노드를 찾고, 그 노드의 하위 계층 중 leaf 노드를 효율적으로 수집하는 방법에 대해 정리한 내용입니다. 실제 개발 과정에서 이러한 구조를 처리해야 할 필요가 생겼고, 해당 문제를 해결하기 위해 질의 및 코드 실험을 진행한 뒤 그 결과를 정리한 것입니다. 본 글에서는 가능한 한 일반화된 형태의 코드와 함께 그 과정을 설명드리고자 합니다.문제 정의본 글에서 다루는 트리 구조는 다음과 같은 특징을 가지고 있다고 가정합니다.루트 노드가 여러 개 존재할 수 있다: List roots각 노드는 자식 노드를 나타내는 배열을 가진다: Node[] children각 노드는 고유 ID를 가진다: String id해결해야 하는 핵심 문제는 다음과 같다.전체 ..
[Java] Object를 특정 클래스 타입으로 변환
·
개발 (Development)/Java
이 글은 Java 개발 과정에서 Object 타입 데이터를 특정 클래스(Node 클래스)로 변환하는 과정을 순서대로 정리한 내용입니다. Object가 실제 객체, Map, JSON 문자열 등 다양한 형태일 수 있기 때문에 각 경우를 안전하게 처리하는 방법을 기술 중심으로 설명합니다.핵심 요약Object를 특정 클래스 타입으로 변환하는 방법은 다음 세 가지 흐름으로 나눌 수 있습니다.실제 객체라면 단순 캐스팅Map 구조라면 수동 매핑 또는 Jackson convertValueJSON 문자열이라면 ObjectMapper readValue문제 정의Java 코드에서 Object 타입으로 전달된 데이터를 Node 객체로 변환해야 하는 상황이었습니다. 전달된 Object는 다음 세 가지 형태 중 하나일 수 있다는 ..
[Java] 객체 리스트를 특정 속성으로 정렬하는 방법
·
개발 (Development)/Java
ArrayList에 저장된 사용자 정의 객체를 특정 속성 값으로 정렬해야 하는 상황은 개발에서 매우 자주 발생합니다. 예를 들어 Product라는 클래스가 있고, 그 안에 price라는 속성이 있다고 가정해 보겠습니다. 이번 글에서는 price뿐만 아니라 다양한 클래스 속성을 기준으로 오름차순과 내림차순 정렬을 수행하는 방법을 단계별로 설명합니다.1. 문제 정의다음과 같이 ArrayList에 상품 목록이 저장되어 있다고 합시다.이 리스트를 가격(price) 기준으로 정렬하는 것이 목표입니다.class Product { private double price; private String name; public Product(double price, String name) { th..
[Java/Spring Boot] "No thread-bound request found" 에러 원인과 해결법
·
개발 (Development)/Java
이 에러는 현재 실행 중인 스레드에 웹 요청(HttpServletRequest) 정보가 바인딩되어 있지 않다는 의미입니다. 주로 비동기 작업(@Async)이나 백그라운드 스레드에서 Spring MVC의 요청 컨텍스트에 접근하려 할 때 발생합니다.🔍 에러 원인과 시스템에 미치는 영향이 에러는 스레드의 경계를 넘나드는 요청 정보 접근 때문에 발생합니다. Spring MVC는 웹 요청을 처리하는 스레드에 HttpServletRequest와 같은 데이터를 연결합니다. 하지만 @Async나 new Thread()로 새로운 스레드를 생성하면, 이 스레드는 기존의 요청 정보를 공유하지 않습니다. 따라서 새로운 스레드에서 RequestContextHolder를 사용해 요청 정보에 접근하려 할 때 에러가 발생합니다.이..
[PostgreSQL/Java] shared memory 에러 해결: Java + MyBatis 대용량 쿼리 처리
·
개발 (Development)/PostgreSQL
최근 프로젝트에서 PostgreSQL 기반의 대용량 데이터를 한 번에 집계하려다가 shared memory segment 에러를 자주 겪었습니다. 처음 한 달 정도는 잘 동작했지만, 기간을 늘려 6개월·1년 단위로 조회하는 순간 DB 메모리 관련 에러가 발생했습니다. 운영 환경에서 서버 파라미터를 크게 건드리기도 부담스러워서, 결국 쿼리를 기간 단위로 쪼개어 조회하고 자바에서 합산하는 방식으로 우회했습니다.아래는 제가 직접 적용했던 과정과 방법들입니다.1. 문제 원인장기간 데이터를 한 번에 조회 → 정렬/집계 단계에서 메모리 과부하PostgreSQL은 공유 메모리 한도를 넘으면 바로 오류 발생DB 설정(work_mem, shared_buffers)을 조정하면 해결 가능하긴 하지만, 운영 중인 환경에서는 ..