낙낙님의 면접 결과

40

총점

3

질문 수

1

좋아요

17

조회수

종합 평가

면접자님은 Spring MVC의 요청/응답 흐름, 인터셉터와 필터의 차이점, 그리고 AOP와의 비교에 대해 상당히 깊이 있는 이해를 보여주셨습니다. 특히 디스패처 서블릿, 필터, 인터셉터의 동작 원리와 실행 순서를 정확히 설명하신 점, 그리고 어댑터 패턴을 언급하며 아키텍처적 이해도를 보여주신 점이 인상적이었습니다. 다만 필터와 인터셉터의 성능 차이에 대해 좀 더 구체적인 벤치마크나 사례 기반의 설명이 있었다면 더 좋았을 것 같으며, 실무에서의 구체적인 활용 사례를 더 다양하게 제시했으면 하는 아쉬움이 있습니다. 향후에는 Spring의 내부 동작 원리에 대한 학습을 계속하시면서 동시에 실제 프로젝트에서 이러한 개념들을 적용한 경험을 쌓아보시길 권장드리며, Spring 공식 문서와 함께 'Spring in Action'이나 백기선님의 강의 등을 통해 더 깊이 있는 학습을 진행하시면 좋을 것 같습니다.

질문별 상세 분석

커뮤니티 공개
Q1A

Spring MVC에서 요청/응답 흐름에 대해 설명해주세요.

응답 내용

스프링 MVC에서 요청이 들어오면, 서블릿 컨테이너 중 어떤 서블릿이 해당 요청을 처리할 수 있는지 확인합니다. 스프링 부트에서는 기본적으로 디스패쳐 서블릿이 맨 앞단에서 모든 요청을 먼저 받고, 이를 실제로 처리할 수 있는 핸들러에게 전달하는 프론트 컨트롤러 패턴을 사용합니다. 그런데 이 디스패쳐 서블릿에 도달하기 전에 먼저 필터를 거치게 됩니다. 디스패쳐 서블릿에게 요청이 넘어가기 전에 처리해야할 일들(XSS 공격 방어, 요청 로깅을 위한 캐싱, 인증 작업 등)을 수행하고 나서 이 요청을 디스패처 서블릿에게 전달합니다. 디스패처 서블릿이 클라이언트로 응답할 때에도, 후처리를 위해 필터를 거치게 됩니다. 필터가 여러개인 경우에는 체이닝 방식으로 동작합니다. 이 후 url과 HTTP method를 보고 어떤 컨트롤러의 메소드, 즉 어떤 핸들러가 처리할 수 있는지 찾는데 이 때 어댑터 패턴을 통해 핸들러 어댑터를 찾습니다. 여기서 어댑터 패턴을 사용하는 이유는 컨트롤러를 구현하는 방식이 1가지가 아니기 때문에 이를 어댑터로 감싸서 통일된 인터페이스로 다루기 위함입니다. 현재는 어노테이션 기반의 컨트롤러를 주로 사용하지만, 과거에는 인터페이스를 구현하는 방식의 컨트롤러를 사용했기 때문에 두가지 방식 모두 하나의 인터페이스로 처리하기 위해 사용하는 것입니다. 이후 해당 핸들러를 처리하기 전 인터셉터가 동작합니다. 핸들러에게 도달하기 전에 수행할 일, 핸들러가 요청을 처리한 뒤 수행할 일들을 정의합니다. 이후 컨트롤러를 지나 서비스, 리포지토리 등을 거치며 비즈니스 로직이 수행되고, 이 응답이 사용자에게 전달됩니다.

AI 피드백

