상황@Getter@Entity@AllArgsConstructor@Table(name = "p_store")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Store extends BaseEntity { . . @Enumerated(EnumType.STRING) @Column(name = "status", nullable = false) private StoreStatus status; . . . @OneToOne(mappedBy = "store", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) priv..
전체 글
성장하는 개발자👩💻1차 프로젝트에서 구현했던 장바구니 단순 CRUD에 Redis를 적용해서 빠른 조회가 가능하도록 리팩토링을 진행했습니다. 이 과정을 기록하고자 합니다.들어가기에 앞서 1차 프로젝트 주제는 음식 주문 관리 플랫폼으로 "배민 서비스"와 비슷하게 동작한다고 생각하면됩니다.장바구니에는 하나의 가게에 대해서만 메뉴 아이템을 담을 수 있습니다. 이미 다른 가게의 메뉴가 담겨져 있고 새로 추가하려고하는 메뉴가 다른 가게라면 replace true/false 여부로 장바구니의 내용을 변경할 수 있습니다. 그리고, 이미 장바구니에 존재한 메뉴 아이템을 또 담으면 그 만큼 수량을 증가시킵니다. RedisTemplate Hash 방식으로 장바구니 정보 redis에 저장장바구니처럼 부분 수정이 빈번하게 일어나는 데이터에는 ..
2차 프로젝트에서 주문 도메인을 맡게 되었습니다. 개발하는 과정에서 마주했던 트러블 슈팅을 해결했던 경험을 기록하고자 합니다.배경Order Service에서 주문을 생성하는 과정에서 order 정보를 저장하고, 외부 서비스 Delivery Service에 배송 생성 FeignClient 요청한다. Delivery생성에서는 해당 주문이 실제 있는지 Order Service에 FeignClient 요청하는 상황이다.Order Service -- feignClient: createDelivery() --> Delivery Service -- feignClient: getOrderDetail() --> Order Service 이런 상황이다. Order Service가 Delivery Service에 의존하고,..
테스트코드 작성하는데 @Autowired 어노테이션으로 해당 bean을 가지고 오려고하는데 위와 같이"오토와이어링할 수 없습니다. 'ProductService' 타입의 bean을 찾을 수 없습니다. " 라는 오류가 떴다.시도 1 : @Service, @SpringBootTest 어노테이션 잘 썼는지 확인@Service@RequiredArgsConstructorpublic class ProductService {Service 파일에 @Service 어노테이션도 잘 붙여줬는데 왜 bean으로 등록이 되지 않았다고 뜨는걸까. 시도 2: gradle clean하고 다시 build해도 안된다. 시도 3: 폴더 구조가 잘되어 있는지 확인하자1) ProductService 위치 : com.example.lockin..
DB Lock 이란?DB 락(Database Lock)은 데이터베이스에서 여러 트랜잭션이 동시에 같은 데이터에 접근할 때, 데이터의 무결성(일관성)을 보장하기 위해 사용되는 메커니즘이다. 쉽게 말해, 한 트랜잭션이 특정 데이터에 대해 작업을 하고 있을 때 다른 트랜잭션이 그 데이터에 접근하지 못하도록 잠그는 것이다. DB 동시성 문제, 어떻게 발생할까요?크게 3가지가 있다.Dirty Read (더티 리드)한 트랜잭션이 데이터를 수정 중일 때 다른 트랜잭션이 그 데이터를 읽는 상황이다. 만약 첫 번째 트랜잭션이 롤백된다면, 두 번째 트랜잭션은 잘못된 데이터를 읽은 것이 된다.예시 :트랜잭션 A가 고객의 은행 계좌 잔액을 수정하고 1000원을 더합니다. 잔액이 5000원에서 6000원으로 변경됩니다. 하지만..
팀프로젝트를 진행하면서 develop 브랜치에 merge할 때는 rebase merge를 하고 있어요.최신화한 develop 브랜치에서 새 브랜치를 파생하고, 거기서 작업을 하고 있었어요.그 도중에 다른 분이 develop 브랜치에 rebase merge 하고, 최신화된 develop 브랜치를 내 브랜치에 가지고 오고 싶었는데, pull origin develop 했다가...... files changes가 많아져서 난감했던 적이 있었어요... ㅠㅠ다른 팀원이 develop 브랜치에 rebase merge하고, 작업중인 내 브랜치에 develop 브랜치를 최신화해서 가지고 오고 싶으면 어떻게 해야하는지 기록해봅니다. 1️⃣ 상황feat/order-CRUDS-30 브랜치에서 작업하고 있었음develop에 ..