-
리액티브 시스템과 리액티브 프로그래밍IT 서적/스프링으로 시작하는 리액티브 프로그래밍 2024. 2. 16. 16:32
리액티브 시스템이란? 리액티브 시스템이란? 반응을 잘하는 시스템이다. 주요 특징 비동기 메시지 기반의 통신을 주로한다. 시스템의 작업량이 변화하더라도 일정한 응답을 유지한다. 시스템에 장애가 발생하더라도 응답성을 유지한다. 리액티브 프로그래밍이란? 리액티브 프로그래밍은 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델이다 리액티브 프로그래밍 코드 구성 Publisher 입력으로 들어오는 데이터를 제공하는 역할을 Publisher라고 한다. 발행자, 게시자, 생산자, 방출자 등 여러 가지 용어로 해석된다. Subscriber Publisher가 데이터를 제공하는 역할을 한다면, Subscriber는 Publisher가 제공한 데이터를 전달받아서 사용하는 주체이다. 구독자라고도 불리며 생산자의 의미와 반..
-
ch19 리액티브 앱을 위한 스프링 시큐리티IT 서적/Spring Security In Action 2024. 1. 12. 20:59
# 리액티브 환경에서의 차이점 SecurityContext 구현은 리액티브 애플리케이션에서는 똑같이 작동하지 않는다. SecurityContext는 ThreadLocal에 기반을 두지만 이제 요청당 두 개 이상의 스레드가 사용된다. SecurityContext가 달라졌기 때문에 모든 권한 부여 구성이 영향을 받는다. 권한 부여 규칙은 SecurityContext에 저장된 Authentication에 저장된 Authentication 인스턴스에 의존한다. 따라서 이제 엔드포인트 계층에 적용된 보안 구성과 전역 메서드 보안 기능이 영향을 받는다. 사용자 세부 정보를 검색하는 구성 요소인 UserDetailsService는 하나의 데이터 원본이다. 따라서 사용자 세부 정보 서비스도 리액티브 방식을 지원해야 한..
-
포티투닷 면접 후기면접 2024. 1. 12. 16:07
# 면접 과정 채용 과정은 서류 - 코딩 테스트 - 1차 면접 - 2차 면접 - 최종합격 순서로 진행된다. 면접 일시는 2023.12월 중순 # 서류 (합격) 서류는 크게 어려운 건 없었고 기존에 수행했던 프로젝트와 나의 역할과 같은 이력을 중심으로 작성하였다. # 코딩테스트 (합격) 프로그래머스 기준 2~3 레벨정도 수준의 문제들로 구성돼 있었다. 난이도가 조금 있는 편이라고 느껴졌다. # 1차 면접 (불합격) 난이도 ★ ★ ★ ★☆ CS와 관련된 질문부터 시작해서 기술적인 질문을 모두 주셨다. 질문 내용으로는 차량 구독 서비스란 무엇인가요? GC가 무엇인지? Rest api, RestFul, Rest 라는 단어의 의미는? Auth 2.0의 전체 과정을 설명해주세요. 아마존 S3의 목적은 무엇일까요? ..
-
ch17 전역 메서드 보안: 사전 및 사후 필터링IT 서적/Spring Security In Action 2024. 1. 12. 15:51
# 사전 및 사후 필터링의 필요성 메서드 호출은 허용하면서도 메서드로 보내는 매개 변수가 몇 가지 규칙을 따르는지 확인하고 싶을 수 있다. 메서드를 호출한 후 호출자가 반환된 값의 승인된 부분만 받을 수 있게 하려는 시나리오도 있을 수 있다. 이러한 기능을 필터링이라고 하며 두 가지 범주로 분류한다. 사전 필터링 : 프레임워크가 메서드를 호출하기 전에 매개 변수의 값을 필터링한다. 사후 필터 : 프레임워크가 메서드를 호출한 후 반환된 값을 필터링한다. @PreFilter 어노테이션이 지정된 메서드를 가로채고 정의된 기준에 따라 매개 변수로 제공되는 컬렉션의 값을 필터링한다. 아래의 소스를 참고해보자. @Service public class ProductService { @PreFilter("filterO..
-
ch16 전역 메서드 보안 : 사전 및 사후 권한 부여IT 서적/Spring Security In Action 2024. 1. 11. 16:37
# 전역 메서드 보안 활성화 스프링 시큐리티에서는 웹 애플리케이션과 웹이 아닌 애플리케이션의 권한 부여를 구성할 수 있으며 이를 '전역 메서드 보안' 이라고 부른다. 방법은 크게 두 가지가 있다. 호출 권한 부여 필터링 # 호출 권한 부여의 이해 호출 권한 부여 방식은 메서드를 호출할 수 있는지를 결정하거나 메서드를 호출하도록 허용한 후 호출자가 메서드에서 반환된 값에 액세스할 수 있는지를 결정하는 권한 부여 규칙을 적용하는 것을 말한다. 전역 메서드 보안을 활성화하면 스프링 애스펙트 하나가 활성화된다. 이를 그림으로 나타내면 아래와 같다. 스프링 프레임워크의 구현은 상당수가 AOP(관점 지향 프로그래밍)에 의존한다. 전역 메서드 보안은 애스펙트에 의존하는 스프링 애플리케이션의 많은 구성 요소 중 하나다..
-
어노테이션 생성해서 Bean 컨테이너 생성 자체 관리하기Spring Boot 2024. 1. 10. 18:39
# 어노테이션 생성 어노테이션은 아래와 같이 생성하면 된다. @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE , ElementType.METHOD}) @Import(ImportsBeanSelector.class) public @interface EnableBizHelper { } # Retention (어노테이션의 생명주기를 담당) RetentionPolicy.SOURCE 소스 코드(.java)까지 남아있는다. 컴파일해서 .java -> .class 로 변경되면 .class에서는 해당 어노테이션이 사라지고 어노테이션에 해당하는 소스가 생성 될 것이다.(예시 : @Getter) RetentionPolicy.CLASS 클래스 파일(.class)까..
-
ch10 CSRF 보호와 CORS 적용IT 서적/Spring Security In Action 2024. 1. 8. 15:43
# 스프링 시큐리티의 CSRF 보호가 작동하는 방식CSRF 공격은 사용자가 웹 애플리케이션에 로그인 했다고 가정하며 사용자는 공격자에게 속아서 작업중인 같은 애플리케이션에서 작업을 실행하는 스크립트가 포함된 페이지를 연다.이 사용자는 이미 로그인을 했기 때문에 위조 코드는 이제 사용자를 가장하고 사용자 대신 작업을 수행할 수 있다.CSRF 보호의 시작점은 필터 체인의 CsrfFilter라는 한 필터다.CsrfFilter는 CsrfTokenRepository 구성 요소를 이용해 새 토큰 생성, 토큰 저장, 토큰 검증에 필요한 CSRF 토큰 값을 관리한다. 기본적으로 CsrfTokenRepository는 토큰을 Http 세션에 저장하고 랜덤 UUID로 토큰을 생성한다.그림을 그리면 아래와 같다...
-
ch09 필터 구현IT 서적/Spring Security In Action 2024. 1. 7. 20:07
# 스프링 시큐리티의 필터 스프링 시큐리티의 Http 필터는 일반적으로 요청에 적용해야 하는 각 책임을 관리하며 책임의 체인을 형성한다. # 스프링 시큐리티 아키텍처의 필터 구현 스프링 시큐리티 아키텍처의 필터는 일반적으로 Http 필터다. 필터를 만들려면 javax.servlet 패키지의 Filter 인터페이스를 구현한다. doFilter() 메서드를 재정의해 논리를 구현해야 하고, 이 메서드는 ServletRequest, ServletResponse, FilterChain 매개 변수를 받는다. # 체인에서 기존 필터 앞에 필터 추가 아래의 코드와 같이 addFilterBefore, addFilterAfter 메소드를 통하여 필터를 추가할 수 있다. @Override public void configu..
-
ch08 권한 부여 구성: 제한 적용IT 서적/Spring Security In Action 2024. 1. 4. 22:20
# 권한 부여 방식 권한 부여 방식은 크게 세 가지가 있다. MVC 선택기 : 경로에 MVC 식을 이용해 엔드포인트를 선택한다. 앤트 선택기 : 경로에 엔트 식을 이용해 엔드포인트를 선택한다. 정규식 선택기 : 경로에 정규식을 이용해 엔드포인트를 선택한다. # 선택기 메서드 활용 선택기 메서드를 통해 권한을 부여하는 방식은 아래와 같다. @Override protected void configure(HttpSecurity http) throws Exception { http.httpBasic() ; http.authorizeRequests() .mvcMatchers("/hello/**").hasRole("ADMIN") .mvcMatchers("/ciao/**").hasRole("MANAGER") ; } ..
-
ch07 권한 부여 구성:액세스 제한IT 서적/Spring Security In Action 2024. 1. 4. 17:00
# 권한과 역할에 따라 접근 제한 아래 그림은 회원의 권한과 관련된 세부 프로세스이다. # 사용자의 권한을 기준으로 엔드포인트로의 접근 제한 HttpSecurity 객체에는 다음과 같은 메소드가 존재한다. hasAuthority() - 권한 하나를 지정해서 해당 권한이 있는 사용자만 엔드포인트를 호출할 수 있다. hasAnyAuthority() - 여러 권한 중 하나라도 있어야 엔드포인트를 호출할 수 있다. access() - 아래와 같이 응용해서 사용할 수 있다. (하지만, 코드를 읽고 디버그하기 어려운 단점이 있어서 비추한다.) http.authorizeRequests().anyRequest().access("hasAuthority('WRITE')"); 모든 요청 허용은 아래와 같이 설정한다. @Ov..