IT

DBMS/Redis

[Spring Boot + Redis 캐싱] 좌석 목록 조회 캐싱 리팩토링 & 역직렬화 이슈 해결기

1. 기존 구현 방식기존의 회차별 좌석 조회는 DB + Redis를 조합해서 조회하는 로직이다. 즉, 특정 sessionId 공연 회차의 모든 좌석을 조회하되, 좌석의 상태는 Redis 값을 우선시해서 보여주는 것이다. //해당 회차별 좌석 목록 조회 @Override public List getSeatBySession(UUID sessionId) { SessionId session = new SessionId(sessionId); //DB에서 특정 sessionId에 해당하는 모든 좌석 가져오기 //상태는 DB의 p_seats 테이블에서 가져온 기본 상태 List seats = seatRepository.findAllBySession..

Spring/Kafka

[Kafka] Kafka 메시지 전송, 소비 실습

이번 글에서는 Kafka를 직접 구성하고 실습해서 메시지를 어떻게 발행하고, 소비하고, 어떤 흐름으로 구성되는지 알아보려고 한다!  1. Kafka 환경 설정설치는 도커 컴포즈를 사용하여 kafka 컨테이너를 생성하였다.version: '3.8'services: zookeeper: image: bitnami/zookeeper:3.8 platform: linux/amd64 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ALLOW_ANONYMOUS_LOGIN: "yes" kafka: image: bitnami/kafka:3.6 ..

Spring/Kafka

[Kafka] kafka 기본 개념

1.  Kafka란?Kafka는 분산 스트리밍 플랫폼으로 주로 실시간 데이터 피드의 빅 데이터 처리를 목적으로 사용된다. 또한 메시지 큐와 유사하지만 대용량 데이터 스트림을 저장하고 실시간으로 분석하거나 처리하는 데 중점을 둔다.쉽게 말하자면 많은 데이터를 빠르고 안정적으로 전송하고 저장하는 중간다리 역할을 함! Kafka는 왜 필요할까?예를 들어 주문 서비스에서 주문을 생성하면 재고 서비스, 배달 서비스, 알림 서비스 등 여러 서비스가 주문 정보를 알고 있어야 하는데 이때, 직접 Order -> Stock, Order -> Delivery, Order -> Notification 이런식으로 REST API로 각각 호출을 하게 되면 서비스 간 결합도는 높아지고 실패에 민감해진다.하지만, kafkaf를 쓰..

Spring/MSA

MSA 환경에서 FeignClient 응답 데이터가 누락된 이유는? – CommonResponse<DTO>와 변수 범위 이슈

1. 문제발생이번에 개발한 기능은 Order-Service에서 주문 생성 시 Stock-Service와 연동하여 재고를 차감하고 이후 Delivery-Service에 배송 생성을 요청하는 전체 흐름이다.이 과정에서 예상치 못한 문제가 발생했다. 분명 Stock-Service에서 hubId, price를 잘 반환하고 있는데도 OrderService에서 해당 값이 null, 0으로 들어가는 버그가 발생한 것이다. 디버깅 로그를 찍어보면 다음과 같았다.INFO OrderService - stockResponse.hubId = nullINFO OrderService - totalPrice = 0 하지만 DB에서는 정상적으로 hubId와 price가 존재하는 것을 확인할 수 있었다. 그럼 대체 문제는 어디에 있었..

Spring/MSA

MSA 주문 서비스에서 보상 트랜잭션(SAGA 오케스트레이션) 적용기

대규모 트래픽 분산처리 시스템을 MSA 기반으로 개발하던 중 가장 복잡했던 부분은 주문(Order) 생성 시 여러 서비스(재고/배송) 와의 연동 과정에서 발생하는 트랜잭션 처리였다.현재 개발 중인 물류 시스템은 다음과 같은 구조를 가지고 있다.Order-Service: 주문 생성Stock-Service: 재고 확인 및 차감Delivery-Service: 배송 요청 처리 중요한 점은 이 모든 과정을 하나의 트랜잭션처럼 처리하고 싶지만 마이크로서비스 구조(MSA)에서는 분산 트랜잭션을 하나의 DB 트랜잭션처럼 처리할 수 없다는 점이다. Spring Cloud + OpenFeign을 이용해 Order-Service ↔ Stock-Service ↔ Delivery-Service 로직을 연동하고 실패 시 보상 트..

Spring/MSA

MSA에서 JPA 트랜잭션 문제 & SAGA 패턴 필요성

이번 글은 MSA 프로젝트를 진행하면서 겪었던 JPA 트랜잭션 문제와 해결 과정, 그리고 이를 통해 SAGA 패턴과 락(Optimistic Lock & Pessimistic Lock)의 필요성에 대해 깨달은 내용을 공유하고자 한다. 1. 문제 상황 : MSA에서 JPA 트랜잭션이 예상과 다르게 동작Spring Boot 기반 Order Service를 개발하던 중, 주문 생성 과정에서 다음과 같은 오류가 발생하였다. 💥 💥 발생한 오류 (StaleObjectStateException) 💥 💥org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction이 오류는 JPA에서 save() 실행 시 merg..

Spring/MSA

[MSA] MSA 기반 상품 주문 시스템 (1)

MSA의 개념을 확립하고자 작은 프로젝트를 하나 해보려고 한다.1. 프로젝트 개요프로젝트명 : MSA 기반 상품 주문 시스템목표 : MSA, JWT 인증, Redis 캐싱, 분산 추적, Docker CI/CD 실습2. 아키텍처 설계 흐름Client -> Gateway(인증, 인가, 라우팅) -> Eureka로 서비스 발견(Load Balancing) -> 각 서비스 호출(Auth, Product, Order) 3. ERD 설계Auth DB(auth-db)CREATE TABLE users ( user_id BIGSERIAL PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, created..

카테고리 없음

[AWS] aws 과금 방지를 위한 체크리스트 + Terraform

1. AWS 실습 후 꼭 해야 하는 삭제 체크리스트 ✔️  [ ✔️ ] EC2 인스턴스 종료 및 삭제   [ ✔️ ] EBS 볼륨 삭제 (남아있는지 꼭 확인)   [ ✔️ ] Elastic IP 해제 및 삭제   [ ✔️ ] RDS (DB) 삭제   [ ✔️ ] S3 버킷 삭제 (필요하면 백업 후)   [ ✔️ ] VPC 삭제   [ ✔️ ] 로드밸런서 삭제   [ ✔️ ] CloudWatch 알람 같은 모니터링 설정 해제   [ ✔️ ] 비용 확인 (Billing 메뉴)2. AWS 요금 알림 설정하기설정 방법:AWS 콘솔 접속상단 검색창에 "Billing" → "Budgets" 이동"예산 생성하기" 클릭예산 이름 작성 (ex. 실습 요금 알림)월 예산 $1~$5 정도로 설정이메일 주소 입력 → 알림 받..

챛채
'분류 전체보기' 카테고리의 글 목록