study/CS

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

으녕오리 2025. 3. 11. 13:13

Spring Batch에 대해 설명해주세요.

더보기

-> Spring Batch는 대량의 데이터를 효율적으로 처리하는 프레임워크로, Job과 Step을 기반으로 구성되며 트랜잭션 관리, 병렬 처리, 재시작 기능 등을 제공합니다.

  • Spring Batch의 주요 구성 요소는 무엇인가요?
    → Job, Step, JobLauncher, JobRepository, ItemReader, ItemProcessor, ItemWriter 등이 있습니다.
  • Job과 Step의 차이점은 무엇인가요?
    → Job은 배치 작업의 전체 흐름을 관리하고, Step은 개별적인 처리 단계를 담당합니다.
  • Spring Batch에서 트랜잭션 관리는 어떻게 이루어지나요?
    → 각 Step에서 Chunk 기반 처리 또는 Tasklet 기반으로 트랜잭션을 관리합니다.
  • ItemReader와 ItemWriter의 역할은 무엇인가요?
    → ItemReader는 데이터를 읽고, ItemWriter는 데이터를 저장하는 역할을 합니다.
  • Spring Batch에서 배치 작업을 예약 실행하는 방법은?
    → Spring Scheduler 또는 Quartz 같은 스케줄러를 사용하여 실행할 수 있습니다.

 

Spring의 레이어드 아키텍처에 대해 설명해주세요.

더보기

-> Spring의 레이어드 아키텍처는 Presentation Layer, Service Layer, Repository Layer로 구성되며,
각각 요청 처리, 비즈니스 로직, 데이터 접근을 담당합니다.

  • 각 레이어의 역할을 자세히 설명해주세요.
    → Presentation Layer는 사용자 요청을 처리하고, Service Layer는 비즈니스 로직을 담당하며, Repository Layer는 DB와의 직접적인 상호작용을 수행합니다.
  • Service Layer를 두는 이유는 무엇인가요?
    → 비즈니스 로직을 분리하여 유지보수를 용이하게 하고, 재사용성을 높이기 위해서입니다.
  • Controller에서 Repository를 직접 호출하면 안 되는 이유는?
    → 레이어 간 결합도를 낮추고, 비즈니스 로직을 분리하여 코드의 가독성과 유지보수성을 높이기 위해서입니다.
  • DTO와 Entity를 분리하는 이유는 무엇인가요?
    → Entity는 DB 테이블과 매핑되고, DTO는 데이터를 전달하는 용도로 사용하여 역할을 분리하기 위해서입니다.
  • AOP(Aspect-Oriented Programming)와 레이어드 아키텍처는 어떻게 연관되나요?
    → AOP를 활용하면 각 레이어에서 공통적으로 필요한 로깅, 트랜잭션 관리 등을 분리하여 적용할 수 있습니다.

 

IoC(Inversion of Control)와 DI(Dependency Injection)에 대해 설명해주세요.

더보기

-> IoC는 객체의 생성과 관리 권한을 개발자가 아닌 컨테이너가 가지는 개념이며, DI는 IoC의 구현 방식 중 하나로 객체 간의 의존성을 외부에서 주입하는 방식입니다.

  • IoC를 사용하면 얻을 수 있는 장점은 무엇인가요?
    → 객체의 생성과 생명 주기를 컨테이너가 관리하여 결합도를 낮추고 확장성을 높일 수 있습니다.
  • DI의 주요 방식에는 어떤 것이 있나요?
    → 생성자 주입, 필드 주입, 메서드 주입이 있습니다.
  • Spring에서 DI를 구현하는 방법은 무엇인가요?
    → @Autowired, @Inject, @Resource 등의 어노테이션을 사용하여 구현할 수 있습니다.
  • Spring 컨테이너의 역할은 무엇인가요?
    → 빈을 생성하고 관리하며, DI를 통해 객체 간의 의존성을 해결합니다.
  • IoC와 DI의 차이점은 무엇인가요?
    → IoC는 제어권을 프레임워크가 갖는 개념이고, DI는 IoC를 실현하는 방법 중 하나입니다.

 

WS(Web Server) vs WAS(Web Application Server)을 설명해주세요.

더보기

-> WS는 정적 리소스를 처리하는 서버이고, WAS는 웹 애플리케이션을 실행하며 동적 처리를 담당하는 서버입니다.

  • 대표적인 Web Server와 WAS는 무엇인가요?
    → Web Server는 Nginx, Apache가 있으며, WAS는 Tomcat, JBoss, WebLogic 등이 있습니다.
  • WAS 없이 Web Server만 사용할 수 있나요?
    → 정적 페이지 제공만 가능하며, 동적 처리는 불가능합니다.
  • Web Server와 WAS를 분리하는 이유는 무엇인가요?
    → 성능 향상, 로드 밸런싱, 보안 강화 등을 위해 분리합니다.
  • WAS의 주요 역할은 무엇인가요?
    → HTTP 요청을 처리하고, 서블릿을 실행하며, 트랜잭션 관리와 세션 관리를 수행합니다.
  • Spring Boot는 WAS가 필요한가요?
    → Spring Boot는 기본적으로 내장 WAS(Tomcat)를 포함하고 있어 별도의 WAS 없이 실행할 수 있습니다.

 

Spring Bean의 라이프사이클은 어떻게 관리되는지 설명해주세요.

더보기

-> 스프링 빈은 객체 생성 → 의존성 주입 → 초기화(초기화 메서드 호출) → 사용 → 소멸(소멸 메서드 호출) 단계를 거칩니다.

  • 스프링 빈의 초기화 과정에서 실행되는 메서드는?
    → @PostConstruct 또는 InitializingBean의 afterPropertiesSet()을 사용할 수 있습니다.
  • 스프링 빈의 소멸 과정에서 실행되는 메서드는?
    → @PreDestroy 또는 DisposableBean의 destroy()를 사용할 수 있습니다.
  • Bean의 라이프사이클을 커스텀할 수 있는 방법은?
    → @Bean(initMethod, destroyMethod) 또는 인터페이스를 구현하여 가능합니다.
  • 싱글톤 빈과 프로토타입 빈의 차이점은 무엇인가요?
    → 싱글톤 빈은 컨테이너에서 하나만 생성되고, 프로토타입 빈은 요청 시마다 새로운 객체가 생성됩니다.
  • BeanPostProcessor의 역할은 무엇인가요?
    → 빈의 초기화 전후에 커스텀 로직을 추가할 수 있도록 도와줍니다.