면접 준비

[면접준비] 신입 개발자 면접 예상 질문 정리 - 백엔드(Spring)

다아빈 2025. 4. 17. 21:51
728x90
반응형

면접 스터디를 준비하며, 공부한 내용을 정리하는 글입니다.

면접 예상 질문과 그에 대한 답변을 정리할 것이며, 스터디가 끝날 때까지 예상 질문을 꾸준히 추가될 예정입니다!

 

혹시 틀리거나 보완할 부분이 있다면 친절히 알려주세요.

감사합니다!


스프링 프레임워크의 장점

더보기

스프링 프레임워크의 가장 큰 장점은 개발 생산성과 유지보수성을 동시에 확보할 수 있다는 것입니다.

 

  • 의존성 주입(DI, Dependency Injection)과 제어의 역전(IoC, Inversion of Control)을 통해 객체 간의 결합도를 낮춰 코드를 유연하게 관리할 수 있습니다.
  • AOP(관심 지향 프로그래밍)을 지원하여 핵심 비지니스 로직과 로깅, 트랜잭션과 같은 부가 기능을 모듈화할 수 있습니다. 이를 통해 코드의 중복을 줄이고, 유지보수성을 향상시킬 수 있습니다.
  • 스프링은 POJO(Plain Old Java Object) 기반의 경량 컨테이너로 자바 개발을 편리하게 해줍니다.
제어의 역전이란 객체의 생성과 의존성 주입을 프레임워크가 대신 수행하는 것을 말하며, 의존성 주입이란 클래스가 자신이 필요한 객체를 직접 생성하지 않고 외부에서 주입받는 것을 말합니다.

 

의존성 주입 하는 방법에 대해서 설명해주세요

더보기

의존성 주입이란 객체 간의 의존 관계를 직접 생성하지 않고 외부에서 주입받는 방식을 말하며 크게 3가지 방식을 통해 주입합니다.

  • 생성자 주입: 생성자를 통해 필요한 의존 객체를 전달받는 방식입니다. 생성자 주입은 의존성이 명확하게 들어나고 객체가 불완전하게 생성되는 것을 막기 때문에 일반적으로 가장 권장되는 방식입니다.
  • 필드 주입: 클래스 내부의 필드에 바로 주입하는 방식으로 간편하지만 테스트가 어렵고 명시적이지 않다는 단점이 있습니다.
  • setter 주입: setter 메서드를 통해 주입하는 방식으로, 선택적인 의존성에 적합합니다.

 

Bean 등록 방법과 생명주기

더보기

Spring Bean이란 스프링 컨테이너가 관리하는 객체를 의미하며, Bean을 등록 방법은 크게 2가지가 있습니다.

  • @Component 어노테이션을 사용하여 등록: 클래스에 @Component, @Service, @Repository, @Controller 와 같은 어노테이션을 붙이면 컴포넌트 스캔을 통해 자동으로 Bean으로 등록됩니다.
  • 자바 설정 클래스 기반 등록: 먼저 설정 클래스를 만들어 @Configuration 어노테이션을 붙입니다. 그 다음 설정 클래스 안에서  @Bean 어노테이션을 사용한 메서드를 정의해서 Bean을 직접 등록하는 방법입니다.

Bean 생명주기는 Spring 컨테이너가 객체를 생성하고 소멸할 때까지의 모든 과정을 말합니다.

 

  1. Spring 애플리케이션이 실행되면 IoC 컨테이너가 생성되고, 이 컨테이너가 설정 파일이나 컴포넌트 스캔을 통해 등록된 Bean 을 차례로 생성합니다.
  2. 생성된 Bean에는 필요한 의존 객체가 주입되고, 초기화 콜백 메서드가 실행되어 애플리케이션이 실행되는 동안 사용상태가 됩니다.
  3. 애플리케이션이 종료될 때는 소멸 콜백 메서드가 호출되어 정리 작업을 하고
  4. 마지막으로 IoC 컨테이너가 종료됩니다.

 

스프링 부트와 스프링의 차이점

더보기

스프링과 스프링부트 모두 자바 웹 개발 프레임워크지만 몇 가지 차이점이 존재합니다. 

 

  • 스프링에서는 개발자가 직접 설정 파일을 작성해 스프링 컨테이너를 구성하고, 필요한 빈 객체를 수동으로 등록해야 하므로 프로젝트 초기 설정이 복잡한 편입니다.
  • 반면에 스프링 부트는 자동 설정(Auto Configuration)을 지원해 별도의 설정 없이도 기본적인 환경 구성이 가능합니다. 또한, 내장 톰캣 서버가 포함되어 있어 별도의 WAS를 설치하지 않아도 애플리케이션을 실행할 수 있습니다.

 

