Spring

DI와 MVC부터 JDBC, 트랜잭션까지 스프링 핵심 원리

  1. 01

    SOLID 원칙과 OCP·DIP를 지키는 방법

    객체지향 5원칙을 정리하고, 역할과 구현을 나눠도 깨지는 OCP·DIP를 AppConfig로 해결하는 과정을 살펴본다.

    4분 읽기
  2. 02

    의존성 주입(DI)과 스프링 컨테이너

    생성자 주입으로 DI를 이해하고, 스프링 빈 등록·조회 방법과 컨테이너가 빈을 싱글톤으로 관리하는 이유를 정리한다.

    6분 읽기
  3. 03

    쓰레드 풀과 싱글톤 서블릿의 동시성 문제

    WAS의 쓰레드 풀이 필요한 이유를 정리하고, 서블릿 멤버 변수에 model을 두면 왜 안 되는지 직접 부딪혀 본 기록.

    4분 읽기
  4. 04

    FrontController 패턴과 핸들러 어댑터로 스프링 MVC 구조 이해하기

    FrontController와 핸들러 어댑터를 직접 구현해 보며 DispatcherServlet이 요청을 처리하는 구조를 이해한다.

    10분 읽기
  5. 05

    @ModelAttribute와 PRG 패턴으로 폼 요청 처리하기

    @RequestParam에서 @ModelAttribute로 폼 처리 코드를 줄이고, PRG와 RedirectAttributes로 중복 등록을 막는다.

    4분 읽기
  6. 06

    System.out 대신 SLF4J로 로그 남기기

    System.out.println 대신 SLF4J 로거를 써야 하는 이유와 로그 레벨 설정, Lombok @Slf4j 사용법을 정리한다.

    4분 읽기
  7. 07

    세션 직접 만들어 보기와 HttpSession

    세션 저장소를 직접 구현해 동작 원리를 이해하고, HttpSession과 @SessionAttribute 사용법을 정리한다.

    6분 읽기
  8. 08

    스프링 인터셉터와 예외 발생 시 오류 페이지 흐름

    인터셉터의 호출 시점과 로그인 체크 구현, 예외가 WAS까지 전달된 뒤 오류 페이지가 다시 요청되는 흐름을 정리한다.

    8분 읽기
  9. 09

    서블릿 Part와 MultipartFile로 파일 업로드 처리하기

    서블릿 Part로 multipart 요청을 직접 처리해 보고, 스프링 MultipartFile이 이를 얼마나 단순하게 만드는지 비교한다.

    5분 읽기
  10. 10

    JDBC로 CRUD 구현하기와 커넥션 풀, DataSource

    순수 JDBC로 CRUD를 구현하며 커넥션과 리소스 정리를 이해하고, 커넥션 풀과 DataSource로 개선한다.

    11분 읽기
  11. 11

    JDBC 트랜잭션에서 스프링 트랜잭션 동기화와 트랜잭션 AOP까지

    커넥션을 파라미터로 넘기던 JDBC 트랜잭션을 트랜잭션 매니저와 @Transactional로 개선하는 과정을 정리한다.

    14분 읽기
  12. 12

    JPA 변경 감지(dirty checking)와 병합(merge)

    준영속 엔티티를 수정하는 두 가지 방법인 병합과 변경 감지의 차이, 그리고 변경 감지를 써야 하는 이유를 정리한다.

    3분 읽기
  13. 13

    서블릿 컨테이너 초기화와 스프링 컨테이너 등록 과정

    WAR 배포 구조부터 ServletContainerInitializer, 스프링 컨테이너와 DispatcherServlet 등록 과정을 코드로 따라간다.

    11분 읽기
  14. 14

    싱글톤 빈의 동시성 문제와 ThreadLocal

    싱글톤 객체의 필드를 여러 쓰레드가 공유할 때 생기는 동시성 문제를 재현하고 ThreadLocal로 해결하는 방법과 주의점을 정리한다.

    6분 읽기