Spring MVC의 요청/응답 흐름에 대해 매우 체계적이고 정확하게 설명해주셨습니다. 특히 필터 체인, 디스패처 서블릿, 핸들러 어댑터, 인터셉터의 동작 순서와 각각의 역할을 명확히 구분하여 설명하신 점이 인상적이었고, 어댑터 패턴을 사용하는 이유까지 언급하신 것도 좋았습니다. 다만 응답 과정에서 ViewResolver를 통한 뷰 처리나 ModelAndView 객체의 역할에 대한 언급이 있었다면 더욱 완성도 높은 답변이 되었을 것 같습니다. 또한 HandlerMapping이 핸들러를 찾는 과정을 좀 더 구체적으로 설명하시면 Spring MVC의 내부 동작에 대한 이해도를 더욱 잘 보여줄 수 있을 것입니다.

사용자 메모

ModelAndView 쪽 오랜만에 공부해보기

Q2B

스프링 MVC에서 인터셉터와 필터의 차이점과 각각의 사용 시나리오에 대해 설명해주세요. 그리고 실무에서 이 둘을 어떻게 적절히 선택해서 사용하는지 예시와 함께 말씀해주세요.

응답 내용

필터와 인터셉터는 비슷하게 동작하지만 차이점이 있습니다. 필터는 디스패처 서블릿 외부에서 동작하고, 인터셉터는 디스패처 서블릿 내부에서 동작합니다. 필터는 요청/응답에 대한 수정이 가능합니다. 하지만 인터셉터는 불가능합니다. 필터에서 발생하는 예외는 디스패처 서블릿 밖에서 발생하기 때문에 컨트롤러 어드바이스의 @ExceptionHandler로 처리할 수 없어 직접 처리해야 하지만, 인터셉터에서 발생하는 예외는 @ExceptionHandler로 처리가 가능합니다. 필터는 일반적으로 디스패처 서블릿에 도달하기 전에 동작하고, 기본 설정이 전역에서 동작하기 때문에 전역에서 공통으로 가지는 관심사에 대한 처리를 하는데 주로 사용할 수 있습니다. 가령 모든 요청/응답에 대한 로깅, 모든 요청에 대한 XSS 방어, 요청에 대한 인증 작업 등을 할 수 있습니다. 물론 요청에 대한 인증 작업은 모든 요청에 대한 것은 아니지만, 인터셉터보다는 필터를 통해 인증 처리를 하는 것이 안전합니다. 기본적으로 필터는 전역 적용이고, 인터셉터는 적용할 대상을 직접 고르는 방식으로 동작합니다. 인터셉터는 인증을 적용할 대상에 대해 경로 패턴을 통해 적용하는데, 이 경로가 불일치 될 수 있어 보안과 관련된 작업으로 추천하지 않는다는 공식 문서의 내용도 있습니다. 또한 빠른 실패 관점에서도 디스패처 서블릿에 도달하기 전, 필터에서 먼저 거르는 것이 좋습니다. 인터셉터는 전역의 관심사보다는 특정 관심사를 처리할 때 주로 사용합니다. 특정 경로에 대해서만 실행 시간을 구체적으로 측정하고 싶다거나, 로깅을 좀 더 상세하게 해야한다거나 하는 경우에 사용할 수 있을 것 같습니다.

AI 피드백

필터와 인터셉터의 동작 위치, 예외 처리 방식, 그리고 보안 관련 처리에서 필터를 선호하는 이유에 대해 정확하게 설명해주셨고, 특히 빠른 실패 관점과 경로 패턴 불일치 위험성까지 언급한 점이 매우 좋았습니다. 다만 "필터는 요청/응답 수정이 가능하지만 인터셉터는 불가능하다"는 설명이 부정확합니다. 실제로는 둘 다 HttpServletRequest와 HttpServletResponse 객체에 접근할 수 있으며, 인터셉터도 ModelAndView를 통해 응답을 수정할 수 있습니다. 또한 인터셉터의 장점인 Spring 컨텍스트 접근 가능성과 핸들러 정보 활용 가능성에 대해서도 추가로 학습하시면 더욱 완성도 높은 답변이 될 것 같습니다. 전반적으로 실무 관점에서의 선택 기준을 잘 제시해주셨습니다.

