목록웹개발 (52)
주뇽's 저장소
포인트 지급의 동시성 제어 - 트랜잭션과 비관적 락킹 활용하기 💡포인트를 지급하는 과정에서 동일 계정에 대한 동시 요청으로 포인트가 중복 지급되는 문제가 발생했다. 이러한 동시성 문제를 해결하기 위한 다양한 방법과 최적의 해결책을 알아보자.1. 문제 상황 - 경쟁 상태로 인한 포인트 중복 지급 🚨현재 코드의 문제점포인트 지급 로직이 트랜잭션으로 묶여있지 않음포인트 지급 여부 확인과 실제 지급 사이의 시간 간격 존재동일 계정에서 동시에 여러 요청이 들어올 경우 모든 요청이 성공하여 포인트 중복 지급경쟁 상태 발생 시나리오요청 A: 포인트 지급 여부 확인 (미지급 확인)요청 B: 포인트 지급 여부 확인 (미지급 확인)요청 A: 포인트 지급 실행요청 B: 포인트 지급 실행 (중복 지급)2. 동시성 제어를 ..
메시지 큐에서 데이터 유실 및 중복 방지 방법 – Redis + 해싱 전략, Kafka, RabbitMQ 비교하기 💡메시지 큐 시스템을 사용할 때 중요한 문제 중 하나가 바로 데이터 유실과 중복 방지이다. 시스템에 장애가 발생하거나 중복 요청이 들어올 때, 메시지가 유실되지 않도록 처리하고 중복되지 않게 만드는 것이 중요하다. 오늘은 Redis + 해싱 전략, Kafka, RabbitMQ가 각각 어떻게 데이터 유실과 중복을 방지하는지 비교해본다.1. Redis + 해싱 전략 🏃♂️ – 빠르고 간단한 데이터 유실 방지Redis는 본래 메시지 큐 전용 시스템이 아니지만, 빠른 데이터 처리를 위해 자주 사용된다. 하지만 Redis에서 메시지 유실을 방지하기 위해서는 해싱 전략을 함께 사용해야 한다. 해싱..
Docker 네트워크로 FastAPI와 Kafka 컨테이너 연동하기: 주의할 점과 해결 방법뎁쭌 2024. 9. 13. 16:20 수정 공개 삭제Docker를 사용해 서로 다른 두 개의 컨테이너, FastAPI와 Kafka를 연결하고자 할 때, 네트워크 설정이 매우 중요하다. FastAPI 컨테이너에서 Kafka와 원활하게 통신하려면 같은 Docker 네트워크 안에서 실행되어야 하며, 네트워크 설정을 올바르게 구성하지 않으면 통신 오류가 발생할 수 있다. 이 글에서는 Docker 네트워크를 이용해 두 개의 컨테이너를 연동하는 방법과 주의할 점에 대해 설명한다.문제점: Docker 컨테이너 간 통신 오류 발생 😓FastAPI 컨테이너와 Kafka 컨테이너를 각각 실행하고 나서 FastAPI에서 Kafka..
Uvicorn에서 Gunicorn으로 전환 시 발생한 Kafka 문제 해결: 비동기, 동기, 블로킹, 논블로킹 개념과 적용 방법FastAPI 프로젝트에서 Kafka를 사용해 비동기 메시지 처리를 구현하다 보면, Uvicorn 단독 실행에서는 문제없이 동작하던 코드가 Gunicorn과 함께 실행할 때 문제를 일으킬 수 있다. 이 글에서는 Uvicorn과 Gunicorn의 차이, 비동기/동기, 블로킹/논블로킹 개념을 바탕으로 Kafka와 관련된 문제를 해결하는 방법에 대해 설명한다.문제점: Gunicorn 환경에서 비동기 처리가 제대로 되지 않음 😓FastAPI와 Kafka를 연동해 Uvicorn에서 workers=4로 설정하여 실행했을 때는 비동기 처리가 잘 이루어졌다. 그러나 Gunicorn과 Uvic..
리액트에서 HTTPS 설정을 받고 스프링으로 HTTP 요청을 유지하는 방법: Nginx를 이용한 SSL 종료 구현 🔒개발을 하다 보면 프론트엔드는 HTTPS를 사용하고 싶지만, 백엔드 서버는 HTTP를 그대로 유지해야 하는 상황이 있다. 이런 경우 Nginx를 이용한 SSL 종료(SSL Termination)를 구현하면 효과적으로 문제를 해결할 수 있다. 이 글에서는 리액트 애플리케이션과 스프링 부트 백엔드 사이에 Nginx를 두어 SSL 종료를 구현하는 방법에 대해 설명한다.문제점: HTTPS와 HTTP 혼용의 어려움 😓보안을 위해 프론트엔드에서는 HTTPS를 사용해야 하지만, 백엔드 서버는 여러 이유로 HTTP를 사용해야 하는 경우가 있다. 이런 상황에서 발생하는 주요 문제점은 다음과 같다:혼합 ..
Spring Eureka Service에 FastAPI 등록하기1. 서론마이크로서비스 아키텍처에서 서비스 디스커버리는 핵심적인 요소이다. Spring Cloud Netflix Eureka는 Java 생태계에서 널리 사용되는 서비스 디스커버리 도구이다. 그러나 Python으로 작성된 FastAPI 서비스를 Eureka에 등록하는 방법에 대해서는 잘 알려져 있지 않다. 이 글에서는 FastAPI 서비스를 Eureka에 등록하는 방법과 그 이유에 대해 알아본다.2. FastAPI를 Eureka에 등록하는 이유다양한 기술 스택 통합: 마이크로서비스 아키텍처에서는 각 서비스에 가장 적합한 기술을 선택할 수 있다. FastAPI를 Eureka에 등록함으로써 Java와 Python 서비스를 동일한 환경에서 관리할 수..
2024.06.15 - [웹개발] - 성능테스트를 위한 JMeter 사용 방법(1) 성능테스트를 위한 JMeter 사용 방법(1)2024.06.15 - [웹개발] - 성능테스트를 위한 윈도우와 Mac에서 JMeter 설치 방법 성능테스트를 위한 윈도우와 Mac에서 JMeter 설치 방법Apache JMeter는 성능 테스트 및 부하 테스트를 위한 도구로 널리 사용jypark1111.tistory.com 해당 포스팅은 JMeter 사용 방법1에서 나온 결과들을 시각화하는 과정이며 선택사항이다. 0. JMeter, Prometheus, Grafana를 이용한 시각화 작업성능 테스트는 소프트웨어 개발에서 중요한 부분이다. JMeter를 이용해 성능 테스트를 수행하고, Prometheus와 Grafana를 통..
2024.06.15 - [웹개발] - 성능테스트를 위한 JMeter 사용 방법(1) 성능테스트를 위한 JMeter 사용 방법(1)2024.06.15 - [웹개발] - 성능테스트를 위한 윈도우와 Mac에서 JMeter 설치 방법 성능테스트를 위한 윈도우와 Mac에서 JMeter 설치 방법Apache JMeter는 성능 테스트 및 부하 테스트를 위한 도구로 널리 사용jypark1111.tistory.com 이전 포스팅을 통해 JMeter를 통해 인기 게시글 100개를 조회를 할 때 성능테스트를 진행하였다. 이 때 100명의 유저가 초당 10명씩 GET 요청을 보내는 행위를 총 10번 진행해서 1000개의 Sample 데이터를 얻을 수 있었고, 그 결과는 상당히 좋지 못했다. 이러한 문제점을 해결하기 위해서는..