A system architecture is the conceptual model that defines the structure, behavior, and more views of a system.
사용자의 요청을 단일 서버가 모두 처리하기 때문에 제한적인 사용자 요청만 처리할 수 있습니다. 즉, 사용자의 요청이 늘어나는 상황에 대비하기 위한 시스템 확장에 대한 부분이 전혀 고려되지 않았습니다.
웹소켓 서버가 단일 서버이기 때문에 해당 서버가 다운되면 시스템 전체가 죽게되는 문제가 있습니다.
아키텍처 사용자의 요청을 분산시켜주는 로드 밸런서 영역을 두어서 웹소켓 서버를 안정적으로 운영할 수 있도록 하고 있습니다.
여러대의 웹소켓 서버로 확장이 가능하기 때문에 사용자의 요청이 늘어나더라도 서버의 부하를 줄일 수 있으며, 특정 서버에 장애가 발생하더라도 전체 시스템이 죽는 경우를 방지할 수 있습니다.
메시지 브로커 영역을 두어서 웹소켓 서버가 다중 서버로 구성이 되어 있더라도 특정 사용자들 간에 메시지를 주고 받을 수 있는 공유 채널을 사용하는 것이 가능해집니다.
채팅 서버의 전송 속도를 향상 시키는 것을 목적으로 한번 더 제안된 아키텍처입니다. 사용자의 요청과 서버의 응답이 이루어지는 전체 영역에 걸쳐서 Blocking 되는 요소가 없도록 리액티브 시스템을 구성하여 클라이언트의 요청을 보다 빠르게 처리할 수 있습니다. 웹소켓이 하나의 Connection과 연결되는 것에 반해 RSocket은 하나의 Connection 내에서 다중 요청 처리가 가능하기 때문에 대량의 요청을 안정적으로 처리할 수 있습니다.
계층형 아키텍처(N-티어)
API 계층은 클라이언트의 요청을 받아들이는 계층입니다. 일반적으로 표현 계층(Presentation Layer)라고도 불리지만 REST API를 제공하는 애플리케이션의 경우 API 계층이라고 표현합니다.
우리가 학습하고 만들게 될 애플리케이션이 REST API 요청을 처리하는 애플리케이션이 될 것이므로 API 계층이라는 표현이 더 적절합니다.
서비스 계층은 API 계층에서 전달 받은 요청을 업무 도메인의 요구 사항에 맞게 비즈니스적으로 처리하는 계층입니다.
애플리케이션의 핵심 로직은 서비스 계층에 포함되어 있다고 해도 과언이 아닐만큰 애플리케이션에 있어 핵심이 되는 계층입니다.
애플리케이션 개발에서 흔하게 사용하는 도메인이란 용어는 주로 비즈니스적인 어떤 업무 영역과 관련이 있습니다.
예를 들어, 여러분들이 새로운 배달 주문 앱을 만들어야 한다면 고객과 음식점, 배달원, 그리고 카드사 또는 은행 등 배달 주문 앱을 구현하기 위해 필요한 업무들을 자세히 알면 알수록 퀄리티가 높은 애플리케이션을 만들 가능성이 높습니다.
즉, 고객이 음식을 주문하는 과정, 주문받은 음식을 처리하는 과정, 조리된 음식을 배달하는 과정 등의 도메인 지식(Domain Knowledge)들을 서비스 계층에서 비즈니스 로직으로 구현 해야하는 것입니다.
애플리케이션을 제작하기 위한 기술도 중요하지만 애플리케이션에서 비즈니스 로직으로 표현해야 하는 도메인 지식 역시 아주 중요하다는 사실을 기억하기 바랍니다.
데이터 액세스 계층은 비즈니스 계층에서 처리된 데이터를 데이터베이스 등의 데이터 저장소에 저장하기 위한 계층입니다.
Spring Framework에서는 약 20여개의 모듈을 통해 다양한 기능들을 제공하는데, 우리가 앞에서 언급했었던 AOP, Aspect, Servlet, Web 같은 용어들 역시 아키텍처에서 확인할 수 있습니다.
Java에서는 일반적으로, 지원되는 여러가지 기능들을 목적에 맞게 그룹화 하여 묶어 놓은 것을 모듈이라고 부릅니다.
이러한 모듈들은 Java의 패키지 단위로 묶여 있으며, 이 패키지 안에는 관련 기능을 제공하기 위한 클래스들이 포함되어 있습니다.
일반적으로 모듈은 재사용 가능하도록 라이브러리 형태로 제공되는 경우가 많습니다.
[그림 2-18]에 나와 있는 각각의 기술 스택 들은 어디에 쓰이는 기술인지 대략적으로 살펴보세요.
관련 링크: https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/overview.html
Spring Boot은 Spring 설정의 복잡함이라는 문제점을 해결하기 위해 생겨난 Spring Project 중 하나이다.
우리가 Spring Boot을 사용해야하는 현실적인 이유
Spring Boot은 XML 기반의 복잡한 설계 방식을 지양한다.
Spring Boot의 starter 모듈 구성 기능을 통해 의존 라이브러리를 자동으로 구성해준다.
애플리케이션 설정의 자동 구성
Spring Boot은 프로덕션급 애플리케이션의 빌드를 손쉽게 할 수 있다.
Spring Boot은 내장된 WAS를 사용가능하기 때문에 배포가 용이하다.
“Spring 구성은 Spring에게 맡겨버리고 비즈니스 로직에만 집중하자!”
Q) 아파치 톰캣(Apache Tomcat) 이외에 Spring Boot에서 사용할 수 있는 서블릿 컨테이너(WAS라고도 부름)에는 어떤 것들이 있는지 ??