1. Cache란 ? 한번 읽은 데이터를 임시로 저장하고 필요에 따라 전송,갱신,삭제하는 기술 2. Cach를 쓰는 이유? 보통 데이터를 서버의 메모리에 저장하게되어 디스크에서 정보를 얻어오는 것보다 훨씬 빠른 I/O 성능을 얻을 수 있다 하지만 서버가 다운되거나 재부팅되는 경우 사라지는 휘발성의 성격을 가지고 있음으로 정보를 임시적으로 보관하고 그 정보에 빠르게 접근하기 위한 용도로 사용된다 서버간 불필요한 트래픽을 줄일 수 있다 웹어플리케이션 서버의 부하를 감소시킬 수 있다 어플리케이션의 빠른 처리성능(조회)를 확보할 수 있다 3. Cache를 상요할 때 주의할 점 캐싱하려는 정보, 캐싱 정보의 유효기간(TTL-Time To Live), 캐싱정보의 갱신시점 무작정 많은 정보를 캐싱하는 것이 좋은 것이..
1. super() 부모 생성자를 호출한다 즉, 상속받은 부모 생성자를 호출하여 사용할 수 있다 인수를 넣으면 해당 인자로 부모 생성자가 초기화 된다 class Parent { int a; Parent() { a = 10; } Parent(int n) { a = n; } } class Child extends Parent { int b; Child() { ① //super(40); b = 20; } void display() { System.out.println(a); System.out.println(b); } } public class Inheritance04 { public static void main(String[] args) { Child ch = new Child(); ch.display()..
스프링에서 제공하는 폼 로그인을 사용하는 경우 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 필터가 스프링 빈의 이름을 참조..
Merge와 Rebase의 차이점 Master에서 bts-image 브랜치를 생성하여 2번의 커밋을 하였고 그 동안 Master에서도 한번의 커밋이 이루어져있는 상태인 경우 git merge bts-image를 실행하였을 때 bts-image 브랜치는 그동안의 모든 커밋 로그를 유지한 채 master의 Head에 새로 추가된다 git rebase bts-image를 실행하였을 때 bts-image 브랜치를 베이스로 그동안의 모든 커밋을 재정렬한다 같은 커밋 메세지여도 rebase를 할 경우 master 커밋 트리 중간에 재정렬되어진다 보통 Master에 작업 내용을 병합할 때 Squash merge를 사용하여 커밋로그를 깨끗하게 관리한다 하지만 모든 커밋 하나하나가 master에 정리되어 있길 원한다면 ..
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..