[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)을 조정하면 해결 가능하긴 하지만, 운영 중인 환경에서는 ..
[Docker/Java] Java 기반 Docker 이미지에서 SQLite 관련 취약점 제거 방법 (CVE-2025-6965)
·
개발 (Development)/Docker
문제 상황adoptopenjdk/openjdk11:jre 이미지를 기반으로 자바 애플리케이션 Docker 이미지를 빌드하던 중, 보안 스캐너에서 CRITICAL 등급의 SQLite 관련 취약점(CVE)이 지속적으로 발견되었습니다.보안 점검 도구(Trivy 등)로 스캔한 결과, libsqlite3-0 라이브러리에서 발생하는 취약점이 주기적으로 보고되었고, 빌드 파이프라인이 이를 이유로 차단되는 상황이었습니다.원인 분석adoptopenjdk/openjdk11:jre는 Debian/Ubuntu 계열 기반으로 제작되어 있으며, 기본적으로 sqlite3와 libsqlite3-0 패키지를 포함하고 있습니다.문제는 다음과 같습니다.해당 이미지는 최신 보안 패치 적용 주기가 느립니다.저희 애플리케이션에서는 SQLite..
[Java] Interface란? 클래스와 다른 점은?
·
개발 (Development)/Java
Java를 공부하다 보면 interface라는 개념이 등장합니다. 처음에는 추상 클래스와 비슷하게 느껴질 수 있지만, 인터페이스는 Java에서 매우 중요한 설계 도구입니다. 이번 글에서는 interface의 정의부터 사용 예시, 특징까지 정리해 보겠습니다.1. 인터페이스란 무엇인가요?Java에서 interface는 클래스가 구현해야 할 메서드의 목록을 명세한 일종의 규격서입니다. 실제 동작(구현)은 포함하지 않고, 메서드 이름과 매개변수 등 구조만 정의합니다. 클래스가 이 인터페이스를 implements로 구현하면, 반드시 해당 메서드들을 정의해야 합니다.public interface Animal { void sound();}Animal 인터페이스를 구현하는 클래스는 sound() 메서드를 반드시 ..