Backend
![Spring Cloud Gateway를 이용한 서비스 라우팅 및 JWT 토큰 검증](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbShOfS%2FbtrC1ijvwaU%2FvDBvyN6mxVfLcRce8kycOk%2Fimg.webp)
Spring Cloud Gateway를 이용한 서비스 라우팅 및 JWT 토큰 검증
현재 진행 중인 프로젝트가 MSA 기반의 프로젝트이기 때문에 API Gateway가 필요했다. 클라이언트로부터 들어오는 요청을 라우팅 해주고 특히 사용 중인 마이크로 서비스에서 JWT 토큰을 검증 후 토큰을 파싱해서 사용하는데 동일 로직이 모든 서비스에 들어가는 경우가 생겼다. API Gateway를 서비스 앞 단에서 구축함으로써 필터를 통한 JWT 토큰의 검증 로직을 공통적으로 추출할 수 있고, 마이크로 서비스 간 RestTemplate이나 Feign Client를 이용한 REST API 호출이 필요할 텐데 이 때 Eureka Server와 API Gateway를 사용한다면 보다 효율적일 것이라고 생각했다. Spring Cloud Netflix Zuul, Spring Cloud Gateway 등 API..
![Custom Exception을 이용한 예외 처리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFWcsh%2FbtrCIUXfgNR%2FJEznyOwXLPZT3u66LTQzJ1%2Fimg.png)
Custom Exception을 이용한 예외 처리
애플리케이션을 사용하는 여러 상황에서 보다 직관적으로 예외 메세지를 확인하기 위해 사용자 정의 예외 클래스를 이용해 예외 처리를 진행했다. CheckedException, UncheckedException 사용자 정의 예외 클래스를 만들어 구현하는 방법 이전에 간단하게 CheckedException과 UnchekcedException에 대해 알아보자. 자바에서는 크게 RuntimeException을 기준으로 CheckedException과 UncheckedException을 구분한다. RuntimeException은 이름에서도 알수 있듯이 실행 시점에 예외를 판단한다. 예를 들어, ArrayIndexOutOfBoundException과 같은 예외는 실행 시점에 배열의 인덱스를 벗어나 참조를 하는 경우 발..
![Spring Cloud Bus와 RabbitMQ를 이용해 설정 정보 한번에 최신화하기!](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMMpDX%2FbtrCfnjvjln%2FHmdhkc0a9xmUvOVZ6NwFt1%2Fimg.png)
Spring Cloud Bus와 RabbitMQ를 이용해 설정 정보 한번에 최신화하기!
기존 Spring Cloud Config Server에서는 설정 정보가 변경될 때 변경된 마이크로 서비스에서 /actuator/refresh 엔드포인트를 호출해 변경했다. 하지만, 매번 설정 정보가 변경될 때마다 엔드포인트를 호출해 변경정보를 반영하는 것은 여간 쉬운 일이 아니다. 이러한 문제를 해결하기 위해 클라이언트에 Spring Cloud Bus와 RabbitMQ를 이용해 설정 정보를 한 번에 변경해보자. RabbitMQ 설치 및 실행 RabbitMQ는 AMQP(Advanced Message Queueing Protocol) 프로토콜을 구현한 메시지 브로커다. 프로젝트를 진행하는 환경에 도커를 이용해 먼저 RabbitMQ를 설치한 후 구동한다. 필자는 오라클 클라우드 인스턴스를 이용해 프로젝트를 진..
![Kafka를 이용해 Producer/Consumer 맛보기! - Producer/Consumer](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTJ5yW%2FbtrBhBFcYuK%2F4qI6aesVnku0h2fHOAkTR1%2Fimg.jpg)
Kafka를 이용해 Producer/Consumer 맛보기! - Producer/Consumer
⛳ 로드맵 Kafka 의존성 추가 및 Producer/Consumer Java Configuration 설정 Producer/Consumer 구현 및 기존 로직과 비교 이전 Configuration 설정에 이어서 Producer/Consumer를 구현 후 기존 프로젝트에서 사용한 로직과 Kafka 도입 후 로직의 간단한 차이를 확인해 볼 예정이다. 기존 회원가입 프로세스 로직 현재 프로젝트에서 회원가입 프로세스는 아래와 같다. 이미 가입된 회원인지 확인한다. 회원 아이디, 닉네임이 들어간 회원정보, 추천인 아이디, 관심 OTT 서비스 아이디 리스트를 파라미터로 받는다. 회원 정보를 저장한다. ( 저장한 회원 정보를 리턴한다.) 관심 OTT 플랫폼 아이디 리스트 저장(Optional) OTT 플랫폼 아이디..
![Kafka를 이용해 Producer/Consumer 맛보기! - Configuration](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJnhAt%2FbtrBk8V5QRQ%2F14oCgaxQHehelfV4C1OLW0%2Fimg.jpg)
Kafka를 이용해 Producer/Consumer 맛보기! - Configuration
토이 프로젝트를 진행하던 도중 API Gateway를 도입하게 되면서 기존 회원 API 서버 내 회원 서비스에 구현되있는 소셜 로그인 및 회원 가입 기능과 JWT 엑세스 토큰 및 리프레시 토큰을 발급해주는 기능을 인증 서버내 회원 서비스로 따로 빼게 되었다. 이 때, 발생한 문제점이 있다. 현재 토이 프로젝트는 소셜 로그인을 이용하지만 추가적인 정보가 필요하기 때문에 소셜 로그인 이후 해당 서비스에 처음 로그인 한 경우 (서비스에 가입되지 않은 상태)라면 추가적인 회원 정보 및 추천인과 관심 OTT 서비스를 등록해야 한다. 여기서 추가적인 회원 정보는 인증 서버 내 회원 서비스에서 사용하는 간단한 회원 가입 로직을 이용하면 되지만, 가입 시 입력한 추천인에게 포인트를 적립(Optional)해주거나 회원이..