기술면접 스터디는 끝났지만 그때 미쳐 정리하지 못한 부분을 추가로 정리해봤다.
스프링은 엔터프라이즈용 자바 애플리케이션 개발을 도와주는 경량 오픈소스 프레임워크 입니다. POJO를 지향해서 순수 java 코드로, 특정 라이브러리나 프레임워크에 종속되지 않고 유연한 프로그래밍을 지향합니다. IoC와 DI, AOP, PSA를 특징으로 가집니다.
IoC는 객체의 생성과 관리에 대한 제어권을 개발자가 아니라 프레임워크가 가진다는 것이고, DI는 이러한 의존성을 외부에서 주입해 결합도를 낮추는 기능입니다. AOP는 핵심기능과 부가기능을 분리시켜 공통되는 기능을 모듈화 해 유지보수를 더 쉽게 하는 기술입니다. PSA는 특정 기술과 관련된 서비스를 추상화해서 일관된 방식으로 사용할 수 있도록 하는 것입니다.(예를들어 DB를 바꿔도 JDBC로 연결되어있다면 구현체만 바꾸면 된다.)
스프링부트는 스프링을 이용해 애플리케이션을 개발하는 걸 좀 더 쉽게 해주는 프레임워크입니다. 순수 스프링으로는 설정을 해야할 것이 엄청나게 많습니다. 스프링부트는 초기 디폴트 설정을 미리 잡아줘서 하나하나 설정할 필요 없이 개발자가 편하게 개발할 수 있도록 도와줍니다. 그리고 Tomcat같은 내장 서버로 웹서버를 미리 적용해줍니다. Dependancy 관리도 도와주기 때문에 스프링 부트를 이용하면 스프링을 이용한 애플리케이션 개발을 좀 더 쉽게할 수 있게됩니다.
세 기능 다 모듈들에게 공통적으로 나타나는 횡단 관심사를 공통화 해서 중복 코드를 줄이는 데 기여하는 기능입니다.
우선 필터는 스프링 컨텍스트 밖의 웹 컨테이너에 의해 관리되고, Dispatcher Servlet보다 먼저 적용되어 요청과 응답 바로 전/후에 개입합니다. 일반적으로 스프링과 무관하게 전역적으로 처리해야 하는 XSS 방어 같은 보안사항이나 압축, 인코딩 같은 곳에 쓰입니다.
인터셉터는 Dispatcher Servlet 이전 이후에 적용되어 스프링 컨테이너 안에 포함되어 있습니다. 컨트롤러로 넘겨주는 데이터를 가공하거나 좀 더 세부적인 보안, 로깅작업에 쓰입니다.
AOP는 컨트롤러 바로 직전/후에 적용됩니다. 필터와 인터셉터가 URL 패턴으로 호출 위치를 지정한다면, AOP는 포인트컷을 써서 좀더 호출 위치를 세밀하게 조정할 수 있습니다. 그래서 세밀한 로깅, 보안, 성능모니터링, 예외처리, 트랜잭션 관리 등에 사용됩니다.