Q3B

스프링 MVC에서 인터셉터와 필터를 구현할 때의 기술적 차이점과 성능 관점에서의 차이에 대해 설명해주세요. 또한 실제 프로젝트에서 AOP를 활용한 방식과 비교했을 때의 장단점은 무엇인가요?

응답 내용

필터는 체이닝 방식으로, 기본적으로 모든 요청에 대해 필터를 거치게 됩니다. 특정 요청의 경우에만 필터를 거치지 않게 할 수 있는 설정도 제공합니다. @Component를 붙이고 Filter를 구현하기만 하면 자동으로 등록이 됩니다. 인터셉터는 어떤 경로 패턴에 적용시킬지 결정하고, 해당 패턴이 일치하는 경우에만 인터셉터를 거치게 됩니다. WebMvcConfigurer를 통해 수동으로 등록합니다. 성능적으로는 특정 요청을 블록해야 하는 경우 빠른 실패 관점에서 디스패처 서블릿에 도달하기 전에 필터에서 먼저 처리되므로, 응답 시간도 빨라지고 이에 따라 커넥션과 톰캣 스레드를 점유하는 시간도 짧아져 더 성능이 좋을 것이라 생각됩니다. 일반적인 처리 방식에서는 필터와 인터셉터의 성능 차이를 정확하게 모르겠습니다. 필터와 인터셉터는 웹 계층에 대해서만 처리하지만, 이외의 공통 관심사를 처리하고 싶은 경우 AOP를 사용할 수 있습니다. 가령 @Transactional 이 AOP를 통해 구현되었는데, 트랜잭션 관리(롤백, 커밋, 격리수준, 전파옵션 등)라는 횡단 관심사를 AOP를 통해 서비스의 비즈니스 코드에서 분리해줍니다. 앞에서 이야기한 특정 메소드의 실행 시간 추적, 비즈니스 메트릭 등록 등 웹 계층을 너머 다른 계층에서 횡단 관심사를 처리할 때 AOP를 사용할 수 있습니다. 스프링 AOP는 프록시 기반으로 동작하고, 프록시 빈이 대신 주입되어야 하기 때문에 빈으로 등록할 수 없는 경우에 대해서는 스프링 AOP를 적용할 수 없습니다. 이 경우에는 AspectJ를 통해 바이트 코드를 직접 조작하여 횡단 관심사를 처리할 수 있습니다.

AI 피드백

필터, 인터셉터, AOP의 기술적 차이점과 각각의 적용 시나리오를 잘 구분해서 설명해주셨고, 특히 빠른 실패 관점에서의 성능 분석과 스프링 AOP의 프록시 기반 동작 원리, AspectJ와의 차이점까지 언급하신 부분이 매우 좋았습니다. 다만 성능 관점에서의 비교 부분에서 좀 더 구체적인 설명이 있으면 좋겠는데, 필터는 서블릿 컨테이너 레벨에서 동작하여 오버헤드가 적고, 인터셉터는 스프링 컨텍스트 내에서 동작하므로 스프링 빈에 접근 가능하지만 약간의 추가 오버헤드가 있다는 점을 추가하시면 더 완성도 높은 답변이 될 것 같습니다. 또한 AOP의 장단점 비교에서 런타임 위빙과 컴파일 타임 위빙의 성능 차이, 그리고 AOP가 메서드 단위로 적용되어 더 세밀한 제어가 가능하다는 장점도 함께 언급하시면 좋을 것 같습니다.

커뮤니티 공유 안내

• 이 결과는 AI가 분석한 내용이며, 학습 목적으로 커뮤니티에 공유됩니다.

• 좋아요를 눌러 유용한 답변에 반응을 남겨보세요.

• 개인정보는 포함되지 않으며, 면접 연습 개선을 위한 참고 자료로 활용됩니다.