Spring + SpringBoot
Ju Young Pang
·2022. 12. 1. 10:06
문제 모음
- 관점지향(AOP)이란?
- IoC (Inversion of Control, 제어 반전)이란?
- DI (Dependency Injection, 의존성 주입)이란?
- Bean이란?
- Bean의 등록 방법에는 어떤것이 있나?
- DI가 발생하는 시점은?
- 스프링과 스프링 부트의 차이점은?
- 톰캣이란?
- WAS(Web Application Server)란?
- JSP(JavaServer Pages)란?
- 자바 서블릿과 서블릿 컨테이너란?
- Servlet의 동작 방식에 대해 설명하시오
- Servlet과 Controller의 차이점은?
- 싱글톤 패턴이란?
- 싱글톤 패턴을 사용하는 이유는?
- 싱글톤 패턴을 사용함으로 일어날 수 있는 스레드 관련 문제점은 무엇인가?
- MVC 패턴이란?
- MVC 패턴을 사용하는 이유는?
- 스프링 필터와 인터셉터의 차이점은?
- Dispatcher servlet이란?
- DTO와 VO의 차이점은?
해답
**Spring의 특성: AOP, IoC, DI
Q) 관점지향(AOP)이란?
OOP를 더 발전시킨 개념으로 OOP에서 비즈니스 로직을 모듈화했다면 거기서 관점을 다르게해 인프라/부가 기능 측면에서 공통된 요소를 추출하는 것입니다. 예를들면 OOP가 프로그램을 계좌이체/입출금/이자계산으로 모듈화 했다면 AOP는 그 중에서 공통적으로 발생하는 부가 기능인 인증, 권한 체크, 트랜잭션 등을 분리시켜 필요한 시점에 자동으로 삽입되게 하는 것입니다.
이를 통해 코드 재활용성을 높이고 유지보수를 더 쉽게할 수 있습니다.
Q) IoC (Inversion of Control, 제어 반전)이란?
IoC는 객체의 생성과 의존 관계 설정, 메소드 호출 등에 대한 제어권이 개발자가 아닌 프레임워크가 갖는 것을 의미합니다. Spring에서는 IoC를 구현하기위해 DI를 사용합니다.
Q) DI (Dependency Injection, 의존성 주입)이란?
DI는 객체를 직접 생성하는 것이 아니라 외부에서 생성하여 주입시켜주는 방식으로, DI를 통해 모듈간의 결합도가 낮아지고 유연성이 높아질 수 있습니다. IoC 컨테이너의 BeanFactory 클래스에서 bean 인스턴스를 생성하여 주입시켜준다.
Q) Bean이란?
Bean이란 Spring IoC 컨테이너가 관리하는 자바 객체입니다.
Q) Bean의 등록 방법에는 어떤것이 있나?
- xml: 등록하려는 객체를 xml에 설정합니다.
- Component scan: Spring이 자동으로 @Component 어노테이션을 추가한 객체를 빈에 등록해주도록 xml파일에 component를 설정합니다.
- Java config: 1번 방법과 동일하지만 xml을 사용하지 않기 위해 @Configuration 어노테이션을 가진 클래스에 빈을 설정해줍니다.
- Java config + Component Scan: Java config에 빈을 하나씩 설정하지 않기 위해 @ComponentScan을 어노테이션을 이용합니다.
- Spring boot: @SpringBootApplication 어노테이션을 추가해주면 자동으로 @Configuration과 @ComponentScan을 사용하도록 설정해줍니다.
Q) DI가 발생하는 시점은?
스프링은 스프링이 실행될 때 모든 의존성 객체들을 생성하여 필요한곳에 주입시켜줍니다. 따라서 Bean들은 싱글턴 패턴의 특징을 가집니다.
**Q) 스프링과 스프링 부트의 차이점은?
- 내장형 톰캣: 스프링 부트 내에는 embedded tomcat이 존재하기 때문에 설치, 설정파일 구성 등의 수고로움을 덜 수 있습니다.
- Dependency: 스프링 부트는 build.gradle 파일에 추가할 dependency에 대해 명시해주면 자동으로 dependency 추가와 버전관리를 해줍니다.
- Configuration: 기존에 configuration을 위해 모든 어노테이션과 빈을 등록해 줘야했던 spring과 달리, spring boot는 application.properties 또는 application.yml 파일 등에 명시해주기만 하면 자동으로 configuration을 진행해주고 @SpringBootApplication 어노테이션을 추가함으로 빈 등록 등을 자동으로 진행해줍니다.
- 배포: Spring 프래임워크는 war파일을 WAS (Web Application Server)에 담아 배포해야했습니다. 그러나 Spring Boot는 내장 WAS를 가지고 있기 때문에 jar파일로 간편하게 배포할 수 있습니다.
Q) 톰캣이란?
WAS(Web Application Server)의 한 종류로, 자바 서블릿을 실행키고 JSP코드가 포함되어 있는 웹 페이지를 만들어주는 역할을 합니다.
Q) WAS(Web Application Server)란?
정적 컨텐츠를 제공하는 웹 서버와 서블릿 컨테이너를 연결시킨 서버로 요청에 대한 동적인 웹 페이지를 만들어 주는 역할을 합니다.
Q) JSP(JavaServer Pages)란?
JSP 란 HTML 코드에 JAVA 코드를 넣어 동적 웹 페이지를 생성하는 웹 어플리케이션 도구입니다. JSP는 WAS를 통해 서블릿 클래스로 변환되어 사용됩니다.
Q) 자바 서블릿과 서블릿 컨테이너란?
서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술로 웹 요청과 응답의 흐름을 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술입니다.
서블릿 컨테이너는 서블릿 클래스를 담고 관리해주는 컨테이너로 클라이언트의 요청을 받고 응답할 수 있도록 직접 웹소켓과 통신합니다. 톰캣이 바로 서블릿 컨테이너입니다.
Q) Servlet의 동작 방식에 대해 설명하시오
- 클라이언트가 URL을 입력하면 HTTP Request가 Servlet Container로 전송됩니다.
- 요청을 받은 컨테이너는 HttpRequest, HttpResponse 객체를 생성합니다.
- web.xml을 기반으로 URL을 분석해 어느 servlet에 대한 요청인지 파악합니다.
- 파악이 완료되면 thread를 thread pool로부터 가져와 servlet과 연결합니다
- 만약 서블릿이 없다면 init()을 이용하여 서블릿을 생성합니다
- 서블릿이 service()로 서비스를 수행하게 한 후, doGet() 또는 doPost()를 호출합니다
- doGet() 또는 doPost()가 동적 페이지를 생성한 후 HttpResponse 객체에 그 응답을 보냅니다
- 응답이 끝나면 HttpResponse를 클라이언트로 보내고 HttpRequest와 HttpResponse 두 객체 모두 소멸시킵니다.
**Servlet의 life cycle: init() --> service() --> destroy()
Q) Servlet과 Controller의 차이점은?
컨트롤러는 편의를 위해 서블릿 위에 구축된 라이브러리입니다. 서블릿은 하나의 클래스에 하나의 URL만을 처리할 수 있고 HttpServlet을 상속받아 init(), service(), destroy()를 구현합니다. 컨트롤러는 하나의 클래스에 여러 URL과 메소드의 입력을 쉽게 관리 할 수 있습니다.
Q) 싱글톤 패턴이란?
싱글톤 패턴을 사용하는 클래스는 생성자가 여러번 호출되더라도 실제로 생성되는 객체의 인스턴스는 하나이고, 최초 생성 이후에 호출되는 생성자는 최초의 생성자가 생성한 인스턴스를 리턴합니다. 싱글턴 패턴을 사용하면 객체의 유일성을 보장할 수 있습니다.
Q) 싱글톤 패턴을 사용하는 이유는?
최초 한번의 생성자로 할당 된 고정된 메모리 유지를 사용하기 때문에 메모리 낭비를 방지할 수 있습니다. 또한, 싱글톤으로 구현한 인스턴스는 전역 변수이기에 데이터 공유에도 유리합니다.
Q) 싱글톤 패턴을 사용함으로 일어날 수 있는 스레드 관련 문제점은 무엇인가?
싱글톤 패턴에서 지연 초기화(lazy initialization)을 사용하면 객체의 인스턴스가 아직 생성되지 않았는지 체크하고 그러하다면 객체를 생성하도록 하는 것입니다. 멀티 스레드 환경에서 두개 이상의 스레드가 동시에 인스턴스 생성 여부를 체크하게된다면 객체의 유일성을 잃는 문제가 생길 수 있습니다.
**Spring Bean은 싱글톤 패턴을 사용하고 싱글턴 패턴은 thread-safe하지 않기 때문에 Spring Bean은 stateless하게 설계되어야한다
Q) MVC 패턴이란?
Model-View-Controller의 약자로 프로그램을 구성할 때 그 구성 요소를 이 세가지로 나누는 디자인 패턴입니다. Model은 데이터를, View는 사용자 인터페이스를, Controller는 데이터와 인터페이스를 잇는 다리 역할을 합니다.
Q) MVC 패턴을 사용하는 이유는?
사용자 인터페이스와 데이터의 비즈니스 로직을 분리하여 서로 영향 없이 쉽게 유지보수 및 확장을 할 수 있게됩니다.
**Q) 스프링 필터와 인터셉터의 차이점은?
실행되는 시점이 다릅니다. 필터는 dispatcherServlet으로 요청이 가기전에 실행되고 인터셉터는 Controller로 요청이 가기전에 실행됩니다.
Q) Dispatcher servlet이란?
클라이언트로부터 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러입니다.
Q) DTO와 VO의 차이점은?
'CS 공부 > 면접 준비' 카테고리의 다른 글
기타 (비즈니스 로직, 디자인 패턴, etc) (0) | 2023.03.07 |
---|---|
자료구조 (JAVA 기준) (0) | 2022.12.03 |
네트워크 (0) | 2022.11.24 |
Spring security + JWT (0) | 2022.11.22 |
데이터베이스 (DB) (2) | 2022.11.22 |