전체 글 6

RabbitMQ 기반 비동기 메시징 시스템 도입하기

1. 배경기존 채용 공고 AI 분석 기능의 흐름은 클라이언트의 요청이 백엔드 서버를 거쳐 AI 서버로 전달되는 동기(Synchronous) 방식이었다. AI 서버의 분석 응답 시간 + 백엔드 서버 응답 시간 만큼 클라이언트가 대기를 해야했고, AI 분석 응답 시간이 평균 17초 정도 소요되며 사용자 경험이 저하되는 문제가 발생했다.이를 해결하기 위해 AI 서버에 대한 요청의 비동기 처리(Asynchronous)를 도입하게 되었다. 2. 비동기 처리 방식비동기 처리 방식은 처음에는 @Async를 통해 구현했다. @Async는 Spring 프레임워크가 제공하는 비동기 처리 방식으로 내부적으로 스레드 풀에 작업을 위임하게 된다.프로젝트의 규모가 크지 않았고 외부 인프라 도입과 복잡한 설정 없이 어노테이션으로 ..

Spring boot 2026.03.27

Ehcache 적용을 통한 응답 속도 개선

배경 및 원인 AI 분석 기반의 취업 사기 감지 플랫폼인 사막의 메인 페이지에서 제공되는- 오늘의 퀴즈- 뉴스 배너등과 같은 정보는 하루동안 변할 가능성이 아주 낮은 정적인 데이터였지만 매번 사용자가 메인페이지에 접속할 때마다 DB에서 조회되었기 때문에 서버에 불필요한 부하가 발생했습니다. 해결 방법위의 문제를 해결하고 성능을 개선하기 위해, 캐싱을 도입하기로 하였습니다. 1. EHache (로컬 캐시)(+) 장점JVM 내 힙 메모리에 저장 -> 속도가 매우 빠름로컬 캐시이므로 외부 네트워크 오버헤드 없음 (-) 단점분산 캐시 지원 미약 -> 여러 서버에서 동일 캐시 공유 어려움서버 재시작 시 캐시 데이터 소멸대규모 데이터 캐싱인 경우 JVM 힙 메모리 한계 존재 2. Redis (인메모리 캐시/분산 ..

Spring boot 2026.02.20

남는 노트북으로 홈 서버 구축하기 (LG 그램, KT)

0. 계기집을 정리하다가 전에 쓰던 노트북(LG 그램)을 발견해 서버 비용도 아낄 겸 개발용 서버로 이용하기 위해 홈서버를 구축해보기로 했다. 아래와 같은 순서로 홈 서버 구축을 진행할 것이다.1. Ubuntu 설치2. 네트워크 설정3. SSH 설정 1. Ubuntu 설치아예 사용하지 않는 노트북이라 기존 Window OS를 삭제하고 Ubuntu를 설치할 것이다. Ubuntu 서버를 아래의 링크에서 다운받는다.https://ubuntu.com/download/server Get Ubuntu Server | Download | UbuntuGet Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provisio..

Etc. 2025.12.20

Spring boot에서 enum의 유연한 직렬화 및 역직렬화

Spring boot에서 enum을 유연하게 직렬화 및 역직렬화를 하려면 어떻게 해야할까?enum에는 FOURTH_GRADE, FIFTH_GRADE, SIXTH_GRADE로 정의했지만, 이 상수로 프론트엔드와 데이터를 주고 받는다면 프론트엔드에서 4학년, 5학년, 6학년으로 재변환해야한다는 문제가 있었다.이를 해결하기 위해 직렬화시 enum값을 4학년, 5학년, 6학년으로 변환하고, 역직렬화시에도 마찬가지로 이 값을 받아 OURTH_GRADE, FIFTH_GRADE, SIXTH_GRADE 상수로 변환되도록 구현하고 싶었다.직렬화: 객체들의 데이터를 연속적인 데이터로 변형하여 전송가능한 형태로 만드는 것(ex. 객체 → JSON)역직렬화: 직렬화된 데이터를 다시 객체 형태로 만드는 것(ex. JSON → ..

Spring boot 2025.11.14

JPA Entity Column의 기본값을 설정하는 방법

새로운 객체를 저장할 때 @ColumnDefault를 사용하면 필드값을 초기화하지 않을 경우 null 값이 필드에 들어가 설정한 기본값으로 DB에 저장될 거라고 생각했는데 설정한 기본값으로 저장되지 않고, null으로 저장되는 문제가 발생하였다. 문제를 해결하기 위해 @ColumDefault에 대해 조금 더 찾아보았다.@ColumnDefault@ColumDefault는 ddl-auto 옵션으로 DDL을 생성할 때 자동으로 default 제약사항을 넣어주는 어노테이션이다.@Entity@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Member { @Id @GeneratedValue(strategy = Generation..

Spring boot 2025.11.14

코딩테스트를 위한 Java 문법 정리

업데이트 중 ... Wrapper ClassIntegermethod기능methoddescription형변환(숫자문자)Integer.parseInt(s)Integer.toString(n) String methodfeaturemethoddescription길이s.length() 인덱스로 문자 조회s.charAt(index) 문자로 인덱스 조회s.indexOf(s2)s.lastIndexOf(s2) 분할s.substring(stratIndex)s.substring(startIndex, endIndex) 치환s.replace(target , replacement)s.replaceAll(regex, replacement)s.replaceFirst(regex, replacement) 값 일치 여부s.equals(s2..

Algorithm 2025.10.22