부트캠프 68일차 후기
오늘로 부트캠프 측에서 준비한 모든 면접 문제를 훑어보았다.
아는 문제들도 많았지만, 혹시나 내가 모르거나 잘못 알고 있는 것이 있는지 확인 할 겸 일일히 구글링을 해서, 되도록 하나의 게시글이 아닌 여러 게시글을 돌아다니면서 개념을 정리하였다.
지금까지 Spring Security를 사용할 때에는 구조를 잘 모르고 사용하였는데 이번에 대강의 구조와 흐름을 알게 되었다.
1. 사용자가 로그인 정보와 함께 인증을 요청한다.
2. AuthenticationFilter가 요청을 가로 챈 뒤, UsernamePasswordAuthenticationToken의 인증용 객체를 생성한다.
-UsernamePasswordAuthenticationToken은 Username과 Password를 사용하는 가장 기본적인 Authentication 구현체이다.
-AbstractAuthenticationToken을 상속받아 내부에 권한을 저장하는 authorities, 검증완료를 판단하는 authenticated 상태를 저장한다.
3. AuthenticationManger의 구현체인 ProviderManager에게 생성한 인증 토큰을 전달한다.
4. AuthenticationManager는 등록된 AuthenticationProvider를 조회하여 인증을 시도한다.
5. 실제 DB에서 사용자 인증정보를 가져오는 UserDeatailService에 사용자 정보를 전달한다.
6. 넘겨받은 사용자 정보를 토대로 DB에서 찾은 사용자 정보인 UserDatails 객체를 만든다.
- UserDetailsService는 loadUserByUsername 메소드를 통해 UserDetails 객체를 반환한다.
7. AuthenticationProvider는 UserDetails를 넘겨받고 사용자 정보를 비교한다.
8.인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환한다.
9. 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환된다.(인증완료)
10. Authentication 객체를 SecurityContext에 저장한다.
11. DispatcherServlet으로 요청을 넘긴다.
이 다음엔 Spring에서 사용하는 Filter와 Interceptor 그리고 AOP의 각각의 특징과 차이점에 대해 배웠다. 예전에 헷갈려서 대충 넘어간 부분이였지만 면접에서 나올수 있기 때문에 이번에 확실히 하였다.
1. Filter
- DispatcherServlet 이전에 Request는 filter 영역을 거친다.
- 지정된 앞단에서 요청 내용을 변경하거나 여러가지 체크를 수행한다.
- 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 수행할 수도 있다.
- 인코딩 변환 처리, XSS 방어 등에 대한 요청에 대한 처리를 위햇 사용한다.
2. Interceptor
- Filter가 스프링 컨텍스트 외부에 존재한다면 인터셉터는 DispatcherServlet이 Controller를 호출하기 전, 후로 끼어든다.
- 그렇기에 스프링의 모든 Bean 객체에 접근할 수 있다.
- Interceptor는 여러 개를 사용할 수 있고, 로그인 체크, 권한체크, 프로그램 실행시간 계산작업, 로그확인 등의 업무를 처리한다.
3. AOP
- AOP는 중복을 줄일 수 없는 부분을 줄이기 위해 종단면에서 바라보고 처리한다.
- Interceptor나 Filter가 주소로 대상을 구분해서 걸러낸다면 AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.
- '로깅', '트랜잭션', '에러 처리' 등 비즈니스 단의 메소드에서 조금 더 세밀하게 조정할 때 사용한다.
내일부터 가족끼리 해외여행을 간다. 그래서 목~금 이틀간의 부트캠프 일지는 없다. 다음 주는 튜터님과 면접준비를 하자