Spring에서 이벤트 기반 비동기 처리 구현하기
·
DEV/Java & Spring
Spring은 애플리케이션의 느슨한 결합을 지원하기 위해 이벤트 기반 비동기 처리 방식을 제공한다. 이 방식은 특정 이벤트가 발생했을 때, 이를 처리하는 로직을 분리하여 모듈 간의 의존성을 줄이고 유지보수성을 높이는 데 유용하다. 특히, 비동기로 처리하면 애플리케이션의 응답 속도를 개선하고 확장성을 높일 수 있다. 여기서는 ApplicationEventPublisher와 @Async를 활용한 이벤트 처리 구현 방법을 자세히 다룬다. 더불어, 이 방식을 활용한 사례와 주의점도 함께 살펴본다.이벤트 기반 비동기 처리의 구조Spring에서 이벤트 기반 비동기 처리는 다음과 같은 구조로 작동한다이벤트(Event): 이벤트 발생을 나타내는 객체로, ApplicationEvent를 상속하거나 POJO(Plain O..
대용량 데이터 생성 성능 개선
·
DEV/Java & Spring
문제 확인프로젝트를 진행하며 100만 건의 사용자 데이터를 주입해야 했다. 컴퓨터 사양과 무관하게 성능 저하가 발생했는데 주요 문제는 아래와 같다. 성능 저하: 초기 50만 건 정도는 비교적 원활하게 처리되었으나, 그 이후 삽입 속도가 급격히 느려짐.IntelliJ 시스템 지연: 데이터 주입이 진행됨에 따라 IDE가 응답하지 않거나 동작이 느려지는 현상. 초기 코드를 살펴보면 기본적으로 JPA의 saveAll()을 사용하여 데이터를 배치로 저장했지만, EntityManager 초기화를 통해 메모리 절약을 시도했음에도 데이터 주입시간이 1시간 이상이 소요되었고 CPU 사용량이 급격하게 증가하는 것을 확인했다. 이때, ZEP과 디스코드 음성 채널을 사용중이었는데 프로그램이 동작하지 않을 정도로 비정상적으로 ..
QueryDSL을 활용한 동적 쿼리와 검색 최적화
·
DEV/Java & Spring
프로젝트에서 검색 기능을 구현할 때, 단순히 JPA Repository를 사용하는 것만으로는 복잡한 조건과 효율적인 페이징 처리, 그리고 동적 쿼리를 처리하기에 어려움이 있었다. 특히, 검색 조건이 여러 개 중복되고 일부는 선택적으로 적용되는 경우 JPQL로 관리하기엔 코드가 길어지고 가독성이 떨어졌다. 이를 해결하기 위해 QueryDSL을 도입하게 되었다. 검색 기능을 구현할 때 JPA의 @Query와 JPQL을 사용해도 충분히 가능하지만, 복잡한 조건을 처리하고 확장성을 고려하다 보면 한계가 드러난다. 특히, 다음과 같은 문제점들이 발생한다조건이 많아질수록 가독성 저하조건을 처리하기 위해 여러개의 if문과 복잡한 JPQL문자열을 생성해야 하며, 코드가 길어지고 유지보수가 어렵다동적 쿼리 생성의 복잡성..
QueryDSL Qclass 생성 오류 해결
·
DEV/Java & Spring
문제 확인하기프로젝트에 QueryDSL을 사용하기 위해 설정을 진행하다 오류를 직면했다. 그것도 엄청 다채로운 오류 발생  우선 처음 QueryDSL 사용을 위해 설정했던 코드는 아래와 같다.  //QueryDSL implementation 'com.querydsl:querydsl-jpa:5.0.0' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" 그리고 발생한 오류는 아래와 같다. Unable..
MVC 패턴
·
DEV/Java & Spring
MVC 패턴이란?    1. 소프트웨어 디자인 패턴 중 하나로, 애플리케이션을 세 가지 주요 컴포넌트로 분리하여 설계하는 것으로, Model, View, Controller 구조로 이루어져 있다. MVC 패턴은 애플리케이션의 구조를 명확히하고, 유지보수와 확장을 용히하게 하기 위해 사용된다.  Model애플리케이션의 데이터 구조와 비지니스 로직을 정의함 데이터베이스와 상호작용하여 데이터를 저장, 검색, 업데이트, 삭제하는 기능을 포함함데이터를 직접적으로 관리하며, 데이터의 상태 변화는 모델에서 처리함일반적으로 엔터티 클래스와 데이터 접근 레이어(Repository)로 구성View사용자 인터페이스를 담당함모델의 데이터를 기반으로 화면을 렌더링함모델이나 컨트롤러의 논리를 포함하지 않고, 오직 사용자 인터페이..
Java 문법 기초(2)
·
DEV/Java & Spring
Chapter 3. 연산자 1. 연산자와 피연산자연산자: 계산을 수행하는 기호 (예: +, -, *)피연산자: 연산자의 대상이 되는 값 (예: 5, 10)int x = 5;int y = 10;int z = x + y; // 5(피연산자) + 10(피연산자)System.out.println(z); // 출력값: 15 2. 연산자 종류산술 연산자사칙연산 및 비트연산 포함 (+, -, *, /, %)System.out.println(4 + 2); // 6System.out.println(4 - 2); // 2System.out.println(4 * 2); // 8System.out.println(4 / 2); // 2System.out.println(5 % 2); // 1 비교 연산자값의 크기와 같음을 비교 ..