본문 바로가기
web/SpringBoot

SpringBoot 구조와 원리

by 뽀리님 2023. 8. 22.

 

Spring Security를 정리하기 전 Spring Boot 에 대한 동작원리와 구조를 간단하게 이해하고 넘어가는게 좋을꺼 같아 작성해본다.

 

 

우리가 흔히 SpringBoot로 프로젝트를 생성하면 자동으로 만들어지는

@SpringBootApplication 을 볼 수있다.

@SpringBootApplication
public class SwaggerApplication {

   public static void main(String[] args) {
      SpringApplication.run(SwaggerApplication.class, args);
   }

}

 

@SpringBootApplication

- 스프링 컨테이너 생성

Spring Boot 애플리케이션의 주요 설정을 단순화하고, Spring 컨텍스트를 자동으로 구성하는 어노테이션 이며 Spring Boot 애플리케이션을 시작할 때 주요 역할을 수행한다.

 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
      @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

 

이 어노테이션을 까고 들어가보면 위와같이 정의가 되어있는데

스프링 고유 어노테이션인 @SpringBootConfiguration, @EnableAutoConfiguration, @ComponentScan 을 포함하고 있다.

 

  • @SpringBootConfiguration: 스프링 빈 설정을 담당하는 클래스
  • @EnableAutoConfiguration: 클래스 경로(META-INF/spring.factories)에 정의되어 있는  configuration 대상 클래스들을 빈으로 등록하고 프로퍼티 설정을 기반으로 애플리케이션의 구성을 자동으로 설정 
  • @ComponentScan: 컴포넌트 스캔을 활성화하여 컴포넌트(@Component) 들을 검색하고 Spring Bean으로 등록

 

@SpringBootApplication

- 내장 톰캣 생성

스프링 부트가 실행되면서 내부적으로 내장톰켓 서블릿 컨테이너가 실행된다.

 

 

스프링 부트에서 사용자 정의 프로그램를 구현한 서블릿이 DispatchServlet이다. 놈은 FrontController(클라이언트의 모든 요청을 곳으로 받아서 처리) 역할을 한다

, 서버 가장 앞단에서 사용자의 요청을 가장 먼저 받아 요청에 알맞는 Hendler, Controller에서 위임해주는 역할이라 보면된다.

 

 

출처 : https://wrkbr.tistory.com/520

 

 

RESTful API에서도 DispatcherServlet은 비슷한 역할을 수행하지만, 주로 Spring MVC와는 다른 컨셉을 기반으로 작동한다.

ViewResolver를 호출하지 않고 MessageConverter를 거쳐 JSON 형식으로 변환해서 응답한다.

RESTful API는 주로 데이터와 상태를 전달하고 리소스를 다루는 것에 중점을 둔다.

 

DispatcherServlet은 RESTful API에서도 다음과 같은 역할을 한다.

  • 요청 매핑:  클라이언트의 HTTP 요청이 어떤 리소스와 매핑되어야 하는지 결정한다. RESTful API에서는 요청 URL을 통해 리소스와 연결될 수 있도록 매핑되며, 이 리소스는 주로 URI 경로로 표현된다.
  • 요청 처리: 매핑된 리소스에 대한 처리 로직을 실행하고, 클라이언트 요청을 처리한다.. RESTful API에서는 주로 HTTP 메소드(GET, POST, PUT, DELETE 등)와 요청 본문(payload)을 사용하여 요청을 처리한다.
  • 데이터 전송: RESTful API는 주로 데이터를 JSON 또는 XML과 같은 형식으로 전송하고 수신한다.. DispatcherServlet은 요청 본문과 응답 본문을 처리하며, Spring의 @RequestBody와 @ResponseBody 어노테이션을 사용하여 데이터 변환을 지원
  • 응답 생성: 리소스 처리 결과를 기반으로 적절한 HTTP 응답을 생성한다. 응답은 주로 HTTP 상태 코드와 응답 본문으로 구성
  • 컨트롤러의 호출: 리소스와 매핑된 컨트롤러 또는 핸들러 메소드를 호출하여 요청을 처리하고 응답을 생성

 

 

뭐 이정도 개념으로 설명하고 넘어가도 될꺼같아 여기서 마무리하겠다.