inblog logo
|
DailyCoding
    Spring Boot

    9. Spring 프레임워크의 웹 동작 원리

    박은서's avatar
    박은서
    Feb 05, 2026
    9. Spring 프레임워크의 웹 동작 원리
    Contents
    1. Spring 프레임워크의 웹 동작 원리 (필기)0️⃣ 필기1️⃣ 전체 요청 흐름 한눈에 보기2️⃣ HTTP 요청 기본 구조3️⃣ 웹 서버 & 요청 처리 구조4️⃣ 스프링 컨테이너 내부 구조5️⃣ DB 커넥션과 트랜잭션6️⃣ Open-in-View (OSIV)7️⃣ POST 요청 예시 흐름8️⃣ Redirect vs Forward9️⃣ 핵심 요약2. 반드시 알아야 할 핵심 개념 TOP 61️⃣ 스프링 빈(Bean)과 IoC / DI ⭐⭐⭐⭐⭐2️⃣ 필터(Filter) vs 인터셉터(Interceptor) ⭐⭐⭐⭐3️⃣ 예외 처리 흐름 (@ControllerAdvice) ⭐⭐⭐⭐4️⃣ HTTP 상태 코드 & REST 설계 ⭐⭐⭐⭐5️⃣ 스프링부트 자동 설정(Auto Configuration) ⭐⭐⭐6️⃣ 동시성 & 스레드 안전성 ⭐⭐⭐⭐7️⃣ 보너스 : 한 장으로 정리한 “완성 흐름”

    1. Spring 프레임워크의 웹 동작 원리 (필기)

    0️⃣ 필기

    notion image

    1️⃣ 전체 요청 흐름 한눈에 보기

    브라우저 ↓ (HTTP 요청) 웹서버(Tomcat,8080) ↓ DispatcherServlet (DS) ↓ Controller (C) ↓ Service (S) ↓ Repository (R) ↓ Persistence Context (PC) ↓ Database (DB)
    • 모든 HTTP 요청은 DispatcherServlet이 진입점
    • 스프링 컨테이너 안에서 계층별 역할이 분리됨

    2️⃣ HTTP 요청 기본 구조

    1) 요청(Request)

    • Header
    • Body
    • Method (GET, POST 등)
    • URL

    2) 응답(Response)

    • Status Code (200, 302 등)
    • Header
    • Body

    3️⃣ 웹 서버 & 요청 처리 구조

    1) 웹 서버(Tomcat)

    • 포트: 8080
    • 역할
      • HTTP 요청 수신
      • 요청/응답 객체 생성
      • 스레드 할당

    2) 요청 풀(Request Pool)

    • 동시에 여러 요청 처리
    • 요청마다 스레드 하나 생성
    • 예: 최대 50개 요청 동시 처리

    4️⃣ 스프링 컨테이너 내부 구조

    1) DispatcherServlet (DS)

    • Front Controller
    • 모든 요청의 시작과 끝
    • 역할
      • 요청 URL 매핑
      • Controller 호출
      • View 반환 처리

    2) Controller (C)

    • 사용자 요청 진입 지점
    • 역할
      • URL 매핑 (@GetMapping, @PostMapping)
      • 요청 파라미터 처리
      • Service 호출
    • ❌ 비즈니스 로직 직접 처리 X

    3) Service (S)

    • 비즈니스 로직 담당
    • 역할
      • 트랜잭션 관리 (@Transactional)
      • 여러 Repository 조합
    • 핵심 계층

    4) Repository (R)

    • DB 접근 계층
    • 역할
      • CRUD
      • SQL / JPA 쿼리 실행
    • 보통 JPA Repository 사용

    5) Persistence Context (PC)

    • 영속성 컨텍스트
    • 1차 캐시
    • 변경 감지(Dirty Checking)
    • 트랜잭션 종료 시 DB 반영

    6) Database (DB)

    • 실제 데이터 저장소

    5️⃣ DB 커넥션과 트랜잭션

    1) DB 커넥션 풀 (DBCP)

    • 미리 생성된 DB 연결 관리
    • 예: 최대 20개 커넥션
    • 요청 시:
      • 커넥션 대여 → 사용 → 반납

    2) 트랜잭션 흐름

    Controller → Service (@Transactional) ↓ 트랜잭션 시작 ↓ Repository →DB ↓ 정상 종료 →Commit 예외 발생 →Rollback

    6️⃣ Open-in-View (OSIV)

    1) 개념

    • DB 커넥션 유지 범위 설정

    2) 설정값

    • true (기본값)
      • DB 커넥션이 응답 끝까지 유지
    • false
      • 트랜잭션 종료 시 DB 커넥션 종료
      • 성능·안정성 ↑

    7️⃣ POST 요청 예시 흐름

    1) 예시 요청

    POST /boards/save Content-Type: x-www-form-urlencoded title=a&content=b

    2) 처리 흐름

    브라우저 → Tomcat → DispatcherServlet → Controller → Service (@Transactional) → Repository → DB → 응답 반환

    8️⃣ Redirect vs Forward

    1) Redirect

    return "redirect:/boards";
    • HTTP 상태코드: 302
    • Location 헤더로 URL 재요청
    • 클라이언트가 다시 요청
    • 주소창 변경 O
    📌 사용 목적
    • POST → GET (PRG 패턴)
    • 중복 제출 방지

    2) Forward

    return "viewName";
    • 서버 내부 이동
    • DispatcherServlet에서 View 렌더링
    • 주소창 변경 X
    📌 사용 목적
    • 단순 화면 이동
    • 요청 유지 필요 시

    9️⃣ 핵심 요약

    • 모든 요청의 시작은 DispatcherServlet
    • 비즈니스 로직은 Service
    • DB 접근은 Repository
    • 트랜잭션은 Service 계층
    • DB 커넥션은 DBCP에서 관리
    • OSIV는 DB 커넥션 범위 설정
    • POST 후에는 Redirect 권장

    2. 반드시 알아야 할 핵심 개념 TOP 6

    1️⃣ 스프링 빈(Bean)과 IoC / DI ⭐⭐⭐⭐⭐

    스프링의 정체성

    1) 꼭 알아야 할 포인트

    • 스프링 컨테이너가 객체를 생성·관리
    • 개발자는 new 하지 않음
    • 의존성 주입(DI)으로 객체 연결
    @Service public class BoardService { private final BoardRepository repository; public BoardService(BoardRepository repository) { this.repository = repository; } }

    2️⃣ 필터(Filter) vs 인터셉터(Interceptor) ⭐⭐⭐⭐

    ⚠️ DS 이전·이후에서 무슨 일이 일어나는지도 중요함

    1) Filter

    • 서블릿 스펙
    • DispatcherServlet 이전
    • 예: 인코딩, CORS, 보안

    2) Interceptor

    • 스프링 MVC
    • Controller 전/후
    • 예: 로그인 체크, 권한 검사
    📌 요청 흐름 보완 버전
    Filter → DispatcherServlet → Interceptor → Controller

    3️⃣ 예외 처리 흐름 (@ControllerAdvice) ⭐⭐⭐⭐

    1) 꼭 알아야 하는 이유

    • 실무에서 예외는 항상 발생

    2) 핵심 개념

    • Controller에서 예외 발생
    • @ControllerAdvice가 전역 처리
    @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<?> handle(Exception e) { return ResponseEntity.badRequest().body("error"); } }
    📌 단골 질문:
    • “예외는 어디서 처리하나요?”

    4️⃣ HTTP 상태 코드 & REST 설계 ⭐⭐⭐⭐

    1) 꼭 알아야 할 상태 코드

    • 200 OK
    • 201 Created
    • 400 Bad Request
    • 401 Unauthorized
    • 403 Forbidden
    • 404 Not Found
    • 500 Internal Server Error

    2) REST 응답 예시

    return ResponseEntity .status(HttpStatus.CREATED) .body(result);

    5️⃣ 스프링부트 자동 설정(Auto Configuration) ⭐⭐⭐

    1) 핵심 개념

    • @SpringBootApplication
      • @EnableAutoConfiguration
      • @ComponentScan
      • @Configuration
    ➡️ 의존성 있으면 자동으로 Bean 등록
    (ex: JPA 있으면 EntityManager 자동 생성)
    📌 질문:
    • “스프링부트가 편한 이유는?”

    6️⃣ 동시성 & 스레드 안전성 ⭐⭐⭐⭐

    1) 꼭 알아야 할 사실

    • Controller / Service / Repository는 싱글톤
    • 여러 스레드가 동시에 접근

    2) 주의할 점

    • 필드에 상태 저장 ❌
    // 위험 @Service public class TestService { private int count; }
    📌 단골 질문:
    • “싱글톤 빈은 스레드 안전한가요?”

    7️⃣ 보너스 : 한 장으로 정리한 “완성 흐름”

    Client → Filter → DispatcherServlet → Interceptor → Controller → Service (@Transactional) → Repository → Persistence Context → DB → ExceptionHandler → View / JSON Response
    Share article
    Contents
    1. Spring 프레임워크의 웹 동작 원리 (필기)0️⃣ 필기1️⃣ 전체 요청 흐름 한눈에 보기2️⃣ HTTP 요청 기본 구조3️⃣ 웹 서버 & 요청 처리 구조4️⃣ 스프링 컨테이너 내부 구조5️⃣ DB 커넥션과 트랜잭션6️⃣ Open-in-View (OSIV)7️⃣ POST 요청 예시 흐름8️⃣ Redirect vs Forward9️⃣ 핵심 요약2. 반드시 알아야 할 핵심 개념 TOP 61️⃣ 스프링 빈(Bean)과 IoC / DI ⭐⭐⭐⭐⭐2️⃣ 필터(Filter) vs 인터셉터(Interceptor) ⭐⭐⭐⭐3️⃣ 예외 처리 흐름 (@ControllerAdvice) ⭐⭐⭐⭐4️⃣ HTTP 상태 코드 & REST 설계 ⭐⭐⭐⭐5️⃣ 스프링부트 자동 설정(Auto Configuration) ⭐⭐⭐6️⃣ 동시성 & 스레드 안전성 ⭐⭐⭐⭐7️⃣ 보너스 : 한 장으로 정리한 “완성 흐름”

    DailyCoding

    RSS·Powered by Inblog