Bean 객체와 Bean 생명주기에 대해 설명해주세요.
더보기
-> Bean 객체란 스프링 컨테이너에서 관리되는 객체로, @Component, @Service, @Repository, @Controller 등으로 등록됩니다.
Bean 생명주기는 IOC (Inversion of Control) 컨테이너에 의해 관리되는 객체의 생성부터 소멸까지의 과정을 말합니다.
Bean 생명주기
- 객체 생성 (@Component 등으로 등록)
- 의존성 주입 (@Autowired 등으로 주입)
- 초기화 (@PostConstruct 사용 가능)
- 사용
- 소멸 전 작업 (@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 |