본문 바로가기
개발 관련 공부/스프링부트 핵심 가이드

02 개발에 앞서 알면 좋은 기초 지식

by 슴새 2023. 10. 1.
반응형

서버 간 통신

마이크로서비스 아키텍쳐(MSA)

어떤 서비스가 회원가입, 결제시스템, 게시판 시스템등을 다 자체개발한 단일 서비스 아키텍쳐라면...

그 거대한 프로젝트는 어쩔 수 없이 변화에 보수적이게 될 것이다. 

그래서 결제 모듈, 회원가입 모듈, 게시판 모듈 등등을 따로 개발하고, 원하는 모듈을 가져와서 사용한다면 애플리케이션 하나에 여러 기능을 넣어 개발하지 않고도 결제시스템, 회원가입, 게시판 등등을 가질 수 있을 것이다. 이렇게 서비스 규모를 작게 나누어 구성한 아키텍처를 MSA 라고 한다.

 

서비스를 MSA로 구성하면 각 모듈을 쓰기 위해 해당 서버와 통신해야 하는 경우가 발생한다.

귀에 못이 박히도록 들었던 서버-클라이언트 구조..

가장 많이 사용하는 방식은 http/https 방식이다.

 

스프링 부트의 동작 방식

출처 https://djcho.github.io/springboot/spring-boot-chapter2-2/

이 그림은 싸피때도 공부했는데 항상 까마득하다.

이런 이론적인 얘기 몰라도 개발하는데는 문제 없었어서ㅎ..잘 와닿지 않는 것 같다.

....겁먹지 말고 하나씩 천천히 봐보자!

 

클라가 요청을 주면 가장 먼저 서블릿 컨테이너가 받는다.

서블릿은 클라의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다.

대표적인 서블릿 컨테이너는 바로 톰캣이다.

서블릿을 지원하는 WAS를 서블릿 컨테이너라고 부르는 것이다.

 

클라한테 요청을 받았고, 서블릿 컨테이너가 그 요청을 받았다.

그럼 이제 Dispatcher Servlet 이라는 애한테 그 요청을 토스한다.

Dispatcher Servlet은 요청에 매핑되는 컨트롤러(=핸들러)를 찾아 요청을 토스한다.

위 그림의 '(1) 핸들러 매핑= 알맞은 컨트롤러 찾기' 참고

그리고 이제 그림의 (2),(3) 과정... 핸들러 어댑터라는 애를 이용해서 찾아놓은 컨트롤러를 호출하고, 응답을 받는다. 

근데 이 응답을 view 로 리턴해야 한다? 뷰 리졸버에게 요청해서 뷰를 받아온 담에 클라한테 돌려준다.

그렇다는건..뷰가 없는 REST 형식의 @ResponseBody를 사용해서 json 형식으로 리턴하면 뷰 리졸버를 거치는 단계는 필요하지 않다는 말이 되겠지.

 

레이어드 아키텍처

출처 https://djcho.github.io/springboot/spring-boot-chapter2-3/

컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 레이어드 아키텍처라고 한다는데...

위 그림은 레이어드 아키텍처를 스프링에 적용한 모습이다.

 

스프링의 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의 차이

반응형

댓글