벡엔드/SpringBoot 5

[Redis] 레디스를 활용한 Spring-boot 캐싱 적용 해결하기 (트러블 슈팅)

https://tech.namong.shop/faster-faster-cache사이드 프로젝트 팀 기술 블로그 주소  사이드 프로젝트에서 기존에 사용자 토큰에만 사용하던 redis를 활용해 자주 사용되면서 복잡한 쿼리가 발생하는 API에 대해 캐싱을 적용하게 되었습니다. 하지만, 캐싱을 적용하며 아래와 같은 에러들을 만날 수 있었습니다.LocalDateTime 직렬화 문제List 역직렬화 문제기본 생성자 문제 왜 에러가 발생했는지, 어떻게 해결했는지 함께 보겠습니다. 1. LocalDateTime 직렬화 문제캐시를 적용한 API에서 LocalDateTime 타입 필드가 Redis에 저장될 때 아래와 같은 직렬화 문제가 발생했습니다Error MessageCaused by: com.fasterxml.jack..

Spring AOP 와 @Transactional 애너테이션

트랜잭션(Transaction)이란?트랜잭션은 데이터베이스의 작업의 단위로, 일련의 작업들이 모두 성공하거나 실패해야 함을 보장한다. 트랜잭션을 설명할 때 가장 많이 드는 예시로 은행에서의 금액 송금을 예로 들 수 있다.사진과 같이 사용자 1이 사용자 2에게 1000원을 송금할 때 벌어지는 일총 두가지의 작업이 데이터베이스에 요청되게 된다.사용자 1의 계좌에서 1000원을 차감한다.사용자 2의 계좌에 1000원을 추가한다.만약 이 두개의 작업이 하나의 단위로 묶여있지 않고 처리된다면 1번 혹은 2번의 작업 중 하나만 실패했을 때 심각한 문제가 발생하게 된다.1번 작업 실패 : 사용자 1의 계좌에서 1000원이 차감되지 않았지만 사용자 2의 계좌에 1000원이 입금된다.2번 작업 실패 : 사용자 1의 계좌..

JPA, ORM이란? 기본 개념 잡기

ORM이란 ? ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 연결 해주는 도구이다. ORM이 필요한 이유 객체를 관계형 DB에 관리하는 일이 대부분이 되면서 객체와 데이터베이스의 테이블의 불일치를 해결하고 객체를 통해 간접적으로 데이터베이스의 필드를 다루기 위해 필요하다. ORM의 장점 직관적인 코드를 가지고 쿼리가 아닌 메서드로 데이터를 조작할 수 있어 생산성이 높아진다. SQL의 절차적 접근이 아닌 객체 지향적인 접근을 통해 개발할 수 있다. 재사용 및 유지보수 편리성이 증가한다. JPA란 자바 진영에서 ORM기술 표준으로 사용하는 인터페이스 모음이 바로 JPA이다. 특정 기능을 하는 라이브러리가 아닌 ORM을 사용하기 위한 기술을 모아둔 것이다. JPA를 사용해야 되는이유 SQL 중심적인 ..

[spring] 스프링, 스프링 부트란? what is Spring and Spring boot?

1. 스프링(Spring)이란? 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임 워크이다. 스프링 프레임 워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model을 제공한다. 특징 자바 객체와 라이브러리 관리를 해주며, 톰캣과 같은 WAS(Web Application Server)가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있다. 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리한다. 객체의 생성 및 소멸과 같은 생명주기(life cycle)을 관리하며 Spring 컨테이너에서 필요한 객체를 가져와 사용한다. 가장 큰 특징은 제어와 역전(IOC, Inversion Of Control) 와 의존성 주입(DI, Dependency Inje..

[Spring] 스프링 Lombok 어노테이션 정리

접근자(get), 설정자(set) 자동 생성 @Getter @Setter @Getter @Setter public class UpdateItemDto { private String name; private int price; private int stockQuantity; } 생성자 자동생성 @ReqiredArgsConstructor : 의존성 주입 방법 중 생성자 주입을 임의의 코드 없이 자동으로 설정해준다. @RequiredArgsConstructor public class OrderService { private final OrderRepository orderRepository; private final MemberRepository memberRepository; private final Ite..