스프링에서 제공하는 폼 로그인을 사용하는 경우 1. 로그인 2 UsernamePasswordAuthenticationFilter 에서 UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장 3. 순차적으로 필터를 거친 후 마지막 필터인 FilterSecurityInterceptor에서 권한 인가 여부 결정 후 리다이렉트 하지만 JWT를 사용하는 경우 JWT를 가져와 인증하는 필터를 커스터마이징 하여야 한다 1. 로그인 2. JwtAuthenticationFilter에서 토큰 추출 & 토큰 유효성 검사 & UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장 ..
이 세가지의 공통점 - 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이다 1. Filter 서블릿 단위에서 실행된다 DispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다 스프링 시큐리티에서 서블릿의 DeligatingFilterProxy가 실행되어 FilterChainPorxy에게 요청을 인가하는 것이 필터의 사용 예이다 자원의 처리가 끝난 후 에 응답내용에 대해서도 변경하는 처리를 할 수 있따 실행 메소드에는 inti(), doFilter(), destroy() 가 있다 2. Interceptor 요청에 대한 작업 전/후로 가로채어 실행된다 필터와 달리 스프링의 Disp..
스프링 시큐리티 기초 1. 스프링 시큐리티란 ? 스프링 기반의 어플리케이션의 보안(인증과 인가)을 담당하는 프레임워크 filter 기반으로 동작하므로 spring MVC와 분리되어 관리 및 동작 2. 스프링 시큐리티 주요 용어 Principal(접근 주체): 보호된 대상에 접근하는 유저 Authentication(인증): 현재 유저가 누구인지 확인하는 과정 Autherize(인가): 인증된 유저가 어떤 서비스 또는 페이지에 접근할 수 있는 권한이 있는지 검사 권한: 인증된 주체가 애플리케이션의 동작을 수행할 수 있도록 허락되었는지를 결정 스프링 시큐리티 아키텍처 정리 브라우저에서 로그인 요청이 서블릿 컨테이너로 들어온다 서블릿 필터의 DeligatingFilterProxy 필터가 스프링 빈의 이름을 참조..
API GateWay란? MSA에서 언급되는 컴포넌트 중 하나이며, 모든 클라이언트 요청에 대한 end point를 통합하는 서버이다 그리고 인증 및 권한, 모니터링, logging 등 추가적인 기능 또한 수행한다 Zuul이란? 모든 마이크로서비스에 대한 요청을 받아들이고 라우팅하는 프록시 API GateWay 기능을 수행하는 라이브러리 클라이언트(FrontEnd)와 서버(BackEnd) 사이의 출입문 역할 주로 라우팅 기능을 담당 횡단 관심사처리에 유리 - 모든 부분에서 필요로 하는 일들(보안, 인증 등) Zuul의 모든 api 요청은 HystrixCommand로 구성되어 전달된다 api요청이 들어오면 전달 서버를 Eureka server에서 찾아 ribbon을 통해 로드밸런싱 수행하여 요청을 실행한다..
Feign은 넷플릭스에서 개발된 Http client binder이다 사용하기 위해서는 interface를 작성하고 어노테이션을 선언하기만 하면된다 마치 spring data jpa에서 실제 쿼리를 작성하지 않고 interface만 지정하여 쿼리 실행 구현체를 자동으로 만들어주는 것과 유사하다 이번 시간에는 RestTemplate이 아닌 Feign을 사용하여 외부 API를 호출하는 실습을 해보도록하겠다 실습해보기 1. 라이브러리 의존성 추가 compile('org.springframework.cloud:spring-cloud-starter-openfeign') // To use Feign 2. 메인 클래스에 @EnableFeignClients 어노테이션 추가 @SpringBootApplication @E..
Ribbon를 소개하는 이전 포스팅의 마무리에서 Eureka와 함께 사용하면 로드밸런싱이 더 효과적이라고 언급하였다 Eureka란 무엇이고 이를 직접 사용하여 실습을 해보도록하자 1. Eureka란? 서버가 새롭게 시작되면 그것을 감지하여 목록에 자동으로 추가하고, 서버가 종료되면 자동으로 목록에서 삭제하는 기능을 제공하는 라이브러리 Service Registry기능 수행 컴퓨터 네트워크에서 장치 및 서비스를 자동으로 검색(감지)하여 정보를 담고있는 데이터베이스 - Dynamic Service Discovery 클라우드의 전화번호부라고 생각하면 된다(유레카의 경우 유레카 클라이언트들의 정보가 저장) DiscoveryClient Spring-cloud에서 서비스 레지스트리 사용 부분을 추상화한 인터페이스 ..
로드밸런서에 대한 사전지식 쌓기 내가 만든 서비스 사용자가 두명인 경우 서버는 여유롭게 사용자가 원하는 결과를 응답해줄 수 있다 하지만 내가 만든 서비스가 대박나서 동시사용자가 수천만명이 되었을 경우 서버는 터져버리게된다....!!!!! 이러한 문제를 해결하기 위한 두가지 방식 Scale - up : 서버가 더 빠르게 동작하기 위해 하드웨어(cpu 등)의 성능을 올리는 방법 Scale - out : 하나의 서버가 아닌 여러대의 서버를 만들어 일을 나눠 하는 방법 로드밸런싱이란? 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스 , 즉 스케일 아웃의 방식을 사용한 트래픽 분산처리 서비스 L4 ..
스프링 클라우드가 제공하는 기능 중 Circuilt Breaker라는 기능이 있었다 이 기능은 어떤일을 하며 해당 기능을 제공해주는 Hystrix를 사용하여 실습을 해보는 시간을 가지도록 하자 장애 연쇄란? Supplier 서버에 장애가 생겨 타임아웃이 발생할 경우 Client 서버는 타임아웃이 해결될 때까지 응답이 밀리게된다. Supplier 서버의 응답이 밀리는 동안 Client 서버에도 요청이 계속 싸여 Client 서버까지 장애가 발생하는 것을 장애 연쇄라고 한다. 이러한 장애 연쇄 상황이 발생하지 않도록 circuit breaker를 두어 장애 전파를 막을 수 있다 나는 스프링 클라우드에서 제공하는 넷플릭스 오픈소스인 Hystrix 라이브러리를 사용하기로 하였다 Hystrix의 Circuit B..