서버 간 통신
사용자가 블로그 기능을 사용하기 위해 로그인 서비스를 거쳐야만 하는 상황이 있는데 이 상황에서의 통신을
'서버 간 통신'이라고 한다.
서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미하며, 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조이다. 다양한 통신 방식이 적용 가능 하지만 가장 많이 사용하는 통신 방식은 HTTP/HTTPS 방식이다.
스프링 부트의 동작 방식
스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC구조를 기반으로 동작한다.
서블릿은 서블릿 컨테이너에서 관리하고 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너이다.
서블릿 컨테이너의 특징
- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리.
- 서블릿 객체는 싱글톤 패턴으로 관리.
- 멀티 스레딩 지원.
스프링에서는 DispatcherServlet이 서블릿의 역할을 수행.
DispatcherServlet의 동작
- DispatcherServlet로 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 핸들러를 탐색.
- 핸들러 어댑터로 컨트롤러 호출
- 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환.
- 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴.
뷰를 사용하는 DispatcherServlet의 동작 방식
@RestController를 사용하는 DispatcherServlet의동작방식
레이어드 아키텍처
레이어드 아키텍처란 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미하고 어떻게 설계하느냐에 따라 용어와 계층의 수가 달라진다.
(일반적으로 레이어드 아키텍처라 하면 3계층 또는 4계층 구성을 의미한다. 이 차이는 인프라 레이어의 추가 여부로 결정된다,)
레이어드 아키텍처 3계층
1. 프레젠테이션 계층
- 애플리케이션의 최상단 계층으로, 클라이언트의 요청을 해석하고 응답하는 역할.
- UI나 API를 제공.
- 별도의 비지니스 로직을 포함하지 않고 비지니스 계층으로 요청을 위임하고 결과를 응답하는 역할만 수행.
2. 비지니스 계층
- 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할 수행.
- DDD기반의 아키텍처에서는 비지니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 한다.
3. 데이터 접근 계층
- 데이터 베이스에 접근하는 일련의 작업을 수행.
레이어드 아키텍처는 하나의 애플리케이션에도 적용되지만 애플리케이션 간의 관계를 설명하는 데도 사용 가능.
레이어드 아키텍처 기반 설계의 특징
- 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받는다.
- 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않는다
- ---- 각 컴포넌트 역할이 명확하므로 코드의 가동성과 기능 구현에 유리
- ---- 코드의 확장성도 좋아진다.
- 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이하다.
스프링의 레이어드 아키텍처
Spring MVC는 Model-View-Controller의 구조로 View와 Controller는 프레젠테이션 계층 영역이며, Model은 비지니스와 데이터 접근 계층의 영역으로 구분할 수 있다.
스프링의 레이어드 아키텍처의 특징
1. 프레젠테이션 계층
- 상황에 따라 유저 인터페이스 계층이라고 한다.
- 클라이언트와의 접점이 된다.
- 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할.
2. 비지니스 계층
- 상황에 따라 서비스 계층이라고 한다.
- 핵심 비지니스 로직을 구현하는 영역이다.
- 트랜잭션 처리나 유효성 검사 등의 작업도 수행한다.
3. 데이터 접근 계층
- 상황에 따라 영속 계층이라고도 한다.
- 데이터베이스에 접근해야하는 작업을 수행한다.
REST API
REST란?
월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식이다.
주고받는 자원에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미한다.
REST API란?
먼저 API는 'Application Programming Interface'의 약자로, 애플리케이션에서 제공하는 인터페이스를 의미합니다.
API를 통해 서버 또는 프로그램 사이를 연결할 수 있다. 즉, REST API는 REST 아키텍처를 따르는 시스템/애플리케이션 인터페이스라고 볼 수 있다.
REST의 특징
유니폼 인터페이스
REST 서버는 HTTP 표준 전송 규약을 따르기 때문에 어떤 프로그래밍 언어로 만들어졌냐와 상관없이 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호환해 사용할 수 있다는 것을 의미.
무상태성
무상태성이란 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미.
이런 구성의 서비스는 서버가 불필요한 정보를 관리하지 않으므로 비지니스 로직의 자유도가 높고 설계가 단순하다.
캐시 가능성
REST는 HTTP 표준을 그대로 사용하므로 HTTP의 캐싱 기능을 적용할 수 있다.
캐싱이 가능한 경우 클라이언트에서 캐시에 저장해두고 같은 요청에 대해서는 해당 데이터를 가져다 사용한다.
이 기능을 사용하면 서버의 트랜잭션 부하가 줄어 효율적이며 사용자 입장에서 성능이 개선된다.
레이어 시스템
REST 서버는 네트워크 상의 여러 계층으로 구성될 수 있다. 그러나 서버의 복잡도와 관계없이 클라이언트는 서버와 연결되는 포인트만 알면 된다.
클라이언트 ㅡ 서버 아키텍처
REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계한다. 이 구성은 서로에 대한 의존성을 낮추는 기능을 한다.
'스프링' 카테고리의 다른 글
JPA N + 1 문제와 해결 방법 (0) | 2023.11.14 |
---|---|
DTO매핑을 해야하는 이유 (0) | 2023.11.13 |
스프링 부트 핵심가이드 9장 (0) | 2023.04.07 |
스프링 부트 핵심 가이드 5장 (0) | 2023.04.04 |
스프링 부트 핵심 가이드 (0) | 2023.04.04 |