1. 스프링 프레임워크란?
스프링 프레임워크는 IoC(제어의 역전)와 AOP(관점 지향 프로그래밍)를 지원하는 경량의 프레임워크입니다. 자바 애플리케이션 개발을 위한 포괄적인 인프라를 제공하여 개발자가 비즈니스 로직에 집중할 수 있게 도와줍니다.
2. 경량 프레임워크의 의미
스프링이 '경량'이라고 불리는 이유는 POJO(Plain Old Java Object) 기반으로 개발되기 때문입니다.
POJO란?
- 특별한 제약조건 없이 순수하게 자바 언어 사양만 따르는 평범한 자바 객체입니다.
- 특정 프레임워크나 기술에 종속되지 않습니다.
- 상속을 강요하거나 특정 인터페이스 구현을 요구하지 않습니다.
POJO가 아닌 것은?
- 서블릿 클래스처럼 특정 기술에 종속된 객체들입니다.
- 예를 들어 서블릿은 반드시 HttpServlet을 상속받아야 합니다.
서블릿의 활용
스프링 MVC에서는 서블릿을 단 하나만 사용합니다:
- FrontController 역할을 하는 DispatcherServlet 1개만 사용함
- 모든 클라이언트 요청을 최초로 받아 적절한 처리기(핸들러)로 요청을 전달하는 역할을 함
3. IoC(제어의 역전) 지원 방식
스프링은 IoC를 다음과 같은 방식으로 지원합니다:
DI(의존성 주입)를 통한 지원
- 객체 생성과 의존 관계 설정을 개발자가 아닌 프레임워크가 담당함
- 객체 간의 결합도를 낮추고 유연한 코드 작성이 가능함
IoC 컨테이너를 통한 지원
- 빈(Bean)의 생명주기를 관리함
- 객체의 생성, 초기화, 소멸 등의 과정을 자동화함
4. DI(의존성 주입)란?
DI는 객체가 필요로 하는 의존성을 외부에서 주입해주는 디자인 패턴입니다.
DI의 장점
- 재사용성이 향상됨
- 객체 간 결합도가 낮아짐
- 유지보수가 용이해짐
- 테스트가 쉬워짐
DI 주입 방식
- 생성자 주입
- 객체 생성 시점에 의존성을 주입함
- 필수적인 의존성을 강제할 수 있음
- 불변성을 보장함
- 세터 주입
- setter 메소드를 통해 의존성을 주입함
- 선택적인 의존성에 적합함
- 객체 생성 후에도 의존성 변경이 가능함
- 필드 주입
- 필드에 직접 @Autowired 등을 사용하여 주입함
- 코드가 간결함
- 테스트하기 어려운 단점이 있음
5. 주요 어노테이션의 차이점
모두 스프링이 관리하는 Bean으로 등록되지만, 역할에 따라 구분됩니다:
@Component
- 스프링 컴포넌트를 나타내는 기본 어노테이션임
- 다른 스테레오타입 어노테이션의 기본이 됨
@Controller
- Spring MVC의 컨트롤러를 표시함
- 사용자 요청을 처리하고 응답을 반환하는 역할을 함
@Service
- 비즈니스 로직을 처리하는 서비스 계층의 컴포넌트를 표시함
- 트랜잭션 관리가 필요한 곳에 주로 사용됨
@Repository
- 데이터 접근 계층(DAO)의 컴포넌트를 표시함
- 데이터베이스 예외를 스프링의 통합된 예외로 변환해주는 기능이 있음
6. DispatcherServlet의 역할
DispatcherServlet은 Spring MVC의 핵심 구성요소로:
- 모든 웹 요청의 진입점(FrontController) 역할을 함
- 요청을 적절한 컨트롤러에게 전달함
- ViewResolver, HandlerMapping 등과 협력하여 요청 처리 흐름을 조정함
- MVC 패턴의 중앙 제어 장치 역할을 함
처리 과정
- 클라이언트의 요청을 DispatcherServlet이 받음
- HandlerMapping을 통해 요청을 처리할 컨트롤러를 찾음
- 컨트롤러가 비즈니스 로직을 처리하고 결과를 ModelAndView로 반환함
- ViewResolver가 실제 뷰를 찾아 렌더링함
- 클라이언트에게 응답을 반환함
7. ViewResolver의 역할
ViewResolver는 컨트롤러에서 반환한 View 이름을 실제 파일 경로로 변환해주는 역할을 합니다:
- 논리적인 뷰 이름을 물리적인 뷰 파일로 매핑함
- 다양한 뷰 기술(JSP, Thymeleaf, FreeMarker 등)을 지원함
- 뷰 리졸빙 전략을 설정할 수 있음
8. @Controller와 @RestController의 차이
@Controller
- JSP 기반의 프로젝트에서 많이 활용됨
- 일반적인 view 반환(페이지 이동)을 할 때 사용함
- JSON 같은 데이터를 반환하려면 @ResponseBody 어노테이션을 추가해야 함
@RestController
- @Controller + @ResponseBody의 조합임
- Spring REST API 개발에 최적화됨
- 메소드 반환값이 자동으로 HTTP 응답 본문으로 변환됨
- 페이지 반환이 아닌 데이터(JSON, XML 등) 반환에 사용함
두 어노테이션은 같은 요청명이어도 다른 방식이라면 응답/기능이 다르므로 상황에 적절하게 사용해야 합니다. @RestController는 페이지 반환이 필요 없을 때 사용하는 것이 좋습니다.
'Back-End' 카테고리의 다른 글
| [Spring] AOP (1) | 2025.04.23 |
|---|---|
| [Spring] 빈 생명주기 (1) | 2025.04.22 |
| [Spring] 어노테이션 정리 (1) | 2025.04.20 |
| [Spring] 기초 공부1 (1) | 2025.04.19 |
| [Spring] 기초 공부 (1) | 2025.04.15 |