스프링 프레임워크의 개요
- 정의
스프링은 자바 기반의 오픈 소스 프레임워크로, 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 제공하는 경량 프레임워크입니다.
- 핵심 기능
- 의존성 주입(DI, Dependency Injection)
: 객체 간의 의존성을 외부에서 주입하여 코드의 유연성과 유지보수성을 향상시킵니다.
- 관점 지향(AOP, Aspect-Oriented Programming)
: 횡단 관심사를 모듈화하여 코드 중복을 줄이고 관심사의 분리를 도모합니다.
- 제어 역행(IoC 컨테이너, Inversion of Control Container)
: 애플리케이션의 제어 흐름을 개발자가 아닌 프레임워크가 담당하는 디자인 패턴입니다.
스프링 프레임워크의 기본적인 환경 설정
- 의존성 추가
: Maven, Gradle 등의 빌드 도구를 사용하여 스프링 프레임워크의 의존성을 프로젝트에 추가합니다.
- XML 설정 파일 또는 Java Config 사용
: 스프링은 XML 기반 또는 자바 기반의 설정을 통해 빈(Bean) 등의 구성 요소를 정의합니다.
- IoC 컨테이너 구동
: ApplicationContext 인터페이스를 구현한 구체적인 컨테이너(예: ClassPathXmlApplicationContext, AnnotationConfigApplicationContext)를 사용하여 스프링 컨테이너를 구동합니다.
스프링 필터와 인터셉터의 차이점
- 실행되는 시점에서 차이가 있다. 필터는 dispatcherServlet으로 요청이 가기전에 실행되고 인터셉터는 Controller로 요청이 가기전에 실행된다.
- 따라서 컨트롤러에 들어가기 전 작업을 처리하기 위해 사용하는 공통점이 있지만, 호출되는 시점에서 차이가 존재한다.
String, StringBuffer, StringBuilder 차이점
- 첫번째 차이점은 String은 불변하다는 특징을 가지고 있어서 수정을 하지못하고 새로운 String 인스턴스가 생성되고 전에 있던 String은 GC에 의해 사라지게 된다. 그래서 좋은 성능을 기대하기는 힘들다. (String 불변, StringBuffer, StringBuilder 가변)
- StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다.
- 반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다
MVC 진행 방식
- 클라이언트로부터 요청이 들어오면 dispatcherServlet이 가장 먼저받는다.
- HandlerMapping이 요청 URL과 매핑되는 Controller 검색 후 리턴
- HandlerAdapter에서 알맞은 controller 처리요청
- ViewResolver에서 controller가 리턴한 view 검색후 view를 클라이언트로 보냄

spring security
- 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크이다.
- 세션-쿠키 방식으로 인증한다.

참고: Java/Spring 면접 질문 정리