Spring 47

[Spring 완전 정복 시리즈 - MVC편] 3편 - 서블릿 응답의 모든 것

이전 편에서 서블릿을 통해 클라이언트의 요청을 처리하는 방법을 정리했다면, 이번에는 서버가 클라이언트에게 응답을 보내는 방식에 대해 자세히 알아본다. 서블릿은 HttpServletResponse 객체를 통해 HTTP 응답 메시지를 직접 구성할 수 있게 해준다.1. HttpServletResponse란?HttpServletResponse는 서버가 클라이언트에게 응답을 보낼 때 사용하는 객체로, 다음과 같은 기능을 제공한다:HTTP 응답 코드 설정응답 헤더 설정응답 바디 작성쿠키 추가리다이렉트 처리이 객체를 활용하면 개발자가 응답을 원하는 방식으로 조작할 수 있다.2. 상태 코드, 헤더, 바디 직접 설정하기@WebServlet(name = "responseHeaderServlet", urlPatterns =..

Spring 2025.08.07

[Spring 완전 정복 시리즈 - MVC편] 2편 - 서블릿의 기본 개념과 동작 원리

이번 편에서는 스프링 MVC의 기반이 되는 서블릿(Servlet) 개념을 실제 코드와 함께 정리해본다. 서블릿을 학습하는 이유는 명확하다.“스프링 MVC는 서블릿 위에 구현된 프레임워크”이기 때문에, 서블릿의 원리를 이해하지 못하면 결국 스프링 MVC의 핵심을 놓칠 수밖에 없다.1. 서블릿이란?서블릿은 자바에서 웹 프로그래밍을 가능하게 하는 표준 기술이다.HTTP 요청을 받아 응답을 생성하는 역할을 수행하며, HTML을 동적으로 생성할 수 있다.자바 EE(Jakarta EE)의 일부이며, 스프링 MVC, JSP, Struts 등의 기반이 된다.2. 서블릿 등록하기 스프링 부트를 사용하면 서블릿을 간단히 등록할 수 있다.@ServletComponentScan // 서블릿 자동 등록@SpringBootApp..

Spring 2025.08.07

[Spring 완전 정복 시리즈 - MVC편] 1편 - 웹 애플리케이션의 이해

이번 편에서는 스프링 MVC의 시작점인 웹 애플리케이션의 기본 구조와 개념을 살펴본다.서블릿, WAS, 스레드, SSR과 CSR까지, 우리가 백엔드 개발자로서 반드시 알고 있어야 할 기반 지식을 먼저 짚고 넘어가자.1. 웹 서버 vs 웹 애플리케이션 서버(WAS)웹 서버: 정적인 HTML, CSS, JS, 이미지 같은 리소스를 클라이언트에게 그대로 전달WAS (Web Application Server): 클라이언트 요청에 따라 동적으로 비즈니스 로직을 실행하고 결과 데이터를 만들어 전달⟶ 둘을 함께 사용하면웹 서버는 정적인 리소스를 처리하고, WAS는 복잡한 비즈니스 로직을 전담하여 시스템 효율을 높일 수 있다.2. 서블릿(Servlet)의 등장과 역할HTTP 요청/응답의 처리 과정을 보면 다음과 같은 ..

Spring 2025.08.02

[Spring 완전 정복 시리즈] 마지막편 - 기본편 완강 회고 및 마무리

항상 물심양면 지원해주신 멘토님, 깊은 인사이트와 학습 기회를 주셔서 진심으로 감사합니다. 스프링을 처음 접했을 때는 단순히 “자바 웹 프레임워크”라는 정도의 인식만 가지고 있었다.하지만 김영한님의 스프링 핵심 원리 - 기본편 강의를 완강하고 나니, 단순히 기술을 사용하는 것을 넘어스프링의 철학과 아키텍처, 그리고 객체 지향 설계 원칙까지 깊이 이해하게 되었다.어떤 내용을 공부했는가?1. 스프링의 탄생과 철학스프링이 왜 등장하게 되었는지, 그리고 기존 EJB의 문제점을 어떻게 개선했는지부터 시작했다.스프링은 단순히 프레임워크가 아니라, 객체지향 프로그래밍을 실현하기 위한 도구라는 본질을 알게 됐다.2. 스프링 컨테이너와 DI (의존관계 주입)ApplicationContext의 개념부터 빈 등록 방식, 자..

Spring 2025.08.02

[Spring 완전 정복 시리즈] 23편 - 빈 스코프 완전 정복 (3): Provider vs 프록시, 그리고 정리

이번 편에서는 웹 스코프 빈을 싱글톤 빈에서 안전하게 사용하는 두 가지 대표적인 방식인Provider 방식과 프록시 방식을 비교하며 각각의 작동 원리와 장단점을 정리한다.마지막으로 지금까지 학습한 빈 스코프의 핵심 포인트를 복습 퀴즈와 함께 정리해보자.1. 싱글톤 빈에서 웹 스코프 빈을 사용하는 문제@Scope(value = "request")@Componentpublic class MyLogger { ... }@Controller@RequiredArgsConstructorpublic class LogDemoController { private final MyLogger myLogger; // X 오류 발생 가능} MyLogger는 요청 스코프이지만, LogDemoController는 싱글톤 스코프..

Spring 2025.08.01

[Spring 완전 정복 시리즈] 22편 - 빈 스코프 완전 정복 (2): 웹 스코프와 Provider/프록시 패턴

이전 편에서는 싱글톤과 프로토타입 스코프에 대해 정리했다.이번 편에서는 실제 웹 애플리케이션에서 자주 사용되는 웹 스코프(Request, Session 등)의 개념과스프링에서 이를 안전하게 사용하는 방법을 알아본다. 웹 스코프란?웹 스코프는 웹 요청(Request)과 세션(Session)의 생명주기에 따라 빈의 생존 범위를 지정한다.스코프 이름생존 범위request하나의 HTTP 요청이 들어와서 나갈 때까지session하나의 HTTP 세션이 생성되어 종료될 때까지application서블릿 컨텍스트(ServletContext) 범위websocket웹소켓 연결이 유지되는 동안 Request 스코프 사용 예시@Component@Scope(value = "request")public class MyLogger ..

Spring 2025.08.01

[Spring 완전 정복 시리즈] 21편 - 빈 스코프 완전 정복 (1): 싱글톤과 프로토타입

이번 편부터는 스프링 빈의 생존 범위를 제어하는 ‘스코프(scope)’에 대해 알아본다.특히 실무에서 잘못 이해하고 사용하면 큰 문제가 되는 프로토타입 스코프와 웹 스코프도 예제와 함께 꼼꼼히 정리해본다. 빈 스코프란? 스프링 컨테이너는 일반적으로 애플리케이션 시작 시점에 빈을 생성하고, 종료 시점에 함께 소멸시킨다.이는 기본적으로 빈이 싱글톤 스코프로 등록되기 때문이다. 여기서 스코프(Scope)란, “빈이 존재할 수 있는 생존 범위“를 의미한다.스프링이 지원하는 주요 스코프스코프 이름설명스코프 이름설명singleton기본 스코프. 컨테이너 시작~종료까지 같은 인스턴스 사용prototype요청할 때마다 새로운 빈 생성. 생성·의존 주입·초기화까지만 컨테이너가 관리request하나의 HTTP 요청 동안 ..

Spring 2025.08.01

[Spring 완전 정복 시리즈] 20편 - 빈 생명주기 콜백과 초기화 전략 정리

빈 생명주기란?스프링에서 하나의 빈은 다음과 같은 라이프사이클을 가진다.객체 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백초기화 작업은 객체가 의존관계 주입이 끝난 후에 실행되어야 하며, 소멸 작업은 스프링 컨테이너가 종료되기 직전에 실행된다.왜 객체 생성과 초기화를 분리해야 할까?객체 생성 시점: new 키워드로 메모리 할당. 이 시점엔 의존관계가 주입되지 않음초기화 시점: 의존관계가 모두 주입된 이후, 실제 외부 연결 등 무거운 작업 수행 따라서 생성자에서는 객체 생성만 담당하고, 외부 커넥션이나 설정은 따로 초기화 메서드로 분리하는 것이 바람직하다.생명주기 콜백 지원 방식 3가지1. 인터페이스 방식 (InitializingBean, DisposableBean)public clas..

Spring 2025.07.31

[Spring 완전 정복 시리즈] 19편 - 자동 주입 고급 기능과 전략 패턴 적용법

이전 편에서는 스프링이 제공하는 다양한 의존관계 자동 주입 방식에 대해 살펴봤다. 이번 편에서는 그보다 더 나아가, 실무에서 자주 쓰이는 고급 자동 주입 기능들을 정리해본다.빈이 여러 개일 때 발생하는 문제@Autowiredprivate DiscountPolicy discountPolicy;위 코드처럼 타입으로 자동 주입할 때, 해당 타입의 빈이 2개 이상 등록되어 있으면 예외가 발생한다. 스프링은 내부적으로 ac.getBean(DiscountPolicy.class)와 같은 방식으로 동작하기 때문에, 동일 타입의 빈이 여러 개면 어떤 빈을 선택해야 할지 알 수 없다.해결 방법 1: @Primary 우선순위 지정@Component@Primarypublic class RateDiscountPolicy imp..

Spring 2025.07.30

[Spring 완전 정복 시리즈] 18편 - 의존관계 자동 주입 방식 완전 정리

이전 편에서는 다양한 방식으로 의존성을 주입하는 법에 대해 살펴봤다. 이번 편부터는 스프링이 제공하는 의존관계 자동 주입의 모든 방식을 정리하고, 실제 현업에서는 어떤 방식이 가장 효과적인지 비교 분석해본다.생성자 주입 - 가장 권장되는 방식@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discou..

Spring 2025.07.30