백엔드 개발자 면접대비 질문정리 - Spring
백엔드 개발자 면접대비 질문정리 - Spring
Spring을 사용하는 이유
- 의존성이 편리하고 라이브러리 기타 참고 자료가 많으며, 자바의 대표적인 프레임워크로 사용되기 때문에
- DI, Bean, IoC
- Bean은 Spring 컨테이너가 관리하는 객체
- DI는 Bean을 이용해서 의존성 주입에 사용하는데 이로 인해 의존성을 줄일 수 있습니다.
- 직접 객체를 생성하는 것이 아니라 의존성이 줄어듭니다.
- IoC는 제어의 역전으로 객체 생성 및 관리를 개발자가 아닌 프레임워크 또는 컨테이너에 위임하는 개념
라이브러리와 프레임워크의 차이
라이브러리는 내 자율적인 권한이 더 많으며 필요한 부분을 가져다 사용하기에 용이하다. 건설용 책자프레임워크는 주어진 권한에 맞춰 제한적이지만 사용하기에 편리한 툴을 제공한다. 집을 짓는 뼈대- 라이브러리는 특정 작업을 하기 위한 기능을 제공하며, 프레임워크는 애플리케이션의 구조나 템플릿을 제공, 특정 규칙이나 인터페이스를 준수하여 구축
AOP, DI, Interceptor, Filter
- AOP는 관심사의 분리를 통해 특정 코드를 여러 위치에서 재사용할 수 있도록 합니다.
- @Aspect
- 애플리케이션 전반에 필요한 관심사로 로깅, 트랜잭션 관리, 보안, 예외처리
- 런타임에서 프록시를 사용해서 적용
- Aspect 관점
- Join Point 조인 포인트
- Advice 어드바이스 - 조인포인트에서 실행될 실제 코드
- Pointcut 어드바이스가 실행될 조인 포인트를 지정하는 표현식 또는 패턴
- 여러 조인 포인트 중에서 실제로 어드바이스가 적용될 지점들을 필터링하는 역할
- Interceptor는 스프링 MVC의 웹 요청 처리 중 특정 단계 작업을 수행하기 위해 설계
- HandlerInterceptor
- 즉 웹 요청에만 국한된다는게 AOP 와의 차이
- 특정 레이어에 국한된 작업
- 로그인 검사, 로깅, 권한 검사
- DI 의존성 주입
- 객체간 의존성을 외부에서 주입
- 객체 생성과 의존성 관리를 스프링 컨테이너에 위임
- @Autowired, @Inject
- Filter 서블릿 컨테이너 수준에서 요청과 응답을 가로채서 처리
- 자바 서블릿에서 제공하는 기능으로 DispatcherServlet에 의해 컨트롤러에 매핑되는데 Filter는 그 전 후 동작
- FilterChain에 의해 연쇄적으로 동작
- 토큰 인증 등 확인을 위해 사용
- init(), doFilter(), destory()
- Filter - Intercepter - AOP - Intercepter - Filter 순으로 처리
스프링에서의 reqeust 처리순서
- DispatcherServlet 요청을 가로채서
- @Controller에서 @RequestMapping에 따른 request를 찾아서 메서드에 도달
- Controller - Service - DB - Entity - Service - Controller - DispatcherServlet - ViewResolver - DispatcherServlet
- DispatcherServlet은 응답할 view에게 render를 지시하고 view 응답 로직을 처리
PSA portable service abstraction 추상화 서비스
- aop, ioc와 함께 spring triagle 중 하나
- spring cache
- 하나의 추상화로 여러 기능을 묶어둔
- @Transactional » PlatformTransactionManager
Spring vs Spring boot
- 둘 다 자바 기반 애플리케이션 개발을 위한 프레임워크이지만, Boot에서는 기본값을 제공하고 개발자가 의존성 구성을 관리할 필요가 없습니다.
- Spring Boot는 내장 Tomcat, Jetty와 같은 서버를 제공하고, 애플리케이션을 더 쉽게 실행 배포할 수 있습니다.
- Spring Boot Starter로 의존성을 그룹화하고 Spring Boot Dependency Management를 통해 의존성 버전을 관리합니다.
- 둘 다 DispatcherServlet을 포함하고 있습니다.
This post is licensed under CC BY 4.0 by the author.