모르지 않다는 것은 아는것과 다르다.

전체 글 224

Security Config

스프링 시큐리티 의존성 추가 스프링 시큐리티 의존성만 추가해도 서버가 기동되면 스프링 시큐리티의 초기화 작업 및 보안 설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동되어 작동한다. 모든 요청은 인증 되어야 자원에 접근이 가능하다. 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다. 기본 로그인 페이지를 제공한다. 기본 계정을 한개 제공한다. WebSecurityConfigurerAdapter 스프링 시큐리티의 웹 보안 기능을 초기화 및 설정하는 역할을 한다. HttpSecurity 를 생성한다. -> HttpSecurity 는 세부적인 보안 기능을 설정할 수 있는 API 를 제공한다. HttpSecurity는 위와 같이 인증 API..

Spring Security 2022.02.28

SecurityContextHolder 와 FilterChainProxy

FilterChainProxy springSecurityFilterChain 의 이름으로 생성되는 필터 빈이며, Security Filter 들을 관리하는 빈이다. DelegatingFilterProxy 으로 부터 요청을 위임 받고 실제 보안 처리한다. 스프링 시큐리티 초기화 시 생성되는 필터들을 관리하고 제어한다. FilterChainProxy는 요청에 따라 적합한 SecurityFilterChain 을 사용한다. 기본 전략으로 DefaultSecurityFilterChain을 사용한다. -> DefaultSecurityFilterChain 는 Filter 리스트를 가지고 있다. 사용자의 요청을 필터 순서대로 호출하여 전달한다. 사용자정의 필터를 생성해서 기존의 필터 전.후로 추가 가능하다. 아래에서 ..

Spring Security 2022.02.28

SecurityContextHolder, AuthenticationManager, ThreadLocal

SecurityContext, SecurityContextHolder SecuuryContext Authentication 제공한다. Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스다. ThreadLocal 에 저장되어 아무 곳에서나 참조가 가능하도록 설계되어 있다. 인증이 완료되면 HttpSession 에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다. SecurityContextHolder SecurityContext를 제공하고, 기본적으로 ThreadLocal을 사용한다. 위의 정보들은 같은 쓰레드내에서 공유하는 정보이다. -> 만약에 쓰레드가 달라지면? -> SecurityContextHold..

Spring Security 2022.02.28

스프링 시큐리티 아키텍처

Spring Security Architecture Spring Security Architecture 를 그림으로 나타내면 아래와 같다. 요청이 들어오면 서블릿 필터중에 DeligationFilterProxy 라는 필터가 FilterChainProxy를 SecurityFilterAutoConfiguration 이라는 이름의 빈으로 등록 한다. FilterChainProxy 는 요청에 따라 적합한 필터들이 체인형태로 구성된 SecurityFilterChain 을 사용한다. -> 이는 WebSecurity 에 의해서 만들어진다. 이러한 필터들이 사용하는 객체들이 있는다. 인증 -> AuthenticationManager 인가 -> AccessDecisionManager AuthenticationManage..

Spring Security 2022.02.28

템플릿 콜백 패턴 (토비의 스프링 3장)

Template Callback Pattern 전략 패턴의 변형이다. 정확히는 전략을 익명 내부 클래스로 구현한 전략 패턴이라고 할 수 있다. 스프링 3대 프로그래밍 모델 중 하나인 DI 에서 사용하는 특별한 형태의 전략 패턴이다. 여기서 전략 패턴의 컨텍스트를 템플릿이라 부르고, 익명 내부 클래스로 만들어지는 오브젝트를 콜백이라고 부른다. 전략 패턴과 동일한가? -> 거의 모든 것이 동일하나, 전략을 익명 내부 클래스로 정의해서 사용하는 것에서 차이가 있다. 주로 try/catch/finally 블록을 사용하는 코드에 사용된다. 동작 흐름 클라이언트의 역할은 콜백 오브젝트를 만들고, 콜백이 참조할 정보를 제공한다. 만들어진 콜백은 클라이언트가 템플릿의 메소드를 호출할 때 파라미터로 전달된다. 템플릿은 ..

Books 2022.02.28

다형성

다형성이란? 다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다. 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다. 다시말해서 다형성이란, 하나의 객체 혹은 메소드가 여러 타입을 참조할 수 있음을 의미합니다. 다형성은 크게 객체의 다형성과, 메소드의 다형성으로 구분됩니다. 객체 다형성 객체 다형성은 객체가 상속된 부모 객체의 인스턴스로 할당될 수 있음을 의미합니다. class TV { // 메소드 } class SmartTV extends TV { // 메소드 } 위와 같이 SmartT..

객체지향 2022.02.28

디자인 패턴

디자인 패턴 자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 가장 최적의 방법으로 개발할 수 있도록 도와준다. 언어에 종속적이지 않고, 다양한 프레임워크에 적용시킬 수 있다. 특정 영역에 종속적이지 않고 일반적으로 활용할 수 있다. 좋은 설계에 도움이 된다. Gof 디자인 패턴 소프트웨어를 설계 할 때는 기존에 경험이 매우 중요하다. -> 그러나 모든 사람들이 다양한 경험을 가지고 있을 수는 없다. 이러한 지식을 공유하기 위해서 나온 것이 GOF 의 디자인 패턴이다. 객체지향 개념에 따른 설계 중 재사용할 경우 유용한 설계를 디자인 패턴으로 정리 해둔 것이다. Gof 의 디자인 패턴은 총 23개 이며, 이를 잘 이해하고 활용한다면, 경험이 부족하더라도 좋은 소프트웨어 설계가 가능하다. 디자인 패턴의..

객체지향 2022.02.28

SOLID

SOLID SOLID 란? 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리했다. SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP: 단일 책임 원칙(single responsibility principle) 한 클래스에서 여러 기능을 제공하게 되면 유지보수가 어려움이 있다. 그렇게 때문에, 한 클래스는 하나의 ..

객체지향 2022.02.28

POJO

POJO 란? Plain Old Java Object 의 약자이다. 마틴 파울러가 위의 이름을 지었는데, 이유는 단순한 개체에 걸맞는 마땅한 이름이 없기 때문이라고 한다. 해석해보면, 오래된 방식의 간단한 자바 오브젝트라는 뜻이다. 객체지향적인 원리에 충실하면서 특정 환경과 규약에 종속되지 않아, 필요에 따라 재사용이 될 수 있는 방식으로 설계된 오브젝트를 말한다. 쉽게 말하면, 특정 기술과 환경에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말한다. Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. POJO의 장점 특정 기술과 환경에 종속적이지 않은 코드는 깔끔하다. 자동화된 테스트에 유리하다. 객체지향..

객체지향 2022.02.28

refactoring

이해하기 힘든 이름 Mysterius Name 깔끔한 코드에서 가장 중요한 것 중 하나가 바로 “좋은 이름”이다. 함수, 변수, 클래스, 모듈의 이름 등 모두 어떤 역할을 하는지 어떻게 쓰이는지 직관적이어야 한다. 사용할 수 있는 리팩토링 기술이다. 함수 선언 변경하기 (Change Function Declaration) 변수 이름 바꾸기 (Rename Variable) 필드 이름 바꾸기 (Rename Field) 함수 이름 바꾸기 Change Function Declaration 좋은 이름을 가진 함수는 함수가 어떻게 구현되었는지 코드를 보지 않아도 이름만 보고도 이해할 수 있다. 좋은 이름을 찾아내는 방법? 함수에 주석을 작성한 다음, 주석을 함수 이름으로 만들어 본 다. 함수의 매개변수는 함수 내부..

객체지향 2022.02.28