본문 바로가기

백엔드 면접준비/Spring

2. Spring 핵심개념(기본)

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를 기반으로 하며 트랜잭션 로직을 비즈니스 로직과 분리하여 정의하는 방식
      • 유지보수성, 자동 처리(예외 발생시 자동 롤백)
  • 프로그램 트랜잭션(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 : 모든 트랜잭션을 순차적으로 처리하도록 하는 효과, 한 트랜잭션 내에서 모든 데이터가 완벽하게 고정되어야 하는 업무

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