스프링 부트 핵심 가이드 책을 통한 글 입니다.

단일 서비스 아키텍처는 어떤 포털사이트를 하나의 서비스 단위로 개발한다. 즉, 블로그, 카페, 메일 등의 기능등을 하나의 애플리케이션으로 통합한다. 하지만 유지보수 시 한번에 유지보수 해야 하기 때문에 어렵고 서비스 규모도 커지기 때문에 서비스를 구동하는 시간도 오래 걸린다. 이를 해결하기 위해 마이크로 아키텍처가 설계되었다.
마이크로서비스 아키텍처는 서비스 규모를 나누어 구성한 아키텍처이다. 위 예시처럼 블로그 프로젝트, 카페 프로젝트, 메일 프로젝트 등 애플리케이션을 기능 별로 나눠서 개발한다. 마이크로 아키텍처와 같이 독립적인 애플리케이션을 개발하게 되면 각 서비스 간에 통신해야 하는 경우가 발생하는데 이를 서버 간 통신이라고 말한다.
싱글톤 패턴 : 한 클래스에서 클래스 자신 인스턴스를 new(생성)하고, static으로 선언하여 전역적으로 접근할 수 있게 한다. private로 외부 객체 생성을 막고 final을 통해 상속 받을 수 없게 하며 getter를 통해 인스턴스를 반환한다.
public class Singleton {
// 클래스 로딩 시 인스턴스 생성
private static final Singleton instance = new Singleton();
// private 생성자
private Singleton() {}
// 인스턴스 반환 메서드
public static Singleton getInstance() {
return instance;
}
}

(1) DispatcherServlet으로 요청(HttpServletRequest)이 들어오면 , DispatcherServlet은 핸들러 매핑(Handler Mapping)을 통해 URL에 매핑된 핸들러 즉, 맞는 컨트롤러를 탐색한다(핸들러 = 컨트롤러).
(2) 그리고 핸들러 어댑터로 컨트롤러를 호출한다.
(3) 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView(스프링 MVC에서 모델(Model)과 뷰(View) 정보를 함께 담아 컨트롤러의 처리 결과를 표현하는 데 사용되는 객체)로 응답을 가공해 반환한다.
(4) 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴한다.
레이어드 아키텍처(Layered Architecture)는 3계층(프레젠테이션, 비즈니스, 데이터 접근) 혹은 4계층(프레젠테이션, 비즈니스, 데이터 접근, 데이터베이스)로 구성되어 있다.

Spring Data Java에서는 DAO 역할을 Repository가 수행하기 때문에 Repository로 대체할 수 있다.Rest API는 대중적으로 가장 많이 사용되는 애플리케이션 인터페이스이다. 이 인터페이스를 통해 클라이언트는 서버에 접근하고 자원을 조작할 수 있다.
주고받는 자원(Resource)에 이름을 규정하고 URL에 명시해 HTTP메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미한다.
API는 애플리케이션에서 제공하는 인터페이스를 의미하고 이를 통해 서버 또는 프로그램 사이를 연결할 수 있다. 즉, REST API는 REST 아키텍처를 따르는 시스템/애플리케이션 인터페이스이다.
클라이언트의 HTTP 요청을 받아들이고, 해당 요청을 처리할 서비스 계층으로 전달한다.
비즈니스 로직을 구현하며, 컨트롤러로부터 받은 요청을 처리하고 필요한 데이터를 조회하거나 조작한다. 이 계층은 레포지토리 계층과 상호작용하여 데이터의 일관성을 유지한다.
데이터베이스와 직접적으로 상호작용하며, 서비스 계층에서 요구하는 데이터를 조회하거나 저장한다. 이를 통해 데이터 액세스 로직을 캡슐화하고, 데이터 소스의 변경에 유연하게 대응할 수 있다.
유니폼 인터페이스란 일관된 인터페이스를 의미한다. 즉, REST 서버는 HTTP 표준 전송 규약을 따르기 때문에 어떤 프로그래밍 언어로 만들어졌느냐와 상관없이 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호환해 사용할 수 있다는 것을 의미한다.
무상태성이란 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미다. 서버는 클라이언트가 보낸 요청에 대해 세션이나 쿠키정보를 별도로 보관하지 않는다. 그렇기 때문에 한 클라이언트가 여러 요청을 보내거나 여러 클라이언트가 각각 하나의 요청을 보내든 개별적으로 처리한다.
REST는 HTTP의 캐싱(빠른 저장장치에 정보를 복사해 놓는 기법) 기능을 적용할 수 있다. 이 기능을 사용하면 서버의 트랜잭션 부하가 줄어 효율적이고 사용자 입장에서 성능이 개선된다.
REST 서버는 네트워크 상의 여러 계층으로 구성되어 있는데, 각 계층은 자신의 역할에만 집중하고 바로 인접한 계층끼리만 상호작용한다.
REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계한다. 이 구성은 서로에 대한 의존성을 낮춘다.