서버 간 통신
마이크로서비스 아키텍쳐(MSA)
어떤 서비스가 회원가입, 결제시스템, 게시판 시스템등을 다 자체개발한 단일 서비스 아키텍쳐라면...
그 거대한 프로젝트는 어쩔 수 없이 변화에 보수적이게 될 것이다.
그래서 결제 모듈, 회원가입 모듈, 게시판 모듈 등등을 따로 개발하고, 원하는 모듈을 가져와서 사용한다면 애플리케이션 하나에 여러 기능을 넣어 개발하지 않고도 결제시스템, 회원가입, 게시판 등등을 가질 수 있을 것이다. 이렇게 서비스 규모를 작게 나누어 구성한 아키텍처를 MSA 라고 한다.
서비스를 MSA로 구성하면 각 모듈을 쓰기 위해 해당 서버와 통신해야 하는 경우가 발생한다.
귀에 못이 박히도록 들었던 서버-클라이언트 구조..
가장 많이 사용하는 방식은 http/https 방식이다.
스프링 부트의 동작 방식
이 그림은 싸피때도 공부했는데 항상 까마득하다.
이런 이론적인 얘기 몰라도 개발하는데는 문제 없었어서ㅎ..잘 와닿지 않는 것 같다.
....겁먹지 말고 하나씩 천천히 봐보자!
클라가 요청을 주면 가장 먼저 서블릿 컨테이너가 받는다.
서블릿은 클라의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다.
대표적인 서블릿 컨테이너는 바로 톰캣이다.
서블릿을 지원하는 WAS를 서블릿 컨테이너라고 부르는 것이다.
클라한테 요청을 받았고, 서블릿 컨테이너가 그 요청을 받았다.
그럼 이제 Dispatcher Servlet 이라는 애한테 그 요청을 토스한다.
Dispatcher Servlet은 요청에 매핑되는 컨트롤러(=핸들러)를 찾아 요청을 토스한다.
위 그림의 '(1) 핸들러 매핑= 알맞은 컨트롤러 찾기' 참고
그리고 이제 그림의 (2),(3) 과정... 핸들러 어댑터라는 애를 이용해서 찾아놓은 컨트롤러를 호출하고, 응답을 받는다.
근데 이 응답을 view 로 리턴해야 한다? 뷰 리졸버에게 요청해서 뷰를 받아온 담에 클라한테 돌려준다.
그렇다는건..뷰가 없는 REST 형식의 @ResponseBody를 사용해서 json 형식으로 리턴하면 뷰 리졸버를 거치는 단계는 필요하지 않다는 말이 되겠지.
레이어드 아키텍처
컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 레이어드 아키텍처라고 한다는데...
위 그림은 레이어드 아키텍처를 스프링에 적용한 모습이다.
스프링의 MVC 구조에서
View와 Controller: 프레젠테이션 계층 영역
Model: 비지니스와 데이터 접근 계층의 영역이다.
각 계층을 설명하면..
프레젠테이션 계층: 클라한테 데이터와 요청을 받고 응답 전달.
비지니스 계층: 서비스 계층이라고도 함. 핵심 비지니스 로직 구현, 트랜잭션 처리 등
데이터 접근 계층: 데이터베이스에 접근해야 하는 작업 수행. 그림에선 DAO 라 되어있지만 JPA 쓰는 경우에는 DAO 역할을 Repository가 한다.
REST API
REST란?
주고받는 자원에 이름을 규정하고 uri에 명시해 http 메서드(get, post, delete...)를 통해 해당 자원의 상태를 주고받는 것
REST API란?
REST 아키텍처를 따르는 시스템/애플리케이션 인터페이스
REST의 특징
- 일관된 인터페이스: http 표준 규약을 따르기 때문에 플랫폼 및 기술에 종속되지 않고 사용 가능
- Stateless: 서버에 상태 정보를 따로 보관하지 않음. 클라를 기억하지 않는다..
- 클라이언트-서버 아키텍처: 서버는 api를 제공하고 클라는 사용자 정보를 관리하는 구조로 분리해 의존성 낮춤.
- 캐시 가능성: http의 stateless를 극복하기 위한 캐시...rest는 http 표준이므로 http의 캐싱을 쓸 수 있다.
- 레이어 시스템: 서버가 여러 층으로 구성될 수 있으나 클라는 서버와 연결되는 포인트만 알면 된다.
REST의 설계 규칙
- uri의 마지막에는 /를 포함하지 않는다.
- 언더바(_) 대신 하이폰(-)을 사용한다.
- url에는 동사가 아닌 명사를 사용한다. (delete-product 대신 product 사용, 행위는 http 메서드로 표현)
- uri는 소문자로 작성
- 파일 확장자는 uri에 포함 x
참고- uri과 url의 차이
'개발 관련 공부 > 스프링부트 핵심 가이드' 카테고리의 다른 글
06 데이터베이스 연동(3) (0) | 2023.10.28 |
---|---|
06 데이터베이스 연동(2) (2) | 2023.10.14 |
06 데이터베이스 연동(1) (0) | 2023.10.03 |
03 개발환경 구성~05 API를 작성하는 다양한 방법 (0) | 2023.10.02 |
01 스프링 부트란? (0) | 2023.09.30 |
댓글