스프링 MVC 패턴에 대해 설명해주세요

더보기

스프링 MVC 패턴이란, Model-View-Controller 로 분리하는 아키텍처입니다. 한 패턴으로 세 가지 구성 요소로 분리하여 역할을 나누고, 유지보수성과 테스트 용이성을 높이는데 목적이 있습니다.

 

  • Model: 애플리케이션의 핵심 데이터와 비지니스 로직을 담당합니다.
  • View: 사용자에게 보여지는 화면을 담당하며, 보통 HTML, JSP, Thymeleaf와 같은 템플릿 엔진을 사용합니다. 뷰는 모델의 데이터를 참조만 하며, 직접 수정하지는 않습니다.
  • Controller: 사용자의 요청을 받아 적절한 서비스를 호출하고, 처리 결과를 전달하는 역할을합니다. 즉, 모델과 뷰 사이에서 흐름을 제어하는 역할입니다.

 

스프링 MVC 패턴은 어떻게 동작하는지 설명해주세요

더보기
  1. 클라이언트가 URL로 요청을 보내면, Spring의 DispatcherServlet이 이를 가장 먼저 받는다.
  2. HandlerMapping을 통해 요청 URL과 매핑되는 Controller를 찾는다.
  3. HandlerAdapter를 통해 매핑된 Controller를 실행한다.
  4. Controller에서 비지니스 로직을 처리한 후, View 이름과 데이터를 반환한다.
  5. DispatcherServlet은 ViewResolver를 사용해 View를 결정하고, 해당 View에 Model 데이터를 전달한다.
  6. View는 데이터를 기반으로 렌더링을 수행하고, 최종 결과를 클라이언트에게 응답한다.

 

스프링 시큐리티란?

더보기

스프링 시큐리티란 스프링 웹 애플리케이션에서 인증과 인증을 담당하는 보안 프레임워크입니다. 웹 애플리케이션에서 로그인, 접근 제어, 세션 관리, CSRF 방지 등의 기능을 손쉽게 구현할 수 있도록 도와줍니다.

 

❓AOP란 무엇인가요?

더보기

AOP란 관점 지향 프로그래밍의 약자로 로깅, 트랜잭션, 보안 처리와 같이 여러 로직에서 공통으로 사용되는 기능을 핵심 비지니스 로직과 분리하여 모듈화하는 방식을 말합니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.

 

❓ @RequestBody, @RequestParam, @ModelAttribute에 대해서 설명해주세요.

더보기
  • @RequestBody: 클라이언트가 전송한 요청의 Body 데이터를 자바 객체로 변환할 때 사용하는 어노테이션입니다. 주로 JSON 형식의 데이터를 받을 때 사용하며, HttpMessageConverter가 동작하여 JSON을 자바 객체로 변환해줍니다. @RequestBody는 ObjectMapper가 객체 필드에 직접 값을 주입하기 때문에 Setter가 없어도 정상적으로 동작합니다.
  • @ReqeustParam: 1개의 HTTP 파라미터를 얻기 위해 사용되며 기본값을 지정할 수 있습니다. 필수 여부가 true이기 때문에 값이 없으면 예외가 발생하고, 반드시 필요한 경우가 아니라면 required를 false로 설정해줘야 합니다.
  • @ModelAttribute: 요청의 Body 데이터를 자바 객체로 바인딩할 때 사용하며, 주로 폼 데이터를 받을 때 사용합니다. @ModelAttribute는 내부적으로 Setter를 통해 값을 주입하기 때문에 Setter가 없으면 저장되지 않습니다. 

 

❓ 필터와 인터셉터의 차이점

더보기
  • 필터(Filter)란 가장 앞단에서 요청과 응답을 가로채서 처리합니다. 예를 들어 인코딩 설정, 로그인 체크, 보안 검사, CORS 처리 같은 공통 작업을 필터에서 수행합니다.
  • 인터셉터는(Interceptor)는 컨트롤러에 진입하기 전/후, 그리고 뷰 렌더링 전/후와 같은 세밀한 지점에서 요청을 가로채 처리할 수 있습니다. 주로 로그 기록, 인증 체크, 사용자 세션 검증 같은 작업에 사용됩니다.
  • 즉, 필터는 전역적인 요청 처리를 담당하고, 인터셉터는 Spring 내부의 컨트롤러 로직 전후 처리에 특화되어 있습니다.

 

❓ JPA의 장점과 단점

728x90
반응형