study/CS

CS 면접 예상 질문 - Spring(1)

으녕오리 2025. 3. 5. 17:24

Bean 객체와 Bean 생명주기에 대해 설명해주세요.

더보기

-> Bean 객체란 스프링 컨테이너에서 관리되는 객체로, @Component, @Service, @Repository, @Controller 등으로 등록됩니다.

Bean 생명주기는 IOC (Inversion of Control) 컨테이너에 의해 관리되는 객체의 생성부터 소멸까지의 과정을 말합니다.

 

Bean 생명주기

  1. 객체 생성 (@Component 등으로 등록)
  2. 의존성 주입 (@Autowired 등으로 주입)
  3. 초기화 (@PostConstruct 사용 가능)
  4. 사용
  5. 소멸 전 작업 (@PreDestroy 사용 가능)
  • Spring에서 Bean을 싱글톤으로 관리하는 이유는 무엇인가요?
    -> 객체 생성을 최소화해 메모리 사용을 줄이고, 성능을 최적화하기 위함입니다.
  • Bean 생명주기에서 초기화와 소멸 과정이 중요한 이유는 무엇인가요?
    -> 리소스 할당 및 해제를 안전하게 처리하여 메모리 누수를 방지하기 위함입니다.
  • 싱글톤 패턴과 Spring의 싱글톤 Bean의 차이점은 무엇인가요?
    -> 싱글톤 패턴은 직접 객체를 관리하지만, 스프링 싱글톤 Bean은 컨테이너가 관리합니다.
  • Prototype 스코프의 Bean은 언제 사용하나요?
    -> 매번 새로운 객체가 필요할 때 사용하며, 상태를 가지는 객체에 적합합니다.
  • ApplicationContext와 BeanFactory의 차이점은 무엇인가요?
    -> ApplicationContext는 더 많은 기능(이벤트, AOP 등)을 제공하며, BeanFactory는 단순한 Bean 생성 및 관리 기능을 제공합니다.

 

Cors란 무엇인가요?

더보기

-> CORS(Cross-Origin Resource Sharing)는 웹 브라우저에서 다른 도메인의 리소스를 요청할 때 보안 정책을 설정하는 메커니즘입니다. 서버에서 Access-Control-Allow-Origin 등의 헤더를 설정하여 허용할 도메인을 지정할 수 있습니다.

  • CORS 정책이 없다면 어떤 문제가 발생할까요?
    -> 악성 사이트가 사용자의 데이터를 탈취하는 등의 보안 문제가 발생할 수 있습니다.
  • CORS를 설정하는 방식에는 어떤 것이 있나요?
    -> HTTP 헤더 설정, Spring에서 @CrossOrigin 어노테이션 사용, WebMvcConfigurer 설정 등이 있습니다.
  • CORS와 Same-Origin Policy의 차이점은 무엇인가요?
    -> Same-Origin Policy는 기본적으로 다른 도메인의 요청을 차단하며, CORS는 예외적으로 허용할 수 있도록 하는 정책입니다.
  • CORS 요청에서 preflight 요청이란 무엇인가요?
    -> 브라우저가 실제 요청 전에 OPTIONS 메서드로 허용 여부를 확인하는 요청입니다.
  • JSONP와 CORS의 차이점은 무엇인가요?
    -> JSONP는 <script> 태그를 이용한 우회 방식이며, CORS는 서버에서 명시적으로 허용하는 방식입니다.

 

영속성 컨텍스트는 무엇인가요?

더보기

