Spring ‐ 기술 면접 - dnwls16071/Backend_Study_TIL GitHub Wiki
📖 프레임워크와 라이브러리의 차이에 대해서 설명해주세요.
예비 답안 보기 (👈 Click)
- 프레임워크란 응용 프로그램 개발을 수월하게 하기 위해 틀이 제공된 소프트웨어 환경입니다.
- 라이브러리란 특정 기능을 수행하는 코드의 집합입니다.
예비 답안 보기 (👈 Click)
- 스프링은 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크입니다.
- DI(의존성 주입)를 통한 객체 관계 구성을 지원합니다.
- AOP(관심 지향 프로그래밍)를 지원합니다.
- MVC 구조로 계층이 분리되어 관리하기 수월합니다.
📖 DI(Dependency Injection)가 무엇인지 설명해주세요.
예비 답안 보기 (👈 Click)
- DI는 스프링 프레임워크에서 지원하는 IoC(Inversion of Control, 제어의 역전)의 한 형태입니다.
- 클래스 사이 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해줍니다.
- 장점
- 주입받는 대상이 변하더라도 그 구현 자체를 수정할 일이 없거나 줄어들게 되므로 의존성이 줄어듭니다.
- 클래스 재사용성을 높이고 유지보수가 편리해집니다.
- 의존성 주입으로 stub, mock 객체를 사용해 단위 테스트 이점이 생깁니다.
- 단점
- 의존성 주입을 위한 선행 작업이 필요해 간단한 프로그램에서는 번거롭습니다.
📖 IoC(Inversion of Control)에 대해 설명해주세요.
예비 답안 보기 (👈 Click)
- 객체 생성부터 생명주기 관리까지 모든 객체에 대한 제어권이 바뀐 것을 의미합니다.
- 개발자는 프레임워크에 필요한 부품을 개발하고 조립하는 방식으로 개발을 하고 최종 호출은 개발자가 아니라 프레임워크 내부에서 결정된 대로 이뤄지게 되는데 이런 현상을 제어의 역전이라고 합니다.
예비 답안 보기 (👈 Click)
- 수정자 주입
- Setter를 통해 주입하는 방식으로 변경될 위험이 존재해 잘 사용하지 않습니다.
- 필드 직접 주입
- 외부에서 변경이 불가능해서 테스트하기 어렵습니다.
- 생성자 주입
- final 키워드를 통해 불변하게 설계가 가능합니다.
- 생성자 호출 시점에 딱 1번만 호출되게끔 하도록 보장합니다.
예비 답안 보기 (👈 Click)
- 스프링 컨테이너는 자바 객체의 생명주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다.
- 스프링 컨테이너의 종류에는 BeanFactory와 ApplicationContext가 있습니다.
- ApplicationContext가 BeanFactory의 빈 관리 기능들을 상속받고 있고 그 외에 국제화 등 추가적인 기능을 가지고 있어 스프링 컨테이너라고 하면 보통 ApplicationContext를 많이 사용하는 편입니다.
예비 답안 보기 (👈 Click)
- Bean은 스프링 컨테이너 안에서 관리되는 객체입니다.
- 컨테이너에 포함되어있으며 필요할 때, 컨테이너에서 가져와서 사용합니다.
-
@Bean
어노테이션을 사용해 등록하거나 XML을 사용해서 등록하고 Bean으로 등록된 객체는 쉽게 주입하여 사용이 가능합니다.
예비 답안 보기 (👈 Click)
- 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 컨테이너 종료
- 초기화와 소멸 메서드는 @PostConstruct, @PreDestroy를 사용하는 것이 권장됩니다.
예비 답안 보기 (👈 Click)
- 싱글톤 타입
- 스프링 컨테이너 시작과 종료 시점까지 1개의 객체를 유지하는 방식입니다.
- 프로토타입
- 빈의 생성, 의존관계 주입, 초기화 콜백까지만 관리하여 이후에는 컨테이너에서 관리하지 않는 스코프 방식입니다.
- 따라서 매번 요청마다 새로 만들어지게 됩니다.
- 싱글톤은 스프링 애플리케이션이 실행될 때 생성되나 프로토타입은 매번 요청할 때마다 생성됩니다.
- 웹 스코프
- request : 각 요청이 들어오고 나갈 때까지 유지됩니다.
- session : 세션이 생성되고 종료될 때까지 유지됩니다.
- application : 웹의 서블릿 컨텍스트와 동일한 생명주기를 갖는 스코프입니다.
📖 Spring 어노테이션에 대해 설명해보세요.
예비 답안 보기 (👈 Click)
- 어노테이션은 프로그램에게 추가적인 정보를 제공해주는 메타데이터입니다.
📖 웹 서버와 웹 애플리케이션 서버에 대해 설명해보세요.
예비 답안 보기 (👈 Click)
- 웹 서버 : 정적 리소스 파일을 제공하는 서버입니다.
- 웹 애플리케이션 서버(WAS) : 웹 서버가 하는 일과 더불어 애플리케이션 로직(DB 연결, 동작 수행, 데이터 제공)까지 제공하여 동적인 처리를 하는 서버를 말합니다.
예비 답안 보기 (👈 Click)
- 서블릿은 WAS 안에서 동적 페이지를 만드는데 사용됩니다.
예비 답안 보기 (👈 Click)
- 서블릿 컨테이너는 서블릿 생명주기를 관리합니다.
- init : 서블릿 초기화를 수행합니다.
- service : HTTP 요청 유형을 확인하고 그에 맞게 doGet, doPost, doPut 등 메서드를 호출하여 요청을 처리합니다.
- destroy : 서블릿 제거를 수행합니다.
- HTTP 요청 메시지와 응답 메시지를 편리하게 사용할 수 있도록 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
예비 답안 보기 (👈 Click)

- 해당 HTTP 요청을 처리할 수 있는 핸들러가 있는지 조회합니다.
- 핸들러를 처리할 수 있는 핸들러 어댑터가 있는지 조회합니다.
- 핸들러를 핸들러 어댑터에 파라미터로 넘겨 핸들러를 실행합니다.
- 핸들러가 로직을 수행하고 반환하는 정보로 ModelAndView를 반환합니다.
- 적절한 viewResolver를 찾고 해당 viewResolver를 호출합니다.
- viewResolver는 뷰의 논리 이름을 물리 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체를 반환합니다.
- 뷰를 통해서 렌더링합니다.
- MVC 패턴
- 정의 : Model - View - Controller로 분리하는 아키텍처를 말합니다.
- 장점 : 기능 별로 코드를 분리하여 가독성을 높이고 재사용성을 증가시킵니다.
- 단점 : 애플리케이션이 커질수록 복잡해지고 유지보수가 어렵습니다. Controller에 다수의 Model과 View가 연결되어 코드 분석과 테스트가 어렵습니다.
📖 싱글톤 패턴은 멀티 쓰레드 환경에서 어떤 문제가 생기는지 설명해보세요.
예비 답안 보기 (👈 Click)
- 싱글톤 패턴은 하나의 객체를 공유하기 때문에 Thread Safe하게 설계하기 어렵습니다.
- 이를 해결하기 위해서는 다음과 같은 방법을 사용합니다.
- 지역 변수를 사용합니다.
- Atomic 자료형을 사용합니다.
- ThreadLocal을 사용합니다.
- Synchronized를 사용합니다. 단, 이 방식은 하나의 쓰레드가 락을 계속 보유하면서 다른 쓰레드가 락을 얻지 못할 수 있습니다.
⚠️ **GitHub.com Fallback** ⚠️