본문 바로가기

개발중

(617)
Spring Boot와 Redis를 사용한 데이터 저장 및 관리 Redis는 빠른 오픈 소스 인-메모리 키-값 데이터 스토어로, 다양한 데이터 구조를 지원합니다. Spring Boot 애플리케이션에서 Redis를 사용하면, 데이터 캐싱, 메시지 브로커 등 다양한 방식으로 활용할 수 있습니다.  이 글에서는 Spring Boot를 이용하여 Redis 데이터 구조를 어떻게 조작하는지 보여드립니다.  설정 사항 먼저, Redis 서버가 설치되어 있어야 하며, application.properties 파일에 다음과 같이 Redis 서버 접속 정보를 설정해야 합니다: spring.redis.host=localhostspring.redis.port=6379  Redis 데이터 유형 및 조작 StringRedis CLI127.0.0.1:6379> SET key valueOK127..
[Spring Batch] 낙관적 잠금 오류 (OptimisticLockingFailureException) 해결하기 서론 현대의 소프트웨어 개발에서 병렬 처리와 데이터 동시성은 필수적이지만, 이로 인해 예상치 못한 오류에 직면할 때가 많습니다. 본 포스트에서는 Spring Batch에서 흔히 발생하는 OptimisticLockingFailureException 오류를 다루고, 이를 flush() 메소드를 사용하여 해결한 경험을 공유하고자 합니다. 이 오류가 프로젝트에 미치는 영향을 이해하고 대처법을 배우는 것은 모든 데이터 중심 애플리케이션 개발자에게 중요할 것입니다. 문제 상세 설명 OptimisticLockingFailureException은 낙관적 잠금 기법을 사용할 때 발생합니다. 이 기법은 동시에 같은 데이터에 여러 트랜잭션이 접근하려 할 때 사용되는데, 데이터 무결성을 보장하기 위해 데이터의 버전을 체크합니..
Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생 문제: Spring Boot 2.x.x에서 3.x.x로 업그레이드 후 Redis에 Java 객체 저장 문제 발생Spring Boot를 2.x.x 버전에서 3.x.x 버전으로 업그레이드하면서 AuthUser 객체의 직렬화 및 역직렬화 과정에서 문제가 발생했습니다.  업그레이드 이전에는 이러한 이슈가 없었으나, 새 버전에서는 AuthUser 객체를 Redis에 저장하고 불러오는 과정에서 역직렬화를 할 수 없다는 오류가 발생했습니다.  해결 방법: Jackson Mix-In과 ObjectMapper 설정 이 문제를 해결하기 위해, Jackson 라이브러리의 Mix-In 기능을 활용했습니다. Mix-In을 사용하면 기존 클래스를 수정하지 않고도 직렬화 및 역직렬화 규칙을 적용할 수 있습니다. AuthUser 클..
Spring boot 3.2.2 & Redis & GenericJackson2JsonRedisSerializer Spring Boot 2 에서 Spring Boot 3 으로 마이그레이션 하면서 Redis 역/직렬화 이슈가 발생하였습니다. 아래 문서를 읽고 기존에 사용하던 Jackson2JsonRedisSerializer 라이브러리를 GenericJackson2JsonRedisSerializer  라이브러리로 교체하였습니다. https://docs.spring.io/spring-session/reference/configuration/redis.html  GenericJackson2JsonRedisSerializer  GenericJackson2JsonRedisSerializer 클래스는 Spring Data Redis에서 제공하는 RedisSerializer의 구현체 중 하나로, Java 객체를 JSON으로 직렬화..
MySQL 8 my.ini 없을 경우 (Window) 인터넷에서 my.ini 파일의 위치를 아래와 같이 표기 하고 있다. C:\Program Files\MySQL\MySQL Server 8.0\my.ini 내 경우에는 아래와 같은 경로에 위치해있었다. C:\ProgramData\MySQL\MySQL Server 8.0\my.ini Program Files 가 아닌 ProgramData 인 점에 유의하자.
[Docker] invalid tag "~~~~": repository name must be lowercase 에러 내용 PS C:\Users\soobi\git\auth\AuthPApi> docker-compose build [+] Building 0.0s (0/0) docker:default invalid tag "soobin.com/Auth/soobin-auth-api:0.0.1": repository name must be lowercase Docker 태그에서 발생한 오류는 태그 이름이 모두 소문자여야 한다는 Docker의 규칙 때문입니다. 오류 메시지에 따르면, "soobin.com/Auth/soobin-auth-api:0.0.1" 태그에서 Auth 부분이 대문자로 되어 있어 문제가 발생했습니다. Docker 이미지 태그에서 대문자를 사용할 수 없으므로, gsAuth를 gsauth로 변경해야 합니다. 즉..
[JPA] org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet InvalidDataAccessResourceUsageException 오류 발생 InvalidDataAccessResourceUsageException 예외는 스프링 프레임워크에서 데이터 액세스 중에 잘못된 사용으로 인해 발생하는 일반적인 예외입니다. 이 예외는 주로 데이터베이스와 상호 작용할 때 잘못된 SQL 문법, 잘못된 데이터베이스 스키마 이름, 존재하지 않는 테이블에 대한 쿼리, 데이터 타입 불일치 등 데이터 액세스 계층에서 발생하는 다양한 문제들을 나타냅니다. org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hib..
GC overhead limit exceeded 에러 확인하기 발생 에러 [dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler processing failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded] with root cause java.lang.OutOfMemoryError: GC overhead limit exceeded at java.util.Arrays.copyOf(Arrays.java:3181) at java.util.ArrayList.grow(ArrayList.java:265) at java.util..