본문 바로가기

Spring8

쿠폰 서비스의 쿠폰 발급 단계별 로직 개발 쿠폰 발급 로직 단계별 개발쿠폰 발급하는 로직을 3단계에 나누어 개발을 진행했다.각 단계별로 어떻게 개발을 했고 어떤 특징과 장단점이 있는지 알아보자.단계는 다음과 같다.1. v1 - db를 사용한 기본 구현 방법2. v2 - Redis를 이용한 분산락 방법3. v3 - Kafka를 통한 비동기 처리 방법 1. v1 - db를 사용한 기본 구현db 트랜잭션과 동시요청 처리에 초점을 맞춤쿠폰 정책의 잔여 수량을 확인하고 성공하면 db에 저장하고 실패하면 실패응답을 반환한다.동시성제어를 db 레벨에서만 처리하기 때문에 적절한 lock이 없다.그러므로 트랜잭션내 연산으로 동시성 문제를 최대한 방지하도록 개발함다음은 v1 의 issueCoupon 메서드이다.@Transactionalpublic Coupon is.. 2025. 4. 9.
Exception 수천번 발생하는에러... postman으로 body에 다음 json값을 넣고 { "userName" : "test02", "password" : "test" } http://localhost:8080/api/v1/users/join 경로로 post 요청을 했다. 기존에 아이디가 있으면 DUPLICATED_USER_NAME 에러가 떠야하는데 java.lang.StackOverflowError: null 에러가 뜬다.. 아래 서비스 코드로 진행을 했다. 그런데 만약에 test03 이라는 유저가 db에 있으면 역시나 기존에 유저아이디가 있기 때문에 SnsApplicationException 에러가 발생합니다. 그런데 나는 java.lang.StackOverflowError: null 에러가 발생하고 at com.example.sns... 2022. 9. 10.
Spring Cloud Bus Spring Cloud Bus 는 분산 시스템 환경, 마이크로서비스 환경에서 각각의 노드나 서비스를 연결시켜주는 경량 메시지 브로커이다. 또는 Spring cloud bus는 동적으로 config 변경을 적용하기 위한 MQ(Message Queue) Handler이다. config가 변경되면 각 마이크로서비스는 최신 값을 갖고 오기 위해 POST로 http[s]://{microservice host}/actuator/refresh를 해줘야 한다. 이 작업을 자동화할 수도 있으나, config server가 각 마이크로서비스의 주소를 모두 관리해야 하니 비효율적이다. 즉, actuator refresh 기능은 매 어플리케이션 서비스마다 각각 실행 시켜줘야해서 불편한데 스프링 클라우드 버스 기능으로 한 번에.. 2022. 8. 30.
Spring Cloud Config Spring Cloud Config 는 분산 시스템에서 설정 정보(application.yml) 를 외부에 보관할 수 있도록 지원해주는 서비스이다. 이러한 Spring Cloud Config 를 이용했을 때 얻을 수 있는 장점은 다음과 같다. 여러 서버의 설정 파일을 중앙 서버에서 관리할 수 있다. 각 서비스(서버)를 재배포 하지 않고 설정 파일의 변경사항을 반영할 수 있다. 애플리케이션 배포 파이프라인을 통해 DEB-UAT-PROD 환경에 맞는 구성 정보 사용가능 실제로 설정파일이 저장되는 Config 저장소(Git Repository, File System 등)가 있고, 이러한 저장소와 연결되어 설정파일을 관리해주는 Spring Cloud Config Server 가 있다. 마지막으로 Spring C.. 2022. 8. 22.
API Gateway Service 사용(Spring Cloud Gateway + Eureka) Spring Cloud Gateway와 Eureka를 이용해서 API Gateway Service를 실행해보자 그렇기 위해선 FirstService와 SecondService, apigateway-service를 discovery service(Eureka)에 등록해야한다. 클라이언트가 " http://localhost:8080/first-service/welcome "로 요청을 보내면 API Gateway가 먼저 받는다. 이제 API Gateway는 " /first-service/** " 이하는 어떤 uri로 가야하는지 discovery service에게 물어보고 discovery service가 어떤 IP 주소와 포트로 가야하는지 알려주면 API Gateway는 해당 주소로 요청을 보내게 된다. 우선.. 2022. 8. 17.
필터와 인터셉터 디스패처 서블릿(Dispatcher-Servlet)이란 디스패처 서블릿의 dispatch는 "보내다"라는 뜻을 가지고 있습니다. 그리고 이러한 단어를 포함하는 디스패처 서블릿은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있습니다. 필터(Filter)란 필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것이다. 즉, 스프링 컨테이너가 .. 2022. 5. 7.