Q. Spring이란?
- 자바 플랫폼의 오픈소스 프레임워크
- 핵심기능 : IoC(DI), AOP
- 목적 : 객체 관리와 결합도 감소를 통한 유지보수성 향상
Q. IoC 컨테이너란?
- 객체 생성과 관리, 의존성 주입을 담당하는 컨테이너
- BeanFactory : 기본 Ioc 기능 제공(지연 로딩 : 빈이 실제로 요청될 대 생성)
- ApplicationContext : BeanFactory의 확장으로 국제화/이벤트처리/AOP 등을 제공(즉시 로딩)
Q. Spring context(ApplicatoinContext)
- Spring 프레임워크가 제공하는 Ioc컨테이너를 의미
- 빈(Bean)의 생성, 의존성 주입(DI), 라이프사이클 관리 등 객체를 관리하는 역할
주요 특징
- 빈 관리(Bean Management) : 객체의 생성, 초기화, 관리 및 소멸까지 라이프사이클을 관리
- 의존성 주입(Dependency Injection) : 객체의 의존성을 스프링 컨테이너가 자동으로 주입
- AOP 지원(Aspect-Oriented Programing)
- 이벤트 발행(Event Publishing)
Q. 빈(Bean)의 라이프 사이클
- 생성(인스턴스화) -> 의존성 주입 -> 초기화 -> 사용 -> 소멸
Q. 빈(Bean)의 Scope는 무잇이 있나?
- Singleton : 기본값, 컨테이너당 1개
- Prototype : 요청할 때마다 새 빈 생성
- Request : HTTP 요청마다 생성
- Session : 세션마다 생성
- Application : ServletContext 하나당 빈 생성
Q. 의존성 주입(Dependency Injection)이란 무엇인가?
객체를 직접 생성하지 않고 Spring 프레임워크로부터 주입받아 사용하는 방식
목적 및 장점
- 결합도 감소 : 추상화에만 의존하고, 외부에서 실제 구현체를 주입받기 때문
- 테스트 용이성
- 유지보수성 : 코드가 변경되더라고 외부 설정만 변경(ex. DB변경)
의존성 주입 방법(3가지 주요 방식)
- (권장)생성자 주입(컴파일 단계에서 에러발견/순화잠조 예방, 불변성 보장, 의존성 누락 방지, 테스트 용이성)
- Setter 주입
- 필드 주입
Q. @Component vs @Bean
- @Component : 클래스 단위로 등록
- @Bean : 메서드 단위로 수동 등록 및 설정 가능
Q. AOP(Aspect-Oriented Programming, 관점 지향 프로그래밍)란 무엇인가?
핵심 비즈니스 로직과 공통으로 사용하는 부가적인 로직(로깅, 보안, 트랜잭션 등)을 분리하여 모듈화 하는 프로그래밍 기법
코드 중복을 줄이고 유지보수를 용이하게 함
Q. Spring의 트랜잭션 관리방식?
- 선언적 트랜잭션(@Transactional)
- AOP를 기반으로 하며 트랜잭션 로직을 비즈니스 로직과 분리하여 정의하는 방식
- 유지보수성, 자동 처리(예외 발생시 자동 롤백)
- AOP를 기반으로 하며 트랜잭션 로직을 비즈니스 로직과 분리하여 정의하는 방식
- 프로그램 트랜잭션(TransactionTemplate)
- 코드 내에서 직접 트랜잭션 시작, 커밋, 롤백을 하는 방식
- 세밀한 제어 가능, 코드 혼잡, 유연성 뛰어남
- 코드 내에서 직접 트랜잭션 시작, 커밋, 롤백을 하는 방식
Q. @Tracnsactionl 어노테이션 동작원리
- AOP를 기반으로 프록시(Proxy)를 사용한 트랜잭션 적용
- public 메서드에만 사용 가능 : 외부에서 호출되지 않는 non-public은 프록시를 거치지 않기 때문
- 자가 호출(Self-invocation) 문제 : 같은 클래느 내의 메서드 호출은 프록시를 통하지 않고 직접 호출되기 때문
- 트랜잭션 전파(Propagation) 및 격리(Isolation) 설정 가능
- 전파(Propagation)
- REQUIRED : 기본, 존재하면 기존 사용
- REQUIRED_NEW : 무조건 새로운 트랜잭션 생성
- SUPPORTS, MANDATORY등...
- 격리(Isolation)
- READ_UNCOMMITTED : 커밋되지 않은 변경사항 읽을 수 있음, 데이터의 정확성보다 성능이 중요한 경우
- READ_COMMITTED : 커밋된 데이터만 읽을 수 있음, 읽기 일관성이 어느정도 보장되며 높은 처리량이 요구되는 일반적인 시스템
- REPEATABLE_READ : 같은 트랜잭션 내에서 동일한 데이터를 여러 번 읽더라고 결과가 일관되게 유지, 은행 계좌 확인 등 동일 데이터의 다중 조회가 필요한 경우
- SERIALIZABLE : 모든 트랜잭션을 순차적으로 처리하도록 하는 효과, 한 트랜잭션 내에서 모든 데이터가 완벽하게 고정되어야 하는 업무
- 전파(Propagation)
Q. Spring Webflux
- 비동기, 논블로킹 앱 애플리케이션
Q. Spring Cloud
- MSA 환경의 서비스 등록, 검색, 부하 분산 등 지원
'백엔드 면접준비 > Spring' 카테고리의 다른 글
5. Spring Data JPA (0) | 2025.03.16 |
---|---|
4. Spring Boot (0) | 2025.03.16 |
3. Spring MVC (0) | 2025.03.16 |
1. @Async(비동기) (1) | 2025.03.10 |