Java 6

Optimizing StackTrace with LogstashEncoder: Mastering ShortenedThrowableConverter

LogstashEncoder로 StackTrace 최적화하기: ShortenedThrowableConverter 완전 정복들어가며시스템 운영 로그를 관리하다 보면, 예외 로그의 StackTrace가 너무 길어져서 Logstash의 버퍼 크기를 초과하거나 스토리지 비용이 증가하는 문제를 겪게 됩니다. 특히 Spring Boot 애플리케이션에서 중첩된 예외가 발생할 때, StackTrace가 수십 줄에서 수백 줄까지 길어질 수 있습니다.이번 글에서는 logstash-logback-encoder의 ShortenedThrowableConverter를 활용해 StackTrace를 효과적으로 줄이고 최적화하는 방법을 실제 예제와 함께 알아보겠습니다.문제 상황일반적인 StackTrace의 문제점// 중첩된 예외 발생..

Java 2025.07.29

Util classes와 Helper classes

헬퍼 클래스는 다른 클래스들이 애플리케이션의 핵심 목적이 아닌 반복적인 작업을 수행하는 데 사용하는 메서드를 포함합니다.헬퍼 클래스는 인스턴스화 될 수 있으며, 인스턴스 변수, 인스턴스 메서드 그리고 정적 메서드를 포함할 수 있습니다. 유틸 클래스는 애플리케이션 전체에서 사용할 수 있는 정적 메서드를 제공하는 클래스입니다. 유틸리티 클래스의 정적 메서드는 애플리케이션에서 공통적인 작업을 수행하는 데 사용됩니다. 유틸리티 클래스는 인스턴스화 할 수 없으며, 상태를 갖지 않습니다. 유틸리티 클래스는 final로 선언하고, 모든 메서드는 반드시 정적이어야 합니다. 유틸리티 클래스가 인스턴스화되는 것을 원하지 않기 때문에, private 생성자를 도입합니다. 유틸리티 클래스의 목적은 프로그램 내에서 특정 기능..

Java/기초 2025.05.26

OneToOne 관계에서의 지연 로딩과 N+1 문제 심층 분석

OneToOne 관계에서의 지연 로딩과 N+1 문제 심층 분석샘플 엔티티 관계 Team ▲ ▼ │ │ N │ │ 1 │ │ │ │ Member ◄──── 1:1 ────► Profile샘플 엔티티@Entity class Member( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") val id: Long? = null, val name: String, val email: String, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(n..

Java/JPA 2025.02.21

ExecutorService in Java: Complete Guide with Practical Examples - 1

ExecutorService in Java: Complete Guide with Practical ExamplesJava/Spring으로 여러 API를 비동기로 요청을 처리해야할때 내부적으로 ExecutorService를 사용합니다이번 포스팅에서는 ExecutorService에 대해서 자세히 다뤄보겠습니다 환경java17다루는 내용ExecutorService 개요execute vs submit스레드풀 중단 및 종료작업 종료 대기 및 확인 ExecutorService 개요ExecutorService는 비동기 작업을 실행하고 관리하기 위해 두 가지 메서드를 제공합니다void execute(Runnable r): 작업을 제출하면 작업을 실행하고 종료합니다Future submit(Callable c): 작업을 ..

Java/기초 2024.09.02

Spring Data JPA - join, 페이징 정리

ToMany, ToOne 관계에서 Spring Data JPA로 join시 페이징 처리에 대한 정리입니다.오늘 포스트는 Spring Data JPA에서는 ToOne, ToMany 관계의 join의 페이징 하는 방법이 다룹니다. 두 관계에 처리 방법이 다릅니다. 그리고 최적화 내용까지 다룹니다. 먼저, ToOne의 경우에는 fetchJoin으로 페이징쿼리를 하는게 어렵지 않습니다.join시 row수가 증가하지 않기 때문입니다.ToMany, OneToMany의 경우에는 (ManyToMany는 사용하지 않습니다.) 페이징 처리가 쉽지않습니다. ToOne 관계는 fetchjoin으로 조회합니다.ToMany 관계는 지연로딩으로 조회합니다. 지연로딩 최적화를 위해 hibernate.default_batch_size..

Java/JPA 2024.08.21