최신글
-
Kafka
[kafka] 메시지 큐와 카프카의 차이점
1. 메시지 브로커메시지 브로커는 publisher가 생산한 메시지를 메시지 큐에 저장하고, 저장된 데이터를 consumer가 가져갈 수 있도록 "중간 다리 역할"을 해주는 브로커다. 흔히 S/W 관점에서 "미들웨어"라고 한다.보통 서로 다른 시스템(혹은 소프트웨어/ 이기종간) 사이에서 데이터를 비동기 형태로 처리하기 위해 사용한다.이러한 구조를 보통 pub/sub 구조라고 하며 대표적으로 Rabbit MQ 소프트웨어가 있고 GCP의 pubsub, AWS의 SQS 같은 서비스가 있다.이와 같은 메시지 브로커들은 consumer가 큐에서 데이터를 가져가게 되면 즉시 혹은 짧은 시간 내에 큐에서 데이터가 삭제되는 특징이 있다.2. 이벤트 브로커이벤트 브로커 또한 기본적으로 메시지 브로커의 큐 기능들을 가지..
-
workflow 리팩토링 프로젝트(SpringBoot,JPA,MySQL)
[Srping Security + JWT] JWT 로그인/토큰 재발급 동작 flow
spring security와 jwt 를 이용하여 로그인을 구현하고 토큰 재발급, redis를 활용한 로그아웃, 최신토큰 사용하기 등등 다 구현을 해보았는데요. reids활용한 구현부분은 flow를 정리해놓았는데 jwt를 이용한 로그인와 토급재발급의 동작 flow에 대한 설명이 부족한것 같아서 추가로 포스팅을 작성하려고 합니다. 이 포스팅은 jwt를 이용한 로그인과 토큰 재발급의 동작 흐름에 관한 글이기 때문에 구현방법은 이전포스팅들을 참고해주시기 바랍니다. 들어가기 앞서 OncePerRequestFilter가 아니더라도 일반적인 GenericFilterBean을 상속받아도 무관합니다. (OncePerRequestFilter가 이미 GenericFilterBean를 상속받고 있기 때문.) Filter 작..
-
workflow 리팩토링 프로젝트(SpringBoot,JPA,MySQL)
[SpringBoot]멀티모듈에서 개발 환경별로 DB 분리하기
프로젝트 진행중 loval,dev,test 환경으로 DB를 분리해야 할 일이 생겼습니다. test 코드 수행이 끝난 뒤 모든 데이터가 지워져서 DB가 클린상태가 되어야 하는데 그렇게 되면 API 테스트시 DB의 기존 데이터들이 모두 삭제되는 문제가 발생했습니다. 때문에 TEST용 DB를 따로 분리해주기로 했습니다. aplication.yml을 분리해서 사용할 건데요, aplication.yml이란 무엇일까요? aplication.yml 이란? application.yml은 주로 스프링 부트(Spring Boot) 애플리케이션에서 사용되는 설정 파일입니다. 스프링 부트는 자바 기반의 웹 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임워크로, 이를 통해 애플리케이션의 설정을 관리할 수 있습니다. app..
-
workflow 리팩토링 프로젝트(SpringBoot,JPA,MySQL)
[JWT+Redis]Redis를 이용해 최신 JWT만 이용하게 하기 + accessToken 만료시 재발급 + JWT 로그아웃 - 2
이전 포스팅에 이어서 이번에는 redis를 이용해서 로그아웃을 구현해 보겠습니다. balckList를 사용한다고 하는데요 말은 blackList지만 실제로 사용할 때는 redis에 해당토큰을 set해서 blackList로 등록해주고 리소스 접근시 balckList에 해당 토큰이있다면 로그아웃 처리되었기 때문에 리소스 접근이 안되는 것입니다. flow를 살펴봅시다. 로그아웃 flow는 이렇게 진행됩니다. 핵심은 accessToken을 BalckList에 등록해주고 refreshToken을 삭제해서 해당 토큰으로 로그인할 수 없도록 로그아웃처리를 해줍니다. 그래서 해당 리소스에 요청할때 로그아웃처리된 토큰이 온다면 redis에서 blackList를 확인하여 해당 토큰이 있다면 로그아웃된 토큰이므로 리소스에 ..
-
workflow 리팩토링 프로젝트(SpringBoot,JPA,MySQL)
[JWT+Redis]Redis를 이용해 최신 JWT만 이용하게 하기 + accessToken 만료시 재발급 + JWT 로그아웃 - 1
JWT를 구현하는 중에 문제가 생겼다. JWT는 만료시킬 수 없어 재사용하거나 계속 발급해주는 방법이있는데 재사용은 보안문제가 있어 로그인 API접근시 마다 새로운 토큰을 발급해주는 방법을 사용했었다. 나는 accessToken과 refreshToekn을 모두 재발급 해주는데 accessToken만료시에도 refreshToken 검증후 accessToken을 재발급 해주는데 이때 refreshToken도 함께 재발급이 된다. 그렇다면 계속해서 발급하는 토큰들 어떻게 되는거지? 유효시간이 만료되서 사용불가능하게 되지않으면 이전에 발급한 토큰들로도 계속 로그인이 가능하다. accessToken의 경우 유효시간이 짧지만 refreshToken의 경우는 유효기간이 길어 문제가 될 수 있다. 그렇다고 refres..