스프링 - Quartz Postgresql JDBC 연결하기 작성일자 : 2025년 05월 11일 1. Quartz 라이브러리 추가 dependencies { // Quartz implementation 'org.springframework.boot:spring-boot-starter-quartz'} 2. 프로퍼티 설정 2.1. LocalDataSourceJobStore 이용하기spring: quartz: job-store-type: jdbc jdbc: initialize-schema: never properties: org: quartz: scheduler: instanceName: QuartzSche..
스프링 - ECS JVM 힙 메모리 증가시키기 작성일자 : 2025년 04월 06일 (이미지) 발생한 문제 AWS ECS에서 Spring Boot 애플리케이션을 실행할 때, JVM 힙 메모리가 부족하여 애플리케이션이 비정상 종료되는 문제가 발생했습니다. 로그Exception in thread "http-nio-8080-Acceptor" java.lang.OutOfMemoryError: Java heap space 해결 방법 현재 ECS Task Definition ECS Task Definition은 아래와 같이 설정되어 있습니다. Task SizeCPU: 0.9vCPUMemory: 0.9GBContainer - Resource allocation limitsCPU: 0.9vCPUMemory har..
스프링 - Flyway BeanCreationException 해결 방법 작성일자 : 2025년 03월 09일 오류 스프링 프로젝트에서 Flyway를 적용하다가 다음과 같은 오류가 발생했습니다.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Failed to initialize dependency 'flywayInitializer' of LoadTimeWe..
ShadcnUI - Drawer 또는 Dialog 위의 sonner 클릭 안되는 문제 해결하기 작성일자 : 2025년 02월 09일 개요 ShadcnUI의 Drawer 또는 Dialog 컴포넌트 위에 Sonner의 토스트 컴포넌트가 위치할 경우, Sonner의 토스트의 Action이 클릭되지 않는 문제가 발생합니다. 아래의 방법을 통해서 해당 문제를 해결한 과정을 소개합니다. 방법 1. sonner.tsx 파일 수정sonner.tsx 파일을 열어서 group-[.toaster]:pointer-events-auto 클래스를 추가합니다. 2. dialog.tsx 파일의 DialogContent 컴포넌트 수정Dialog의 경우, 아래와 같이 DialogContent 컴포넌트를 수정합니다.const Di..
스프링 - PostgreSQL text[] 타입을 엔티티의 List 필드에 매핑하기 작성 일자 : 2025년 02월 02일 개요 PostgreSQL에서는 text[] 타입과 같은 배열 타입을 기본으로 지원합니다. 이를 활용하면 @ElementCollection을 사용하는 방법과는 다르게 별도의 조인 테이블을 생성하지 않고도 여러 값을 하나의 컬럼에 저장할 수 있습니다. 하지만, Hibernate는 기본적으로 List과 PostgreSQL의 text[] 타입을 매핑할 수 없기 때문에 직접 변환 로직을 구현해주어야 합니다. 사용자 정의 Hibernate UserType: StringArrayType 구현 먼저, Java의 List과 PostgreSQL의 text[] 사이의 변환을 담당하는 사용자 정의..
스프링 - RabbutMQ Retry 정책 설정하기(ft. 10만원의 교훈) 작성 일자 : 2025년 01월 24일 개요 질문스프링부트와 RabbitMQ를 연동하고, 만약 Consumer 로직에서 Exception이 발생하면 어떤 일이 일어나는지 아는가? 정답Retry 정책이 없다면, 스프링부트의 Consumer 로직은 1초에 수십 번이고 다시 해당 메세지를 Consume하고 다시 Exception이 발생시킨다. 고통스러운 경험필자와 같이 Exception 로깅으로 CloudWatch의 PutLogEvents 비용에 10만원을 지불하고 싶지 않다면, Retry 정책을 미리미리 설정해놓자! 손을 벌벌 떨며 원인이 무엇인지 파악하고 -> RabbitMQ WebConsole에 접속해서 메세지를 Purg..
스프링 - Redission 분산락으로 동시성 문제 해결하기 예시 작성 일자 : 2024년 12월 13일 의존성 추가 dependencies { implementation 'org.redisson:redisson-spring-boot-starter:3.40.1'} spring-boot-starter-data-redis는 redisson-spring-boot-starter에 의존성을 가지고 있기 때문에 별도로 추가하지 않아도 됩니다. 프로퍼티 파일 작성 spring: data: redis: host: ${REDIS_HOST} port: 6379 password: ${REDIS_PASSWORD} RedisConfig 클래스 작성 @Configuration@Req..
스프링 - Redis CacheManager ClassCastException 해결하기 작성 일자 : 2024년 12월 07일 Cacheable 어노테이션 스프링에서는 @Cacheable 어노테이션을 사용하여 아래의 예시와 같이 메서드의 리턴 값을 캐싱할 수 있습니다.@Cacheable(value = "latest-post", key = "#root.methodName")public List getLatestPosts() { List posts = postRepository.findAllByOrderByCreatedAtDesc(); return posts;} Redis를 캐시 스토어로 사용할 때, cacheName이 latest-post인 캐시 하나만 사용하는 경우에는 문제가 발생하지 않지..