[Spring]비동기 메시지 큐 (Kafka & RabbitMQ)
·
Spring
이번 프로젝트에서 모의 투자 서비스의 성능을 크게 좌우하는 핵심 기능은 "주문 체결"이다. 기존에는 스케줄러 기반의 주기적 체결 방식으로 구현되어 있었지만, 실시간 가격 변화에 즉시 반응하지 못해 성능과 트래픽 측면에서 한계가 있었다.이를 개선하기 위해, 실시간 체결 시스템에 적합한 메시지 브로커를 도입하고자 하였고, 그 선택의 타당성을 확인하기 위해 먼저 메시지 브로커 개념을 이해하고, Kafka와 RabbitMQ를 비교 분석하였다.💡 "메시지 브로커(Message Broker)는 분산 시스템 간 데이터를 안정적으로 주고받기 위한 미들웨어로, 발신자(Producer)와 수신자(Consumer) 사이에서 메시지를 큐에 저장하고 비동기로 전달하는 역할을 한다. ✅ 메시지 브로커 이해메시지 큐(MQ)는 ..
[Spring]동시성 제어(Redisson)
·
Spring
5분 브리핑을 진행하면서 다수의 멀티 스레드로 동시 주문을 실행하면 데이터 정합성 문제가 발생하는 것을 다루었고 본격적으로 성능 개선을 위해 분산 락을 적용해볼려고한다.✅분산 환경에서 동시성 제어는 왜 필요한가?여러 요청이 공유 자원을 동시에 접근할 때, 분산된 DB나 서버 간 동기화 속도 차이로 인해 데이터 정합성 문제가 발생할 수 있다.예를 들어, 모의투자 시스템에서 동일한 계좌가 여러 주문을 동시에 처리하는 경우, 잔고 감소 또는 보유 주식 수량 차감이 정확하게 이루어지지 않아 잘못된 체결이나 정합성 오류가 발생할 수 있다. ✅분산락 없이 발생하는 문제점📌 하나의 계좌가 동시에 두 개의 매도 주문 처리 시도 기대 결과: 보유 주식 1개씩 두 번 매도되어 총 2개 차감실제 결과: 보유 주식이 1개..
[Spring] @Casheable 이해하기
·
Spring
본격적으로 들어가기에 앞서,웹 페이지를 이용하다보면 캐시라는 단어를 들어본 적이 있을 것이다.캐시는 데이터를 빠르게 꺼내쓰기 위해 미리 복사해둔 임시 저장소이다.이번 글에서는 Spring의 @Cacheable 동작 방식, 캐시의 장단점, 그리고 실무에서 캐시를 적용하는 법을 살펴볼려고 한다. ✅Cache 란?캐시는 데이터 접근 속도를 높이기 위해 원본 데이터를 복사해둔 저장소다.DB나 외부 API를 매번 호출하는 대신 캐시에 저장된 데이터를 재사용해 성능을 끌어올린다.스프링의 캐시 추상화는 Java 메서드의 반환값을 캐싱하는 데 초점이 맞춰져 있다. @Cacheable 어노테이션을 메서드나 클래스에 붙이면, 메서드 호출 결과가 캐시에 저장돼 다음 호출 시 빠르게 반환된다.💡 @Cacheable을 클래스..
[Spring Security] 스프링 시큐리티와 JWT로 인증 구현하기
·
Spring
✅Spring Security 란?스프링 시큐리티는 인증 (Authentication) ,인가(Authorize) 부여 및 보호 기능을 제공하는 프레임워크다.인증'과 '인가'에 대한 부분을 Filter 흐름에 따라 처리한다.우선 Security 를 본격적으로 알아보기 전에 인증과 인가에 대해 정의해보자. 인증: 해당 사용자가 본인이 맞는지를 확인하는 절차. 인가: 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차 금융 예시로 비유하자면:인증: 은행 창구에서 신분증을 제시해 본인이 맞는지 확인.인가: 확인된 고객이 계좌 이체(특정 작업)를 할 수 있는 권한이 있는지 판단.또한 Filter 흐름으로 처리를 한다했는데 Security는 Request가 Controller 로 가기전에 중간에서 실행된다..