Search
🚔

기술 면접 - SPRING

태그
기술 면접

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)
테스트 코드의 작성
순환 참조 에러 방지