하나의 서비스 단위로 개발 - > 다양한 기능들을 하나의 애플리케이션에 통합했다는 뜻.
규모가 커지면 서비스 구동이나 유지보수관리에 취약함.
이를 해결하기 위해 나온 것이 마이크로서비스 아키텍쳐(MSA, Microservice Architecture)
서비스 규모를 작게 나누어 구성한 아키텍쳐. 기능별로 나눠서 개발함.
예 ) 네이버, 다음 등 블로그, 카페, 메일 등
단일 서비스 아키텍쳐에서는 내부 메서드 호출로 원하는 자원을 가져와 사용 가능하지만,
마이크로서비스 아키텍쳐에서는 서버 간 통신을 해야 함.
서버 간 통신이란 한 서버가 다른 서버에 통신을 요청 하는 것.
클라이언트 -> 서버
가장 많이 사용되는 방식 HTTP/HTTPS
spring-boot-starter-web 모듈은 톰캣(Tomcat)을 사용하는 스프링 MVC 구조 기반으로 동작.
서블릿(Servlet)은 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술.
톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너.
스프링에서는 DispatcherServelt이 서블릿 역할을 수행하며, 임베드된 톰캣과 자동 설정된 web.xml의 설정값을 공유함.
뷰가 없는 Rest 형식의 @ResponseBody를 사용할 경우, 뷰 리졸버를 호출하지 않고 MessageConverter를 거쳐 JSON 형식으로 변환해서 응답. 자동 설정 내역을 보면 HttpMessageConverter 인터페이스 사용.
레이어드 아키텍처(Layered Architecture)란 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조. 일반적으로 3계층 또는 4계층 구성을 의미. 차이는 인프라(데이터베이스) 레이어의 추가 여부로 결정.
Model-View-Controller 구조
View와 Controller는 프레젠테이션 계층 영역
Model은 비즈니스와 데이터 접근 계층의 영역
스프링 MVC모델로 레이어드 아키텍처를 구현하기 위해서는 역할 세분화.
비즈니스 계층에 서비스를 배치해 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합하고, 데이터 접근 계층에는 DAO(JPA에서는 Repository)를 배치해 도메인 관리;.
'패턴'은 애플리케이션 개발에서 유사한 경우와 해결책도 동일하게 적용할 수 있다는 의미를 내포. 디자인 패턴이 모든 문제의 정잡은 아니므로, 상황에 맞는 최적 패턴을 결정해서 사용하는 것이 바람직.
GOF 디자인 패턴은 4명의 인물이 디자인 패턴을 구체화하고 체계화 하여 분류한 방식.
생성 패턴, 구조 패턴, 행위 패턴의 총 세가지로 구분.
'Representational State Transfer'의 약자로, 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식.
주고 받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE) 를 통해 자원의 상태를 주고 받음.
API는 'Application Programming Interface'의 약자.
즉 Rest 아키텍처를 따르는 시스템/애플리케이션 인터페이스.
'RESTful'하다.
일관된 인터페이스로 HTTP 표준 전송 규약을 따르므로 타 언어, 플랫폼, 기술 등과 호환해 사용 가능
Stateless는 서버에 상태 정보를 따로 보관하거나 관리하지 않음을 의미함. 한 클라이언트가 여러 요청을 보내든 여러 클라이언트가 각각 하나의 요청을 보내든 개별적으로 처리함. 이렇게 구성된 서비스는 비즈니스 로직의 자유도가 높고 설계가 단순.
REST서버는 네트워크 상의 여러 계층으로 구성될 수 있음(Layred System). 클라이언트는 서버와 연결되는 포인트만 알면 됨.
REST서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설꼐. 이 구성은 서로에 대한 의존성을 낮추는 기능을 함.
URI의 마지막에는 '/'를 포함하지 않음.
언더바(_)대신 하이픈(-)이용.
URL에는 행위(동사)가 아닌 결과(명사)를 포함.
URI는 소문자로 작성
파일의 확장자는 URI에 포함하지 않음.
1주차 01: 스프링부트란? (0) | 2023.04.25 |
---|
댓글 영역