Back-End

[Spring] 내용 정리

Minch13r 2025. 4. 21. 20:18

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 주입 방식

  1. 생성자 주입
    • 객체 생성 시점에 의존성을 주입함
    • 필수적인 의존성을 강제할 수 있음
    • 불변성을 보장함
  2. 세터 주입
    • setter 메소드를 통해 의존성을 주입함
    • 선택적인 의존성에 적합함
    • 객체 생성 후에도 의존성 변경이 가능함
  3. 필드 주입
    • 필드에 직접 @Autowired 등을 사용하여 주입함
    • 코드가 간결함
    • 테스트하기 어려운 단점이 있음

5. 주요 어노테이션의 차이점

모두 스프링이 관리하는 Bean으로 등록되지만, 역할에 따라 구분됩니다:

@Component

  • 스프링 컴포넌트를 나타내는 기본 어노테이션임
  • 다른 스테레오타입 어노테이션의 기본이 됨

@Controller

  • Spring MVC의 컨트롤러를 표시함
  • 사용자 요청을 처리하고 응답을 반환하는 역할을 함

@Service

  • 비즈니스 로직을 처리하는 서비스 계층의 컴포넌트를 표시함
  • 트랜잭션 관리가 필요한 곳에 주로 사용됨

@Repository

  • 데이터 접근 계층(DAO)의 컴포넌트를 표시함
  • 데이터베이스 예외를 스프링의 통합된 예외로 변환해주는 기능이 있음

6. DispatcherServlet의 역할

DispatcherServlet은 Spring MVC의 핵심 구성요소로:

  • 모든 웹 요청의 진입점(FrontController) 역할을 함
  • 요청을 적절한 컨트롤러에게 전달함
  • ViewResolver, HandlerMapping 등과 협력하여 요청 처리 흐름을 조정함
  • MVC 패턴의 중앙 제어 장치 역할을 함

처리 과정

  1. 클라이언트의 요청을 DispatcherServlet이 받음
  2. HandlerMapping을 통해 요청을 처리할 컨트롤러를 찾음
  3. 컨트롤러가 비즈니스 로직을 처리하고 결과를 ModelAndView로 반환함
  4. ViewResolver가 실제 뷰를 찾아 렌더링함
  5. 클라이언트에게 응답을 반환함

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