본 포스팅은 ProviderManager와 AuthenticationProvider가 무엇인지 이해하고 이들을 이용해 인증하는 방법을 공부합니다. ProviderManager ProviderManager는 이름에서도 알 수 있듯이 provider를 관리하는 manager클래스 입니다. 예를 들어, 어떤 일을 하는데 작업을 하는 사람만 있다면 작업자들은 어떤 일을 누가 해야 할지 모를 수 있는데, 작업을 관리하는 관리자가 있다면 어떤 작업을 어떤 사람이 할지 지시를 해줌으로써 좀 더 효율적으로 작업을 할 수 있습니다. 이처럼 인증 작업을 어떤 클래스가 할지 정해주는 역할을 하는 것이 ProviderManager입니다. 즉, 인증 작업을 관리하는 매니저라고 생각할 수 있습니다. ProviderManager는..
본 포스팅은 Spring Security의 전체적인 흐름과 FilterChain이 어떻게 동작하는지 이해하는 것을 목표로 합니다. 우선 클라이언트가 HTTP 요청을 했을때 security가 어떻게 작동하는지 흐름부터 살펴본 뒤, 하나씩 알아보겠습니다. 클라이언트의 HTTP 요청이 서버에 도착합니다. "DelegatingFilterProxy"라는 서블릿 필터가 해당 요청을 가장 먼저 받아 "FilterChainProxy"에게 요청을 처리하도록 위임합니다. "FilterChainProxy"는 자신이 관리하고 있는 여러개의 "SecurityFilterChain"에게 순서대로 요청을 넘깁니다. 요청에 적합한 "SecurityFilterChain"내의 filter가 차례대로 실행되며, 각각의 filter는 보안(..
Session 관련 문제가 발생해 프로젝트의 Security 설정 부분을 살펴보다 Spring Security 부분을 공부를 해야겠다는 생각이 들었다. 그래서 거대한 Spring Security 부분을 차근차근 정리하면서 공부해보려고 한다. SecurityContextHolder SecurityContextHolder는 인증된 사용자의 정보를 저장하고 있는 저장소이다. SecurityContextHolder의 구조를 사진으로 보면 SecurityContext를 감싸고 있고 SecurityContext 안에 Authentication(인증)이 저장되어 있다. SecurityContextHolder 설정 1. SecurityContext securityContext = SecurityContextHolder..
OpenSearch OpenSearch의 Query DSL과 Redis의 Sorted Set 자료구조를 이용해 간단히 검색 순위를 구현해 봤는데 이전에 조사했던 다양한 순위 알고리즘이 존재하는데 일단은 알고리즘을 적용하지 않고 OpenSearch에 저장되어 있는 검색 데이터의 개수만을 이용해 검색 순위 기능을 구현해 봤다. 이번 포스팅은 검색 순위를 구현하기 전 OpenSearchClient의 Query DSL을 이용해 OpenSearch에 저장된 데이터를 가져오는 방법에 대해 알아보자. OpenSearch에서 데이터를 가져오는 방법 중 여러가지 방법이 존재했지만 OpenSearch에 대한 레퍼런스가 부족했기 때문에 삽질을 많이 했다. 크게 java에서는 RestHighLevelClient, OpenSe..
Redis Sorted Set Redis의 Sorted Set(ZSET) 자료구조에 대해 알아보자. Sorted Set은 저장된 데이터의 정렬된 순서를 가지는 집합 데이터 구조이다. Set 구조이기 때문에 각 멤버(member)에 대해 고유한 식별자(key)와 함께 점수(score)를 지정하여 데이터를 저장한다. 아래 그림을 보면 구조를 파악하기 쉽다. key안에 고유한 member가 존재하고 각 member에 대한 점수가 있다. 만일 동일한 점수가 존재할 경우 member의 사전순으로 정렬을 한다. Sorted Set 특징 정렬된 순서: Sorted Set의 멤버는 각 멤버의 점수를 기준으로 오름차순에 따라 정렬되어 저장된다 고유한 멤버: Sorted Set은 각 멤버를 식별자로 구분할 수 있어 중복되..
새로운 메서드를 추가하는데 기존에 존재하는 코드와 중복되는 부분이 많아 코드를 재사용하기 위해 BiFunction이라는 것을 사용할 수 있다는 것을 알게 되었다. 그래서 오늘은 BiFunction에 대해 알아보려고 한다. BiFunction BiFunction은 Java 8에서 도입된 함수형 인터페이스 중 하나로, 두 개의 입력을 받아 결과를 반환하는 함수를 모델링합니다. BiFunction 인터페이스 인터페이스에서 T와 U는 함수의 입력 타입이고, R은 반환 타입이다. BiFunction을 사용하는 간단한 예제 코드를 살펴보자. BiFunction biFunction = (x, y) -> x + y; String biFunctionResult = biFunction.apply("Hello", " Wor..