SPRING
•
자바의 오픈소스 애플리케이션 프레임워크 중 하나로 특정 기술에 종속되지 않고, 객체를 관리할 수 있는 프레임워크를 제공하는 것입니다.
•
컨테이너로 객체를 관리하면서 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 됩니다.
DI
•
의존성 주입, 컨테이너가 의존관계를 자동으로 연결
•
DI는 Dependency Injection의 약자로 의존성 주입을 의미합니다.
•
객체간의 의존관계를 미리 설정해두면
•
스프링 컨테이너가 의존관계를 자동적으로 연결해줍니다.
•
이렇게 되면 직접 의존하는 객체를 생성하거나 가져오지 않아도 되어 결합도가 낮아지는 장점이 있습니다.
IOC
•
제어권이 사용자에게 있지 않고, 프레임워크에 있음
•
프레임워크는 전체 흐름이 정해져 있고 개발자는 중간중간 추가해놓으면 됨
•
Inversion of control의 약자로 제어의 역전을 의미합니다.
•
제어권이 사용자에게 있지 않고, 프레임워크에 있어서 필요에 따라서 사용자의 코드를 호출하게 됩니다.
•
스프링에서는 인스턴스의 생성 부터 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 됩니다.
ORM
•
Object Relational Mapping
•
관계형 데이터베이스를 OOP언어로 변환해주는 기술
•
Object Relational Mapping의 약자로
•
관계형 데이터베이스를 OOP언어로 변환해주는 기술입니다.
•
JDBC의 문제점 데이터베이스와 연동할 때 복잡한 작업들과 반복적인 작업들을 없애주고
•
SQL Mapper의 단점인 객체 지향 패러다임과 RDB 패러다임의 불일치, 반복되는 DAO 작업들을 해결해 줍니다.
JPA
•
ORM을 위해 자바에서 제공하는 API
•
하이버네이트가 JPA를 자바로 구현한 것이다.
내용 추가
1. Spring DI/IoC는 어떻게 동작하나요?
•
IOC는 Inversion of control의 약자로 제어의 역전을 의미합니다.
•
즉 제어권이 개발자에게 있지않고 컨테이너에 있어 정해진 흐름에 개발자는 필요한 코드를 추가마 해주면 됩니다.
•
또한 스프링에서는 인스턴스의 생명주기를 개발자가 아닌 컨테이너가 대신 관리하게 됩니다.
•
DI는 dependency injection의 약자로 의존성 주입을 의미합니다.
•
객체들간의 의존관계를 설정해두면
•
컨테이너는 객체들 간의 의존성 자동적으로 연결해주는 것을 DI라고 합니다.
2. Spring Bean이란 무엇인가요?
•
스프링이 IOC 방식으로 관리하는 객체
3. 스프링 Bean의 생성 과정을 설명해주세요
•
먼저 스프링 컨테이너가 생성
•
빈 생성
•
빈 의존성주입
•
빈 초기화 콜백
•
사용
•
빈 소멸 전 콜백
•
스프링 종료
4. 스프링 Bean의 Scope에 대해서 설명해주세요
•
빈 스코프란 빈이 존재할 수 있는 범위를 말함
•
싱글톤: 기본 스코프로 컨테이너의 시작과 종료까지 유지되는 가장 범위가 넓은 스코프
•
프로토타입: 스프링은 빈의 생성과 주입까지만 관리
•
request: 웹 요청이 들어오고 나올때까지만
•
session: 웹 세션이 생성, 종료할때까지만
•
application: 웹 서블릿 컨텍스트와 같은 범위로 유지
5. IoC 컨테이너의 역할은 무엇이 있을까요?
6. DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요?
7. Autowiring 과정에 대해서 설명해주세요
•
컨테이너에서 의존 대상 객체를 검색하고 할당할 수 있는 빈 객체를 찾아 주입한다.
8. Spring Web MVC의 Dispatcher Servlet 동작 원리에 대해서 간단히 설명해주세요
•
클라이언트 요청 시 앞단에서 요청을 가로채어 요청에 매핑되는 컨트롤러에 작업을 전달하고 해당 결과 view를 컨트롤러에게 전달하는 역할
9. 프론트 컨트롤러 패턴이란 무엇인가요?
•
예전에는 한 개의 URI에 한 서블릿이 매핑되는 구조로 중복 코드들이 많이 발생했습니다.
•
이를 해결하기 위해 프론트 컨트롤러라는 서블릿이 컨트롤 앞에 수문장 역할을 하면서 컨트롤러의 공통영역을 처리해줌으로써 중복 코드들을 줄여줍나더,
10. Servlet Filter와 Spring Interceptor의 차이는 무엇인가요?
•
filter는 servlet 전후 처리를 담당하며 interceptor는 handler 전후 처리를 담당합니다.
•
filter는 자신이 조작한 request와 response를 다음 필터에게 전달이 가능하지만 interceptor의 prehandle은 true나 false를 반환하기 때문에 전달이 불가능합니다.
•
filter는 공통된 보안 인증/인가처리나 모든 요청의 로깅, 이미지 압축 및 문자열 인코딩할 때 주로 사용하고
•
interceptor는 세부적인 보안 인증/인가 API 호출에 대한 로깅할 때 사용됩니다.
11. Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요
•
filter를 통해 access-control 확인을 하거나
•
corsOrigin 애노테이션을 사용하거나
•
WebMvcConfigurer를 상속받아 corsMapping을 추가해줍니다.
12. Bean/Component 어노테이션에 대해서 설명해주시고, 둘의 차이점에 대해 설명해주세요
•
Bean과 Component 애노테이션 둘다 빈 등록을 하는 어노테이션입니다.
•
이 둘의 차이는 Bean은 외부의 라이브러에 대해 사용하고 타겟이 메소드입니다.
•
Component는 개발자가 직접 정의한 클래스 자체를 등록하고 타겟이 클래스, 인터페이스, 열거형이라는 차이점이 있습니다.
13. POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요?
•
포조란 어떤 기술에 종속되지 않은 단순한 클래스입니다
•
스프링에서 Spring data jpa 기술이나 Transaction 관련 기술이 POJO 방식으로 설계되어져 있으며
•
도메인이 POJO 대상이 될 수 있습니다.
14. Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?
•
클래스 로더가 컨트롤러를 로드할 때 메소드 영역에 해당 메소드를 저장하기 때문입니다.
15. Filter는 Servlet의 스펙이고, Interceptor는 Spring MVC의 스펙이면 둘의 예외처리는 어떻게 하나요?
•
필터에서 javax.servlet.DispatcherType을 사용
•
인터셉터는 excludePathPattern을 사용하여 error 부분은 제외시킴
16. Spring Application을 구동할 때 메서드를 실행시키는 방법에 대해 설명해주세요
•
commandLineRunner
17. 의존성과 설정값을 생성자 인자로 주입해야 하는 이유에 대해 설명해주세요
•
객체의 불변성 확보(Thread-safe)
•
테스트 코드의 작성
•
순환 참조 에러 방지