TIL (Today I Learned)

Spring Boot 면접 대비 개념 정리❕

기만나🐸 2025. 6. 19. 17:30

1. Spring Boot

Spring Boot의 등장 이유

  • 기존 Spring은 설정 XML 또는 Java Config 작성량이 많아 진입 장벽이 높았음
  • Spring Boot는 "관례에 의한 설정"(Convention over Configuration)을 도입하여
        설정 자동화와 생산성 향상을 목표로 등장

Spring Boot의 자동 구성

  • Spring Boot는 `@SpringBootApplication` 애노테이션을 통해 자동 설정(AutoConfiguration)을 활성화
  • `@SpringBootConfiguration`, `@EnableAutoConfiguration`, `@ComponentScan`이 합쳐진 복합 애노테이션
  • 스프링 부트는 명시적인 설정을 줄이고 관례에 따른 자동 구성으로 개발 생산성을 높인다.

Starter의 개념과 장점

  • 의존성 묶음 제공: spring-boot-starter-data-jpa, spring-boot-starter-security
  • 어떤 기능을 쓰고 싶은지만 정하면 세부 라이브러리를 일일이 설정할 필요 없음

내장 톰캣

  • Tomcat 웹 서버를 프로젝트 내부에 포함하고 있어서, 별도로 서버(WAS)를 설치하지 않아도 바로 실행 가능
  • java -jar로 실행 가능한 구조 제공
  • 장점 
    • 서버 환경 설정이 간단해짐
    • 로컬에서 바로 실행 가능 -> 테스트와 개발에 유리
    • 별로 인프라 없이도 컨테이너(Docker) 배포에 유리

 


2. 의존성 주입(DI) 핵심 개념

의존성 주입

  • 내가 직접 객체를 만들지 않고, 스프링이 대신 만들어서 넣어주는 것

IoC 컨테이너란?

  • IoC (Inversion of Control)
  • 객체 생성과 생명주기 관리를 개발자가 아닌 컨테이너(Spring)가 책임지는 구조

@Component, @Service, @Repository

  • 스프링이 자동으로 객체를 만들어서 IoC 컨테이너에 등록해 줄 수 있도록 하는 애노테이션들
  • `@Component`: 모든 스프링 빈의 기본형
  • `@Service`: 비즈니스 로직 계층 표현용 (역할 구분)
  • `@Repository`: DB 접근 계층에 사용, 예외 변환(AOP) 자동 적용

@Autowired / 생성자 주입

  • `@Autowired`는 생성자, 필드, 세터 등 여러 방식에 쓸 수 있음
  • 생성자 주입이 가장 안정적이고 테스트나 불변성 유지에 유리
    • Lombok의 `@RequiredArgsConstructor`를 쓰면 생성자 자동 주입
  • 필드 주입은 테스트나 확장성에 불리 -> 지양

 


3. @Controller vs @RestController

항목 @Controller @RestController
반환 대상 뷰(View) 데이터(JSON)
주요 용도 웹 페이지(HTML) 렌더링 REST API 응답 처리
내부 동작 return값 → ViewResolver가 뷰 이름으로 해석 `@ResponseBody`가 적용되어 객체를 JSON으로 변환
@ResponseBody `@ResponseBody`를 별도로 붙여야 JSON 응답 가능 자동으로 `@ResponseBody` 포함됨

4. AOP 개념과 적용 예시

핵심 개념

  • AOP (Aspect-Oriented Programming) = 관점 지향 프로그래밍
  • 공통 기능(로깅, 보안, 트랜잭션 등)을 핵심 비즈니스 로직과 분리해서 깔끔하게 관리하는 방법

구성요소

용어 설명 예시
Aspect 공통 기능을 모아둔 클래스 로깅 모듈
Advice 실제로 실행될 공통 로직 코드 @Before, @After, @Around 등
Join Point Advice를 적용할 수 있는 지점
(보통 메서드 실행 시점)
서비스 메서드 실행
Pointcut 어떤 Join Point에 Advice를 적용할지 조건을 지정 `com.example.service.*.*(..)`
Weaving Advice를 실제 코드에 끼워넣는 작업 런타임 시 프록시 생성

적용 예

  • 로깅, 트랜잭션 감시, 실행 시간 측정, 인증 체크 등

 


5. 트랜잭션 관리

@Transactional

  • 메서드 단위 또는 클래스 단위 트랜잭션 적용
  • Spring AOP 기반으로 프록시가 메서드 호출 감싸서 트랜잭션 처리
    • [프록시] → 트랜잭션 시작 → 실제 메서드 실행 → 커밋 or 롤백
    • 프록시 외부에서 내부 메서드를 호출할 경우 트랜잭션이 적용되지 않을 수 있음

 


6. 스프링에서 비동기 처리

@Async

  • 비동기 메서드 실행을 위해 @EnableAsync 필요
  • 별도 쓰레드풀에서 비동기 실행

Executor 설정

  • ThreadPoolTaskExecutor Bean 등록을 통해 동시성 및 큐 용량 조절 가능