면접 후기 - 1

박상훈·2023년 4월 19일
0

면접준비

목록 보기
4/5
  • 처음으로 접힌 면접을 바탕으로 느낀점과 대답을 못했던 기술 질문들을 정리.

1. 느낀점 및 분위기

  • 1) 회사의 생산제품등을 전시한 전시장에서 견학할 수 있었던 기회는 너무 좋았다.
    2) 커피도 내려주시고 넥타이가 답답하지 않냐 등 긴장을 풀어주시는 멘트들이 너무 좋았다.
    3) 사원증을 걸고 다니시는 직원분들을 볼 때 부러웠다.
    4) 건물 전체가 한 회사인 것을 보고 놀랬다.
    5) 개인적으로 어려웠던 질문도 많았지만, 충분히 대답할 수 있었던 질문도 긴장한 탓인지 제대로 못한 것이 아쉽다.

2. 대답을 못했던 기술면접 질문

Spring Security 는 Spring 기반으로 어플리케이션 보안 및 End Point들에 대한 기능을 제공하는 Framework 입니다.

인증 과 권한에 대한 Filter 흐름을 처리하는 End Point 역활을 제공해줍니다.

Filter는 Dispatcher Servlet 으로 가기전에 적용되므로 가장먼저 URL 요청을 받지만 Interceptor는 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있습니다.

Spring Security 는 보안과 관련해서 체계적으로 많은 옵션을 제공하기 때문에 개발자 입장에서 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있습니다.

  1. 사용자가 Form으로 로그인 정보를 입력하고 Http프로토콜로 인증요청을 Server로 보냄
  2. AuthenticationFilter (UsernamePasswordAuthenticationFilter)가 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트 함
    아이디와 패스워드 유효성 검사 이후 HttpServletRequest에서 사용자아이디, 패스워드 인증을 담당할 AuthenticationManager 인터페이스(Providermanager)에게 인증용 객체(UsernamePasswordAuthenticationToken)를 위함
  3. AuthenticationFilter 에 인증용 객체(UsernamePasswordAuthenticationToken) 전달
  4. 인증할 AuthenticationProvider에게 Authentication 객체 (UsernamePasswordAuthenticationToken) 다시전달 받음
  5. DB에서 사용자 인증정보를 가져올 UserDetailService에 유니크한 식별자(email, hp, name, id)를 전달 후 사용자 정보(사용자아이디, 암호화된 패스워드, 권한)를 UserDetails(인증용 객체와 도메인 객체를 분리하지 않기 위해서 실제 사용되는 도메인 객체 UserDetails 상속하기도 함) 객체로 전달 받음

7,8,9 요청한 내용들을 기반으로 Response전달함.

  1. 인증이 완료되면 사용자 정보를 가진 Authentication 객체를 SecurityContextHolder에 담은 이후 AuthenticationSuccessHandle를 실행

(실패시 AuthenticationFailureHandler 실행)

3. Interceptor, DispatcherServlet?

  • 개념

컨트롤러(Controller)의 '핸들러(Handler)'를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할수 있는 일종의 필터

interceptr 란 단어는 '낚아채다'라는 의미이다. 해당 단어의 의미와 같이 사용자 요청에 의해 서버에 들어온

Request 객체를 컨트롤러의 핸들러(사용자가 요청한 url에 따라 실행되어야 할 메서드, 이하 핸들러)로

도달하기전에 낚아채서 개발자가 원하는 추가적인 작업을 한후 핸들러로 보낼수 있도록 해주는것이 인터셉터 이다.

  • 왜 사용하는가?

개발자는 특정 Controller의 핸들러가 실행되기 전이나 후에 추가적인 작업을 원할때 Interceptor를 사용한다.

(추가적인 작업으로는 로그인체크, 권한 체크 등이 있다.)

만약 관리자만 실행할 수 있는 핸들러가 엄청 많다면, 일일히 전부 권한을 확인하는 코드가 들어가야함

  • Interceptor와 Filter(Spring Security)의 차이

