목록분류 전체보기 (33)
기록하자..
서블릿 인증 아키텍처 SecurityContextHolder Spring Security의 인증 모델의 핵심은 SecurityContextHolder이다. SecurityContextHolder는 이름에서도 알 수 있듯이 SecurityContext를 가지고 있다. 출처 Spring 공식문서 SecurityContextHolder는 어떤 사용자가 인증되었는지에 대한 정보들을 저장하고 있다. SpringSecurity는 이 SecurityContextHolder가 어떤 방식으로 채워지는지 알 수 없다. 만약 값을 가지고 있다면 현재 인증된 사용자를 가져올 수 있다. SecurityContext context = SecurityContextHolder.createEmptyContext(); // 1 Auth..
불변객체란? 불변객체는 객체가 생성된 후 객체 내부의 상태가 일정하게 유지되는 객체를 말한다. 이는 객체가 변수에 할당되면, 우리는 어떤 방법으로도 객체에 대한 참조를 업데이트하거나 내부 상태를 변경할 수 없는 것을 말한다. 또한 불변객체는 객체의 라이프사이클 동안 항상 같은 행위를 하는 것을 보장할 수 있다. final 키워드 자바에서 final 키워드를 사용해서 불변성을 만족시킬 수 있다. 자바에서 변수들은 기본적으로 mutable하다. 이는 변수가 들고 있는 값을 변경하는 것이 가능하다는 것이다. 변수를 선언할 때 final 키워드를 사용하게 되면 Java 컴파일러는 변수의 값을 변경하는 것을 허용하지 않고, 컴파일 타임에 에러를 발생시킨다. 이렇게 불변 객체가 가진 특성은 thread-safe 하..
FilterChainProxy 이전에 DelegatingFilterProxy에서 클라이언트로부터 들어온 요청 처리를 위임할 대상을 FilterChainProxy로 저장해 둔다고 했다. 이 FilterChainProxy는 무엇일까? FilterChainProxy는 스프링 시큐리티에 의해 제공되는 특별한 필터인데, SecurityFilterChain을 통해 Filter 구현체들에게 위임할 수 있도록 해주는 필터이다. FilterChainProxy도 빈이기 때문에 DelegatingFilterProxy에 래핑되어 있다. 위 코드를 보면 DelegatingFilterProxy가 Filter 타입의 delegate를 포함하는 것을 볼 수 있는데 이게 FilterChainProxy이다. initDelegate 메서..
이전에 스프링 시큐리티를 사용하면 FilterChain에서 DelegatingFilterProxy가 등록이 되는 것을 확인할 수 있었는데, 이게 무엇인지 알아보자. (혹시 Filter에 대해 모르면 해당 글을 보고 오면 좋습니다.ㅎㅎ;) https://coding-by-c.tistory.com/44 스프링 시큐리티 - Filter 스프링 시큐리티에 대해 학습한 것을 기록하고 싶었는데, Filter부터 정리하고 싶어 먼저 Filter에 대한 정리를 하고자 한다. Filter 스프링 시큐리티를 시작하기 전에, 필터에 대해 먼저 알아야 한다 coding-by-c.tistory.com DelegatingFilterProxy 스프링은 Filter 인터페이스 구현체인 DelegatingFilterProxy를 제공해..
스프링 시큐리티에 대해 학습한 것을 기록하고 싶었는데, Filter부터 정리하고 싶어 먼저 Filter에 대한 정리를 하고자 한다. Filter 스프링 시큐리티를 시작하기 전에, 필터에 대해 먼저 알아야 한다. 스프링 시큐리티의 서블릿 지원은 Servlet Filter에 기본을 두고 있기 떄문에 Filter의 역할에 대해 먼저 아는 것이 중요하다. 우선은 Spring Security의 DelegatingFilterProxy에 가기 전 과정을 학습해보자. 어떤 애플리케이션의 공통 관심사항을 처리할 때, 특히 웹 개발에 있어서 Filter나 Interceptor를 사용하는 것은 좋은 방법이라고 생각한다. 특히 Filter는 메서드의 파라미터로 ServletRequest나 ServletResponse를 가지고..
Spring을 통해 웹 요청 처리를 하게 되면 사용자에게 동적인 웹페이지를 제공한다. 이는 Spring이 Servlet을 이용해 웹 요청을 처리한다는 것이다. Spring으로 웹 요청 처리를 하게 되면 SpringMVC의 DispatcherServlet을 사용하고 웹 요청 처리와 관련된 Spring 빈들의 주입을 받아서 요청을 처리하게 된다. 웹 요청 처리 과정을 알기 위해 먼저 Servlet에 대해 간단히 알아보자. Servlet 먼저 Servlet의 사전적의미는 다음과 같다. Servlet은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다. (뭔가 머리로 이해하기 힘들다..) 이해하기 쉽게 설명하기 위해, 먼저 HTTP 요청을 가져와보자. 밑의 그림은 Tecobl..
람다식 학습할 것 람다식 사용법 함수형 인터페이스 Variable Capture 메소드, 생성자 레퍼런스 람다식이란? 자바는 함수적 프로그래밍을 위해 자바 8부터 람다식을 지원하기 시작했다. 람다식은 익명 함수를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식을 통해 컬렉션의 요소를 필터링하거나 매핑하게 되면서 자바 코드는 훨씬 간결해지게 되었다. 람다식은 매개 변수를 가진 코드 블럭 형태이지만, 런타임 시에는 익명 구현 객체를 생성한다. 람다식은 (매개변수) -> {실행코드} 형태로 작성이 된다. Runnable runnable = () -> { ... }; 마치 함수 정의 형태를 띄고 있지만 런타임 시에 인터페이스의 익명 구현 객체로 생성된다. 람다식 사용법 함수적 스타일..
제네릭 학습할 것 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메서드 만들기 Erasure 제네릭 Java 5부터 제네릭 타입이 새로 추가되었다. 제네릭 타입을 이용하게 되면서 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있게 되었다. 제네릭은 클래스와 인터페이스, 그리고 메서드를 정의할 때 타입을 파라미터로 사용할 수 있도록 한다. 제네릭을 사용하는 이점은 다음과 같다. 컴파일 타임에 타입을 체크할 수 있다. 컴파일 타임에 타입을 체크하면서 객체의 타입 안정성을 높이고 실행 시간에 에러가 나는 것이 아닌 컴파일시 타입을 체크해 에러를 사전에 방지할 수 있다. 타입 변환을 제거한다. 비제네릭 코드는 불필요한 타입변환을 하기 때문에 프로그램 성능에 영향을 미친..