Spring 10

[Spring] Spring MVC 요청 처리 흐름 정리

이전 글에서 Servlet이 뭔지, DispatcherServlet이 왜 필요한지를 얘기했다. 이번 글에서는 DispatcherServlet이 요청을 받은 후 실제로 어떤 순서로, 어떤 컴포넌트를 거쳐서 처리하는지를 단계별로 정리한다. 핵심 구조: Front Controller 패턴Spring MVC는 Front Controller 패턴을 사용한다. 모든 HTTP 요청이 하나의 서블릿(DispatcherServlet)을 통과하고, 이 서블릿이 적절한 컴포넌트에 위임하는 구조다.DispatcherServlet 하나만 두면, 나머지는 전부 스프링 빈(@Controller)으로 관리할 수 있다.DispatcherServlet이 없다면? URL마다 서블릿을 하나씩 만들고, web.xml에 매핑하고, 공통 로직(..

Spring 2026.03.31

[Spring] Servlet와 DispatcherServlet

Spring MVC를 공부하면 가장 먼저 나오는 단어가 DispatcherServlet이다. "DispatcherServlet가 모든 요청을 받아서 적절한 Controller에 전달한다"라는 설명은 어디서든 볼 수 있다. DispatcherServlet을 이해하려면 먼저 Servlet이 뭔지 알아야 한다. 그래야 "왜 DispatcherServlet이 필요한지"가 자연스럽게 이해된다. Servlet이란?Servlet은 클라이언트의 HTTP 요청을 받아서 처리하고, HTTP 응답을 만들어 돌려주는 자바 객체다. 웹 브라우저가 http://localhost:8080/hello에 접속하면, 서버 어딘가에서 이 요청을 받아서 "Hello"라는 응답을 만들어줘야 한다. 그 "어딘가"가 바로 Servlet이다. d..

Spring 2026.03.31

1. 순수 Spring 프로젝트 세팅 - build.gradle 직접 구성하기

SpringBoot는 너무 많은 것을 자동으로 해준다. 처음부터 Spring Boot로 시작해서 "이게 왜 동작하지?"라는 의문을 크게 가지지 않고 사용하여 Spring 동작 원리에 대해 가볍게 넘어갔다. 불편함을 직접 경험해야 Spring Boot의 편의성이 체감되고, 원리도 제대로 이해할 수 있다고 생각해서 순수 Spring으로 SpringBoot 및 Spring의 전반적인 흐름을 이해해보려 한다. 순수 Java 프로젝트에서 시작하여 직접 Spring을 세팅하면서 SpringBoot가 무엇을 대신해 주는지 확인해 볼 것이다. 해당 실습은 IntelliJ를 사용하여 진행한다.프로젝트 세팅원래는 start.spring.io에서 프로젝트를 생성해서 IDE에 적용하지만, 순수 Java 프로젝트에서 아래와 ..

Spring/기초부터 2026.03.03

[Gradle] Spring 시작 전에 build.gradle 구조와 의존성부터 알아보기

대부분의 Spring을 처음 시작할 때 start.spring.io에서 프로젝트를 생성하고, build.gradle에 의존성을 추가한 뒤, 바로 Controller를 작성하기 시작한다. 그런데 "왜 build.gradle에 이걸 쓰는지"를 설명해 주는 곳은 많지 않다. 그 부분에 대해 의문점을 가지고 알아보기 위해 이 글을 작성했다. Gradle이란?Gradle은 빌드 도구(Build Tool)로, 빌드 도구가 하는 일은 크게 3가지다.필요한 라이브러리를 인터넷에서 다운로드소스 코드를 컴파일실행 가능한 파일(jar)로 패키징즉, 개발에 필요한 모든 준비를 자동으로 해주는 도우미이다.그럼 왜 Gradle이냐? Gradle 이전에는 Maven이라는 빌드 도구를 많이 썼는데, Maven은 pom.xml이라는 ..

Spring/기초부터 2026.02.21

[Spring] Bean이란?

Bean이란?일반적으로 우리가 객체를 만들 때는 이렇게 직접 생성한다. UserService userService = new UserService(); 근데 Spring에서는 @Service만 붙이면 Spring이 알아서 객체를 만들어서 관리한다.@Servicepublic class UserService {} 이렇게 Spring이 만들고 관리하는 객체를 Bean이라고 한다.왜 Bean을 쓸까?1. 객체 재사용 (Singleton)public class Main { public static void main(String[] args) { UserService service1 = new UserService(); UserService service2 = new UserServi..

Spring 2026.01.24

[Spring] DI(Dependency Injection)

DI(Dependency Injection): 의존성 주입**의존성(Dependency)이란 한 객체가 다른 객체를 사용하는 것public class UserService { private UserRepository repository; // UserService는 UserRepository에 의존한다 public User findUser(Long id) { return repository.findById(id); }}UserService는 UserRepository 없이는 동작할 수 없다. 이게 의존성입니다 **주입(Injection)이란 이 의존성을 외부에서 넣어주는 것public UserService(UserRepository repository) { thi..

Spring 2026.01.12

[Spring] IoC(Inversion of Control)

IoC(Inversion of Control): 제어의 역전평소에 우리는 객체가 필요하면 직접 생성(new)합니다public class UserService { private UserRepository repository = new UserRepository(); public User findUser(Long id) { return repository.findById(id); }}즉, 객체를 내가 만들고, 내가 관리했습니다근데 이렇게 하면 문제가 있습니다UserRepository를 다른 구현체로 바꾸려면 UserService 코드를 수정해야 한다테스트할 때 Mock 객체로 바꿀 수가 없다UserService가 UserRepository의 구체적인 생성 방법을 알아야 한..

Spring 2025.12.31

[Spring] 스프링의 3계층 구조 : Controller, Service, Repository

Spring의 설계 철학Spring Framework 공식 문서는 설계 원칙을 이렇게 명시합니다:"모든 단계에서 선택권을 제공합니다. Spring을 사용하면 설계 결정을 최대한 늦게 연기할 수 있습니다. 예를 들어, 코드를 변경하지 않고도 구성을 통해 지속성 공급자를 전환할 수 있습니다.""다양한 관점을 수용합니다. Spring은 유연성을 중시하며, 작업 방식에 대해 고정관념을 갖지 않습니다.""코드 품질에 대한 높은 기준을 설정하세요. Spring Framework는 패키지 간 순환 종속성 없이 깔끔한 코드 구조를 자랑하는 극소수 프로젝트 중 하나입니다.” 이 철학이 구체적으로 구현된 것이 3계층 구조(Three-Layer Architecture)입니다.각 계층이 독립적이라서, 한 계층을 수정해도 다른..

Spring 2025.12.11

[Spring] @WebMvcTest 401 에러 해결: @AutoConfigureMockMvc vs excludeFilters

문제 상황Spring Security + JWT가 적용된 프로젝트에서 @WebMvcTest로 컨트롤러 테스트 시 JWTFilter 및 SecurityConfig도 제외하면 정상적으로 테스트가 성공할 줄 알았지만 401 Unauthorized 에러가 발생했다@WebMvcTest( controllers = RankController.class, excludeFilters = { @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = JWTFilter.class), @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig...

Spring 2025.12.04

[Spring] Spring과 SpringBoot의 차이

Spring흔히 Spring이라 부르지만 Spring Framework가 정확한 표현이다.자바 엔터프라이즈 개발을 지원하기 위한 대규모 오픈 소스 애플리케이션 프레임워크다.핵심 특징IoC/DIAOPPSAPOJO문제점Spring Framework를 사용하기 위해 다양한 설정을 개발자가 수동으로 직접 구성해야하며 초기 시작에 시간이 많이 걸린다.설정 파일 작성을 통한 스프링 컨테이너 구성Bean 객체 등록DB 연결웹 어플리케이션 구축을 위해 별도의 WAS 설치 등SpringBootSpring의 문제점을 해결해주고 쉽고 빠르게 Spring 기반 애플리케이션을 개발할 수 있도록 도와주는 도구다.주요 특징자동 설정(Auto Configuration)SpringBoot는 애플리케이션의 설정을 자동으로 구성한다.@E..

Spring 2025.10.26
반응형