Filter : Dispatcher Servlet 앞단에서 정보를 처리하고, Interceptor는 Dispatcher Servlet에서 Controller로 가기전 요청을 가로채서 정보를 처리한다.

기능적인 측면으론 완전히 다른 개념이다.

  • 사용해야할 어노테이션

@Configuration

: Spring IOC 컨테이너(Bean을 관리하는 컨테이너)에게 해당 클래스는 Bean 관련 클래스임을 명시하여 알려준다.

@EnableWebSecurity

: SpringSecurity 활성화, Spring Security를 사용하기 위한 어노테이션

@EnableGlobalAuthentication

: 모든 빈에 보안을 설정하기 위한 어노테이션, 글로벌 설정

  • Filter

필터는 Servlet에서 처리하기 전후를 다룰 수 있고, 주로 스프링과 무관하게 전역적으로 처리하는 작업들을 수행할 때 사용할 수 있다.

예를 들어 XSS 방어를 Filter에 구현하면 악의적인 요청이 스프링 컨테이너까지 전달되기도 전에 차단하므로 안전성을 더욱 높일 수 있다. 이미지/데이터 압축 및 문자열 인코딩 변환 등을 가장 앞단에서 처리할 때도 사용할 수 있다.

  • Intercepter

인터셉터

인터셉터의 경우에는 Controller에 넘겨주는 데이터를 가공할 때 사용할 수 있다. 예를 들면 JWT 토큰 정보를 파싱해서 컨트롤러에게 해당 유저의 권한을 전달해주는 처리를 구현할 있다. 추가로 핸들러와 어떤 컨트롤러가 매핑되었는 지를 알 수 있으므로, 각 컨트롤러의 권한 차이를 둘 수도 있다.

추가로 Handler 전후뿐 아니라, View를 렌더링한 이후 등에 대한 시점에서도 처리가 가능하다.

그리고 필터와 비교했을 때 인터셉터는 스프링의 모든 빈 객체에 접근이 가능하다는 차이를 가진다.

인터셉터에서 예외가 발생하면 DispatcherServlet이 받기 때문에 @ControllerAdvice, @ExceptionHandler 등으로 처리가 가능하다.

위에 명시한대로 컨트롤러 호출 전, 후 등의 메서드를 오버라이드 하기 때문에, 어떤 컨트롤러가 호출 되었는지를 알 수 있음.

4. Servlet?

서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.

클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 WAS에 위임한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한다. 그리고 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에 전송한다.

  • 정리 : MVC 패턴의 Controller의 역할

5. DispatcherServlet?

public class DispatcherServlet extends FrameworkServlet {
}

public abstract class FrameworkServlet extends HttpServletBean {
}

public abstract class HttpServletBean extends HttpServlet {
}

디스패처 서블릿도 Servlet이다.

Dispatcher의 뜻은 급파자라는 의미를 가지고 있다. 단어 의미 그대로 가장 먼저 요청을 먼저 받고, 적절하게 처리할 함수, 즉 컨트롤러를 찾아서 정해주는 역할을 한다.

디스패처 서블릿은 HttpServlet을 상속한다.
(DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet 상속 구조)

과거에는 모든 서블릿을 URL 매핑을 위해 web.xml에 등록해야 했지만, 이젠 디스패처 서블릿이 있다!

디스패처 서블릿은 스프링 MVC의 중앙 서블릿이며 어플리케이션으로 오는 모든 요청을 핸들링하고 공통작업을 처리해준다.

실제 작업(비즈니스 로직, 예외처리 등)은 위임 컴포넌트를 통해 수행된다.

디스패처 서블릿을 프론트 컨트롤러 라고도 부른다. 프론트 컨트롤러는 서블릿 컨테이너 맨 앞에서 모든 요청을 받아 처리해주는 컨트롤러를 의미한다.

이러한 패턴을 프론트 컨트롤러(Front Controller) 패턴이라고 부른다.

profile
기록하는 습관

0개의 댓글