애플리케이션이 '어떻게 동작하는지', '왜 이렇게 구성되는지' 개발 배경지식을 알아보자.
전체 애플리케이션이 하나로 되어있어서 보통 동일한 개발 툴을 사용해 개발되며, 배포 및 테스트도 하나의 애플리케이션만 수행하면 되기 때문에 개발 및 환경설정이 간단하다. 또한 각 컴포넌트들이 함수로 호출 되기 때문에 성능에 제약이 덜하고, 운영 관리가 용이하다다. 이런 장점 때문에 작은 볼륨의 시스템을 개발할 때는 매우 유용하지만 시스템이 커지기 시작하고 여러 컴포넌트들이 더해지면 문제가 발생하기 시작한다.
마이크로서비스 아키텍쳐(MSA)는 단어 그대로 서비스 규모를 작게 나누어 구성한 아키텍처를 말한다.
이때 각 컴포넌트는 서비스 형태로 구현되고 API를 이용하여 타 서비스와 통신하게 된다. 각 서비스는 독립된 서버로 타 컴포넌트와 의존성이 없기 때문에 독립된 배포를 하게 된다. 이렇게 되면 부분적인 확장이 가능해져 앞선 상황을 해결할 수 있으며, 각 컴포넌트 간에 통신하는 경우를 ' 서버 간 통신'이라고 한다...(?)
서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미한다. 이는 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조로 몇 가지 프로토콜에 의해 다양한 통신 방식을 적용할 수 있지만 가장 많이 사용되는 방식은 HTTP/HTTPS방식이다.
2.2 스프링 부트의 동작 방식
스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC구조를 기바능로 동작한다.
*MVC 패턴은 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. MVC는 Model, View, Controller로 구성되는데, Model은 애플리케이션의 정보(데이터)를 나타내며, View는 텍스트나 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, Controller는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.
서블릿은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다. 일반적으로 서블릿은 서블릿 컨테이너에서 관리한다. 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너이다.
서블릿 컨테이너의 특징
스프링에서는 DispatcherServlet이 서블리스이 역할을 수행한다. 서블릿 컨테이너와 DispatcherServlet은 자동 설정된 web.xml의 설정값을 공유한다.
2.3 레이어드 아키텍처
2.4 디자인 패턴
2.5 REST API