🔍 서버 간 통신
- 어떤 포털 사이트를 하나의 서비스 단위로 개발한다고 가정하면, 개발에 보수적인 입장을 취할 수밖에 없고, 서비스 자체의 규모도 커지기 때문에 서비스를 구동하는 데 걸리는 시간도 길어진다.
- 이 같은 문제를 해결하기 위해 나온 것이 마이크로서비스 아키텍처(MSA)이다. 마이크로서비스 아키텍처는 서비스 규모를 작게 나누어 구성한 아키텍처를 뜻한다. 서비스 기능별로 구분해서 독립적인 애플리케이션을 개발하게 되면 각 서비스 간에 통신해야 하는 경우가 발생한다. 서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미하며, 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조이다. 몇 가지 프로토콜에 의해 다양한 통신 방식을 적용할 수 있지만 가장 많이 사용되는 방식은 HTTP/HTTPS 방식이다.
⚙️ 스프링 부트의 동작 방식
- 스프링에서는 DispatcherServlet이 서블릿의 역할을 수행한다. 일반적으로 스프링은 톰캣을 임베드해 사용한다.
- 핸들러 매핑은 요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스이다.
- 뷰 리졸버는 뷰의 렌더링 역할을 담당하는 뷰 객체를 반환한다.
- DispatcherServlet으로 요청(HttpServletRequest)이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 핸들러를 탐색한다. 여기서 핸들러는 컨트롤러(Controller)를 의미한다.
- 그리고 핸들러 어댑터로 컨트롤러를 호출한다.
- 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환한다.
- 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴한다.
💡Spring boot와 Servlet
- Spring boot는 내부적으로 내장 톰켓을 가지고 있다. 즉 스프링 부트가 실행되면서 내부적으로 냉장톰켓 즉 서블릿 컨테이너가 실행된다. 스프링 부트에서 사용자 정의 프로그램을 구현한 프로그램인 서블릿은 DispatchServlet이다. 스프링부트에서 DispatchServlet이 FrontController 역할을 한다. 스프링 부트에 DispatchServlet의 상속 구조이다.
🔍 REST API
- REST 란 Representational State Transfer의 약자로, 웹 기반 시스템에서 자원을 고유한 URI로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 해당 자원의 상태를 읽거나 수정하는 인터페이스를 말한다.
- 이를 통해 클라이언트와 서버 간의 통신을 간단하고 효율적으로 처리하여 자원을 관리하고 정보를 요청하고 전달하는 데 사용된다.
- 즉, REST(Representational State Transfer)는 웹 아키텍처의 스타일이며, 분산 시스템에서 자원을 정의하고 주소를 지정하여 네트워크 상에서 상호작용하는 방법론이고, REST API는 이러한 REST 아키텍처를 따르는 웹 서비스 API를 의미한다. REST는 아키텍처 원칙이고, REST API는 이러한 원칙을 따르는 웹 서비스 인터페이스를 말한다.
💡 REST 의 특징
- 무상태성(Statelessness): 서버는 각 요청을 완전히 독립적으로 처리하며, 클라이언트의 상태를 서버에 저장하지 않는다. 각 요청은 필요한 모든 정보를 포함해야 한다.
- 자원과 URI: 모든 자원(데이터 또는 서비스)은 고유한 URI(Uniform Resource Identifier)로 식별되어야 한다.
- 통일된 인터페이스: HTTP 표준 메소드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 다루는 통일된 인터페이스를 제공한다.
- 클라이언트-서버 구조: 클라이언트와 서버는 각각 독립적으로 발전할 수 있도록 분리되어야 한다.
- 계층화(Layered System): 서버는 다양한 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 캐싱 등을 위해 계층을 추가할 수 있다.
- 캐시(Caching): HTTP 프로토콜의 표준 캐싱 기능을 이용하여 응답을 캐시할 수 있다.
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 스웨거(Swagger) 알아보기 (0) | 2023.10.19 |
---|---|
[Spring Boot] 스프링 부트 알아보기 (0) | 2023.07.24 |
[Spring Boot] @RequestParam & @PathVariable 알아보기 (0) | 2023.06.16 |
[SpringBoot] TDD(TestCode) & JUnit 알아보기 (0) | 2023.05.25 |
[Spring Boot] Controller & RestController 알아보기 (0) | 2023.05.21 |