저번 포스팅에서는 세션 기반 인증 방식의 문제점에 대해서 알아봤습니다. https://doreree.tistory.com/27 세션 인증 방식과 토큰 인증 방식 하나의 서버로 이루어진 단일 서버 환경에서는 Session을 이용한 로그인 유지에 대해 불편함을 못 느꼈습니다. 하지만, Scale Out을 통해 백엔드 서버를 총 3대를 운영하고 있는 상태에서 새로운 사 doreree.tistory.com 서버 요청에 따라 Scale Out 했을 경우 세션 불일치 문제가 발생합니다. 이번 포스팅에서는 Spring Boot를 통한 코드 작성과 직접 서버에 배포하는 과정을 통해 어떻게 세션 불일치 문제가 발생하는지 알아보도록 하겠습니다. 세션관리 테스트 환경 서비스는 Spring Boot로 작성하였습니다. Spri..
하나의 서버로 이루어진 단일 서버 환경에서는 Session을 이용한 로그인 유지에 대해 불편함을 못 느꼈습니다. 하지만, Scale Out을 통해 백엔드 서버를 총 3대를 운영하고 있는 상태에서 새로운 사용자가 Server1에 접속하여 세션이 생성되었습니다. 이때 Server2, Server3는 해당 회원의 세션 정보를 알지 못합니다. 그럼 유저는 요청을 보낼 때마다 매번 인증을 위해 다시 로그인을 해야하는 문제가 발생합니다. 이렇게 서버 간에 세션을 공유하지 않는 상태를 Session 불일치 문제라고 합니다. Session 불일치 문제 해결하기 1. Sticky Session 방식 특정 유저의 요청을 최초로 그 요청을 처리해준 서버로만 보내주는 방식 예를 들어, 사용자가 Server1으로 세션을 생성하..
지난번 포스팅에서 JWT 토큰의 유효성 검사 로직을 처리하기 위해서 Filter와 Interceptor 중 어떤 것을 사용해야하는지 알아보았습니다. https://doreree.tistory.com/25 [Spring] Interceptor 와 Filter의 개념 및 차이점 JWT를 이용한 회원 인증같은 공통된 로직을 처리하기 위해 Spring에서 어떤 것을 사용해야하는지 의문이 들었습니다. Spring에서는 공통된 작업을 처리하여 중복 코드를 제거할 수 있도록 많은 기능 doreree.tistory.com 회원 API에 공통적으로 들어가있는 JWT 토큰의 유효성 검사 로직에 대한 중복 코드 문제를 Spring Interceptor를 이용해서 해결하려고 합니다. 아래는 중복 코드에 대한 예시입니다. 해당..
JWT를 이용한 회원 인증같은 공통된 로직을 처리하기 위해 Spring에서 어떤 것을 사용해야하는지 의문이 들었습니다. Spring에서는 공통된 작업을 처리하여 중복 코드를 제거할 수 있도록 많은 기능들을 제공하는데, 대표적인 필터(Filter) 와 인터셉터(Interceptor)의 개념과 차이에 대해 알아보려고 합니다. Filter (필터) 필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능입니다. 디스패처 서블릿 (Dispatcher Servlet)에 요청이 전달되기 전/후 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공합니다. 여기서 Dispatcher Servlet 이란 !? 스프링에 가장 앞단에 존재하는 Front Controller로 모든 클라이언트..
최근 소프트웨어 아키텍쳐 추세는 더 이상 하나의 통일체가 아니라 특정 애플리케이션이 설계 의도대로 기능하도록 함께 작동해야 하는 수십 또는 수백 개의 느슨하게 결합된 컨테이너화된 요소로 구성한다. 쿠버네티스같은 컨테이너 오케스트레이션 컨테이너화 된 애플리케이션 서비스를 정리하고 상태 모니터링, 장애 조치 절차를 자동화 한다. 각 서비스가 컨테이너화 되어 나누어지면서 서로 다른 서비스가 통신하고 비동기식으로 작업을 해야하는 MQ같은 솔루션들이 필수적이라고 할 수 있다. MQ :: Message Queue 서로 다른 소프트웨어 구성 요소 또는 시스템 간의 비동기 통신에 사용되는 기술. 안정적이고 확장 가능한 방식으로 응용 프로그램, 서비스 및 장치 간에 메시지를 교환할 수 있다. 시스템의 서로 다른 부분이 ..
티켓팅 대기열 처리 티켓 예약 서비스에 대한 팀 프로젝트를 진행중이고 개발자라면 당연히 떠오르는 한 가지의 생각.. 티켓팅 일정 시간이 되었을 때 대규모 트래픽 처리에 대한 고민이 있다. 고민만 해보고 한 번도 해본적이 없는 트래픽 테스트에 대해 고민했던 것들과 어떻게 해결했는지 그 과정을 적어보려고 한다. 솔루션 선택 MQ와 같은 비동기 메세지 큐를 사용하여 들어온 수만건의 대한 요청을 순차적으로 큐를 통해 처리를 해주어야 한다고 생각했고 구글 검색을 통해 여러가지 방법을 알게 되었다. 1. Kafka, Rabbit MQ와 같은 MQ 사용 2. Redis SortedSet 자료구조를 이용한 대기열 기능 구현 Kafka, Rabbit MQ와 같은 MQ 사용 장점 - 미들웨어를 활용하므로써 정확한 MQ 시..
우리가 개발을 하면서 하루에도 수십번 말하고 듣는 말이 있습니다. “로그 확인해봤어??” 로그 (Log) 여기서 로그란 무엇일까요?? 로그(Log)란 시스템이 동작할 때 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미합니다. 예를 들어 우리가 회원가입을 한다고 가정해보았을 때, Spring 코드로는 아래와 같은 로직이 있겠죠?? @PostMapping public ResponseEntity join(@RequestBody MemberDto member){ } 위와 같은 로직에서 member 정보가 잘 넘어왔는지 확인하기 위하여 우리는 안에 담긴 내용들을 확인하는 작업들을 하는데 System.out.println() 을 사용하죠. 하지만 이 방법은 잘못된 방법입니다. 잘못된 로그 찍는 ..