
본격적인 개발공부에 들어가기 전 알면 좋을 배경지식을 알아보도록 한다.
✅ 서버 간 통신
1. 마이크로서비스 아키텍처(MSA-Microservice Architecture)
서비스 규모를 작게 나누어 구성한 아키텍처
- 서버간 통신
각 서비스 간에 통신해야 하는 경우 발생
ex) 사용자가 블로그 기능을 사용하기 위해 로그인 서비스를 거쳐야만 하느 상황
한 서버가 다른 서버에 통신을 요청하는 것을 의미
가장 많이 사용되는 방식 : HTTP / HTTPS
2. 스프링 부트의 동작 방식
- spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기바능로 동작
- 서블릿(Servlet)
- 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술
- Servlet Container에서 Servlet을 관리
- Servlet Container는 Servelt Instance를 생성, 관리
- Servlet의 역할을 Spring에서 DispathcerServlet이 한다.
- DispatcherServlet의 역할
- 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 핸들러 탐색(여기서 해들러는 Controller)를 의미
- 해들러 어댑터(Handler Adapter)로 컨트롤러 호출
- 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환
- 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버(View Resolver)를 통해 뷰(View)를 받아 리턴
뷰 리졸버란?
뷰의 렌더링 역할을 담당하는 뷰 객체 반환
✅ 레이어드 아키텍처
Layered Archtecture(레이어드 아키텍처)
애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 수평적으로 구성한 구조
일반적인 레이어트 아키텍처
일반적으로 3계층, 4계층의 구성을 의미하고, 두 계층의 차이는 인프라 레이어(데이터베이스 레이으)의 추가 여부로 결정된다.

- 프레젠테이션 계층
- 애플리케이션의 쵯ㅇ단 계층으로, 클라이언트의 요청을 해성하고 응답하는 역할
- UI, API를 제공
- 별도의 비즈니스 계층을 포함하고 있지 않으므로 비즈니스 계층ㅣ으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행
- 비즈니스 계층(또는 서비스 계층)
- 애플리케이션이 제공하는 기능을 정의하는 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행
- DDD(Domain-Driven esign) 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 한다.
- 데이터 접근 계층( 또는 레퍼지토리(Repository) 계층)
레이어드 아키텍처 기반 설계 특징
- 각 레이어는가장 가까운 하위 레이어의 의존성을 주입받는다.
- 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않는다.
- 각 컴포넌트의 역할이 명확하므로 코드의 가독성과 기능 구현에 유리하다.
- 코드의 확장성도 좋아진다.
- 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이하다.
스프링에 레이어드 아키텍처를 적용한 모습
- View-Controller의 구조
- View와 Controller는 프레젠테이션 계츤 영역
- Model은 비즈니스와 데이터 접근 계층의 영역으로 구분
스프링 MVC 모델로 레이어드 아키텍처를 구현하기 위해서는 역활을 세분화한다.
- 비즈니스 계층에 서비스를 배치 => 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합
- 비즈니스 접근 계층에는 DAO를 배치해 도메인 관리
프레젠테이션 계층
- 상황에 따라 유저 인터페이스(UI) 계층이라고도 한다.
- 클라이언트와의 접점이 된다.
- 클라이언트로부터 데이터와 함께 요청을 바독 처리 결과를 응답으로 전달하는 역할을 한다.
비즈니스 계층
- 상황에 따라 서비스(Service)계층이라고도 한다.
- 핵심 비즈니스 로직을 구현하는 영역이다.
- 트랜잭션 처리나 유효성 검사 등의 작업도 수행한다.
데이터 접근 계층
- 상황에 따라 영속(Persistnece)계층이라고도 한다.
- 데이터베이스에 접근해야 하는 작업을 수행한다.
✅ 디자인 패턴
디자인패턴(Design Patter)
소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위해 고안된 해결책
GoF 디자인 패턴
Gang of Four의 줄임말로 디자인 패턴을 구체화하고 체계화해서 분류한 4명의 인물을 의미
✅ Reset API
대중적으로 가장 많이 사용되는 애플리케이션 인터페이스
Rest란?
Representational State Transfer의 약자로, 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식이다. 주고받는 자원에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미한다.
Rest API란?
API(Application Programming Interface)
애플리케이션에서 제공하는 인터페이스를 의미한다. API를 통해 서버 또는 프로그램 사이를 연결할 수 있다.
Rest 아키텐처를 따르는 시스템/애플리케이션 인터페이스라고 볼 수 있다.
Rest 아키텍처를 구현하는 웹 서비스를 "RESTful하다" 라고 표현한다.
REST의 특징
1. 유니폼 인터페이스
- REST서버는 HTTP 표준 전송 규약을 따른다. 그렇기 때문에 어떤 프로그래밍 언어로 만들어졌는와 상관없이 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호환해 사용할 수 있다는 것을 의미
2. 무상태성(stateless)
- 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미
ex) 서버는 클라이언트의 요청에 대한 세션, 쿠키 정보를 별도를 보관하지 않는다.
- 서버가 불필요한 정보를 관리하지 않으므로 비즈니스 로직의 자우도가 높고 설계가 단순화된다.
3. 캐시가능성
- REST는 HTTP 표준을 그대로 사용하므로 HTTP의 캐싱 기능을 적용할 수 있다.
- 이 기능을 사용하여 서버의 트랜잭션 부하가 줄어 효율적이며 사용자 입장에서 성능이 개선된다.
4. 레이어 시스템
- REST서버는 네트워크 상의 여러 계층으로 구성될 수 있다.
5. 클라이언트-서버 아키텍처
- REST서버는 API를 제공하고 클라이언트는 사용자 정보를관리하는 구조로 분리해 설계한다.
- 이러한 구성은 서로에 대한 의존성을 낮추는 기능을 한다.
REST의 설계 규칙
-
URL의 마지막에는 '/'를 포함하지 않는다.
-
언다바(_)는 사용하지 않는다. 대신 하이픈(-)을 이용한다.
-
URL에는 행위(동사)가 아닌 결과(명사)를 포함한다.
-
URI는 소문자로 작성해야한다.
-
파일의 확장자는 URI에 포함하지 않는다.