스프링 부트의 동작 흐름은 위 사진과 같다고 보면 된다.
웹 요청 응답
단일 구성 세션(프론트 서버 1대, 백엔드 서버 1대)
클라이언트 (웹 브라우저)
↓ (요청) ↑ (응답)
백엔드 서버 (WAS, tomcat)
↓ (요청) ↑ (응답)
데이터베이스 [서버]
분산구성 세션 + 레디스(메모리 기반 DB서버) (JWT 프론트 서버 N대 ,백엔드 서버 N대)
클라이언트 (웹 브라우저)
↓ (요청) ↑ (응답)
프런트엔드 서버 (Web Server, nodejs)
↓ (요청) ↑ (응답)
백엔드 서버 (Web Application Server, tomcat)
↓ (요청) ↑ (응답)
데이터베이스 [서버] (MariaDB)
프론트엔드 서버(웹 서버)는 HTTP를 요청 받아 정적 컨텐츠를 제공하는 서버이다.
백엔드 서버(웹 애플리케이션 서버)는 DB조회 서버 내 알고리즘, 비즈니스 로직 등 클라이언트 요청에 따라 동적인 컨텐츠를 제공하는 서버이다.
(뭐 그냥 그렇게 받아들여라...)
스프링부트 구성
필터, 서블릿
스프링 시큐리티(보안, JWT), 스프링 + 부트(서블릿)
↓
컨틀롤러(자바 클래스, @Controller)
↓
서비스(자바 클래스, @Service)
↓
DAO,Repository(자바 클래스, @Repository)
이렇게 구성되어 있다.
- 필터, 서블릿 - 가장 앞단에서 요청을 받음
- 컨트롤러 - DispatcherServlet으로부터 요청을 전달받음
- 서비스 - 컨트롤러부터 비즈니스 로직 처리를 위임받음
- DAO,Repository - 서비스 계증으로부터 데이터 접근 처리를 위임받음
그럼 컨트롤러에 대해서 알아보자
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/")
public String home() {
return "home";
}
}
@Controller을 추가해주면 컨트롤러가 된다.
@RequestMapping -> /을 request받으면 home()메서드가 실행되어서 home을 리턴한다.
그럼 이메서드는 컨트롤러 클래스 안에 있기 때문에 View를 랜더링하겠다는 의도로 해석된다.
뷰는 template파일 탐색하여 home을 찾아서 최종 웹 브라우저에 home.html을 클라이언트에게 반환한다.
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<h1>Home</h1>
</body>
</html>
home.html 파일이다.
그럼 여기서 /을 리퀘스트 받으면 웹 브라우저에 Home을 띄워줘야한다.
home이 잘 띄워지는 것을 볼 수 있다.
스테레오 타입 어노테이션
스테레오 타입 어노테이션은 스프링에서 기본적으로 제공해준다.
@Controller : 요청과 응답을 처리하는 클래스에 사용
@Service: 비즈니스 로직을 구현한 클래스에 사용
@Repository: Persistence 역할을 하는 클래스에 사용 -> DB와 붙어서 사용하는 어노테이션이라고 생각하면 편함
@Component: 위 3가지 애노테이션의 상위(부모) 객체
'Spring' 카테고리의 다른 글
[스프링 부트] - AJAX 요청 파라미터 전달 (1) | 2025.04.24 |
---|---|
[스프링부트] - Web MVC (1) | 2025.04.22 |
[스프링부트] - DI, IoC 와 Bean (0) | 2025.04.22 |
[스프링부트] - Maven 개발환경 준비하기 feat. VSCode (1) | 2025.04.22 |
[SpringBoot/스프링부트] - 서버 템플릿 엔진 (0) | 2025.02.19 |