Spring Boot 면접 대비 개념 정리❕

2025. 6. 19. 17:30·TIL (Today I Learned)

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 등록을 통해 동시성 및 큐 용량 조절 가능
저작자표시 비영리 변경금지 (새창열림)

'TIL (Today I Learned)' 카테고리의 다른 글

DB 개념 정리 🧠 | 정규화/반정규화, 인덱스, 트랜잭션, JOIN  (1) 2025.06.26
JVM의 개념과 내부 구조 정리  (4) 2025.06.19
Synchronous 🆚 Asynchronous | RabbitMQ 기반 비동기 처리 구조  (2) 2025.06.05
JWT 인증 기반 WebSocket 연결 실패, 원인과 해결법  (2) 2025.06.05
Spring Boot 설정값 바인딩 정리: @Value vs @ConfigurationProperties  (2) 2025.05.24
'TIL (Today I Learned)' 카테고리의 다른 글
  • DB 개념 정리 🧠 | 정규화/반정규화, 인덱스, 트랜잭션, JOIN
  • JVM의 개념과 내부 구조 정리
  • Synchronous 🆚 Asynchronous | RabbitMQ 기반 비동기 처리 구조
  • JWT 인증 기반 WebSocket 연결 실패, 원인과 해결법
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    GROUP BY
    다이나믹프로그래밍
    java
    그리디
    bootstrap
    jQuery
    자료구조
    HTML
    greedy
    mysql
    BFS
    jpa
    완전탐색
    시뮬레이션
    백트래킹
    CSS
    Google Fonts
    DFS
    dp
    join
    프로그래머스
    programmers
    javascript
    Subquery
    jwt
    백준
    websocket
    Firebase
    BOJ
    sql
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
Spring Boot 면접 대비 개념 정리❕
상단으로

티스토리툴바