Spring
-
Spring Framework 시리즈 13화 – @Controller와 @RestController 내부 구조와 처리 흐름기술과 산업/언어 및 프레임워크 2025. 6. 5. 11:19
스프링에서 자주 사용하는 @Controller와 @RestController, 그리고 @RequestMapping 애노테이션이 DispatcherServlet과 어떻게 연결되고 처리되는지 흐름 중심으로 설명합니다. @Controller와 @RestController는 뭐가 다른가요? 가장 간단히 정리하면:애노테이션반환 방식용도@Controller뷰 이름웹 페이지 응답 (HTML)@RestControllerHTTP 본문(JSON 등)API 응답즉, @RestController는 사실상 아래 두 가지의 합성입니다.@RestController== @Controller + @ResponseBody DispatcherServlet과 어떻게 연결될까? Spring MVC가 내부적으로 요청을 처리할 때, Dispa..
-
Spring Framework 시리즈 12화 – Spring MVC 구조의 출발점: DispatcherServlet과 요청 처리 흐름기술과 산업/언어 및 프레임워크 2025. 6. 3. 11:49
Spring MVC에서 요청이 들어오면 어떤 경로를 따라 응답이 만들어질까요? DispatcherServlet을 중심으로, HandlerMapping, Controller, ViewResolver까지의 흐름을 자연스럽게 정리합니다.Spring MVC의 진짜 시작점은?우리는 보통 컨트롤러부터 코드를 쓰기 시작합니다.@GetMapping("/hello")public String hello() { return "hello";}근데 정말 이게 전부일까요?이렇게 작성된 코드는 어떻게 실행되고, 어떻게 우리가 작성한 뷰 이름을 찾아가는 걸까요?그 중심에는 바로 DispatcherServlet이 있습니다.사실상 Spring MVC의 모든 요청은 DispatcherServlet을 거쳐서 흐릅니다.Dispatche..
-
Spring Framework 시리즈 11화 – 테스트 가능한 구조 만들기와 DI 테스트 전략기술과 산업/언어 및 프레임워크 2025. 6. 2. 13:16
스프링의 의존성 주입 구조를 테스트에 적합하게 리팩토링하는 방법과 함께, 단위 테스트와 통합 테스트에서 @TestConfiguration, @MockBean, ApplicationContext 활용 전략을 소개합니다. 왜 테스트 가능한 구조가 중요한가? 실무에서 스프링 애플리케이션의 성공 여부는 테스트 전략에 크게 좌우됩니다.하지만 많은 개발자가 기능은 되는데 테스트는 어려운 구조를 만들어냅니다. 그 이유는 다음과 같습니다: new 키워드 남용 → DI 불가내부 의존성 연결이 강함 → Mock 불가Bean 설정이 하드코딩 → 프로파일 분기 실패 이제, 우리가 앞서 만든 DI 기반 계산기 시스템을 테스트 가능한 구조로 바꿔보고, 실제 테스트 코드까지 작성해보겠습니다. 1. 설계 리팩토링 – 인터페이스 ..
-
Spring Framework 시리즈 10화 – 실무 예제: 간단한 DI 기반 계산기 시스템 구현기술과 산업/언어 및 프레임워크 2025. 5. 29. 16:30
스프링 핵심 개념인 @Component, @Autowired, @Value, @EventListener 등을 실제 프로젝트에 통합하여 DI 기반 계산기 시스템을 구현해봅니다. 학습한 이론을 코드로 연결하고 구조적으로 정리합니다.프로젝트 개요우리는 간단한 계산기 시스템을 만들 겁니다.사용자가 두 수와 연산자(+, -, *, /)를 입력하면, 계산을 수행하고 결과를 출력하며, 이벤트 리스너를 통해 로그 또는 통계 처리를 따로 분리합니다.📁 프로젝트 구조src/ └── main/ ├── java/ │ └── com.example.calculator/ │ ├── AppConfig.java │ ├── Calculator.java │ ├..
-
Spring Framework 시리즈 9화 – ApplicationContext의 역할과 이벤트 처리 구조기술과 산업/언어 및 프레임워크 2025. 5. 28. 15:20
Spring의 ApplicationContext는 단순한 Bean 팩토리가 아닙니다. 이 글에서는 ApplicationContext가 제공하는 기능과, 이를 기반으로 구현되는 Spring 이벤트 시스템의 구조와 활용법을 실제 코드 예제 중심으로 설명합니다.ApplicationContext는 BeanFactory의 확장판이다초기에는 모든 DI 컨테이너가 BeanFactory였습니다. 하지만 현재 실무에서는 거의 모든 Spring 기반 프로젝트가 ApplicationContext를 사용합니다.ApplicationContext는 BeanFactory의 모든 기능을 포함하면서, 다음과 같은 부가 기능을 제공합니다:기능 설명메시지 국제화 처리MessageSource이벤트 퍼블리싱ApplicationEventPub..
-
Spring Framework 시리즈 7화 – @Value와 Environment로 설정값 주입하기기술과 산업/언어 및 프레임워크 2025. 5. 27. 19:07
Spring Framework에서 @Value 애노테이션과 Environment 객체를 사용해 외부 설정값을 주입하는 방법을 정리합니다. 프로퍼티 파일을 기반으로 한 환경 구성, 기본값 처리, 환경 분기 방법까지 실습 예제로 소개합니다.왜 외부 설정이 필요한가?코드에 설정값을 하드코딩하면 다음과 같은 문제가 발생합니다.운영 환경마다 값이 달라 배포가 복잡해짐비밀번호나 토큰이 노출되어 보안 취약리팩토링/재사용이 어렵고 유지보수가 힘듦스프링은 설정값을 외부에서 관리할 수 있도록 application.properties나 application.yml 파일을 통해 구성하고, 이를 주입할 수 있는 다양한 방법을 제공합니다.1. @Value 애노테이션 – 간단한 주입@Componentpublic class AppI..
-
Spring Framework 시리즈 6화 – 의존성 순환 오류 해결 전략기술과 산업/언어 및 프레임워크 2025. 5. 27. 19:05
스프링에서 발생할 수 있는 대표적인 구조적 문제, 의존성 순환 오류(Dependency Circular Reference)의 원인과 해결 방법을 예제 중심으로 정리합니다. @Lazy, 세터 주입, 구조 분리 등 실전 대응 전략도 함께 제공합니다.순환 의존성이란 무엇인가?의존성 주입이란 객체 간의 관계를 외부에서 설정해주는 것을 말합니다. 그런데 두 객체가 서로를 참조하면, 객체 생성 시점에서 무한 루프와 같은 문제가 발생하게 됩니다.예를 들어 A → B, B → A가 동시에 일어날 경우, 스프링은 어느 쪽을 먼저 만들어야 할지 결정할 수 없습니다.예제 – 순환 의존성 발생@Componentpublic class A { private final B b; public A(B b) { ..
-
Spring Framework 시리즈 5화 – 스프링 빈 스코프 정리기술과 산업/언어 및 프레임워크 2025. 5. 26. 10:52
Spring Framework의 다양한 빈 스코프(Scope)인 Singleton, Prototype, Request, Session, Application의 동작 방식과 차이점을 예제와 함께 설명합니다. 웹 애플리케이션에서 올바른 스코프 선택이 왜 중요한지도 함께 살펴봅니다. 빈 스코프란 무엇인가?Spring에서 Bean은 기본적으로 ApplicationContext에 의해 관리되며, 생성 방식과 범위를 결정하는 속성이 바로 **스코프(scope)**입니다.스코프는 "이 빈이 어떤 범위로 존재해야 하는가?"를 정의합니다.스프링에서 제공하는 스코프 종류스코프 명칭 적용 대상 설명singleton (기본값)전체 애플리케이션컨테이너 당 1개의 인스턴스prototype요청 시마다호출할 때마다 새로운 인스턴스 ..