-> JPA에서 엔티티 객체를 관리하는 공간으로, 1차 캐시, 변경 감지(Dirty Checking), 지연 로딩 등의 기능을 제공합니다.

  • 영속성 컨텍스트가 1차 캐시를 제공하는 이유는 무엇인가요?
    -> 동일한 엔티티에 대한 중복 조회를 방지하고 성능을 최적화하기 위함입니다.
  • Dirty Checking(변경 감지)이란 무엇인가요?
    -> 트랜잭션이 종료될 때 변경된 필드를 자동으로 감지하여 DB에 반영하는 기능입니다.
  • 영속성 컨텍스트의 생명주기는 어떻게 되나요?
    -> EntityManager가 생성될 때 시작되고, close()가 호출되면 종료됩니다.
  • 영속성 컨텍스트가 제거되면 어떤 일이 발생하나요?
    -> 1차 캐시가 사라지며, JPA가 엔티티를 더 이상 관리하지 않게 됩니다.
  • OSIV(Open Session In View) 패턴이란 무엇이며, 장단점은 무엇인가요?
    -> 영속성 컨텍스트를 View 렌더링까지 유지하는 패턴이며, 지연 로딩 문제 해결에 유용하지만, 과도한 DB 커넥션 점유 문제가 발생할 수 있습니다.

 

JPA N+1 문제에 대한 설명과 해결 방법에 대해 설명해주세요.

더보기

-> N+1 문제란?
하나의 쿼리(N)를 실행하면 연관된 엔티티를 가져오기 위해 추가로 1개의 쿼리가 발생하는 문제입니다.

해결 방법

  • Fetch Join 사용 (@Query 또는 JOIN FETCH)
  • EntityGraph 활용 (@EntityGraph)
  • Batch Size 조정 (@BatchSize)
  • N+1 문제가 성능에 미치는 영향은 무엇인가요?
    -> 불필요한 쿼리가 다수 실행되면서 성능 저하가 발생합니다.
  • 즉시 로딩(EAGER)과 지연 로딩(LAZY)의 차이점은 무엇인가요?
    -> EAGER는 즉시 조회하며, LAZY는 필요한 순간에 조회합니다.
  • Fetch Join과 일반 Join의 차이점은 무엇인가요?
    -> Fetch Join은 엔티티를 조회하며, 일반 Join은 연관된 데이터를 조인할 뿐입니다.
  • Hibernate의 @BatchSize는 어떤 원리로 동작하나요?
    -> 여러 개의 엔티티를 한 번의 IN 쿼리로 조회하여 N+1 문제를 완화합니다.
  • JPA가 제공하는 기본 Fetch 전략은 무엇인가요?
    -> @OneToMany는 LAZY, @ManyToOne은 EAGER가 기본 전략입니다.

 

Spring Boot와 Spring Framework의 차이점을 설명해주세요.

더보기

-> Spring Boot는 Spring Framework를 기반으로 설정을 최소화하고 자동 설정(Auto Configuration)을 제공하는 프레임워크입니다.

  • Spring Boot의 자동 설정(Auto Configuration)은 어떻게 동작하나요?
    -> @EnableAutoConfiguration과 spring.factories를 이용해 필요한 설정을 자동으로 로드합니다.
  • Spring Boot에서 내장 웹 서버를 사용하는 이유는 무엇인가요?
    -> 별도의 WAS 설정 없이 실행이 가능하여 배포가 간편해지기 때문입니다.
  • Spring Boot Starter 패키지는 무엇이며, 어떤 이점이 있나요?
    -> 프로젝트에 필요한 라이브러리를 한 번에 추가할 수 있도록 도와주는 패키지입니다.
  • Spring Boot의 주요 장점과 단점은 무엇인가요?
    -> 장점: 빠른 개발, 설정 최소화 / 단점: 불필요한 설정 로딩으로 인한 메모리 사용 증가
  • Spring Boot에서 Application Runner와 CommandLine Runner의 차이점은 무엇인가요?
    -> 둘 다 애플리케이션 시작 시 실행되지만, ApplicationRunner는 ApplicationArguments를 인자로 받습니다.

'study > CS' 카테고리의 다른 글

CS 면접 예상 질문 - Spring(3)  (0) 2025.03.12
CS 면접 예상 질문 - Spring(2)  (0) 2025.03.11
CS 면접 예상 질문 - Java(3)  (0) 2025.03.04
CS 면접 예상 질문 - Java(2)  (0) 2025.02.26
CS 면접 예상 질문 - Java(1)  (0) 2025.02.25