-
개발 기초 지식SpringBoot 북 스터디 2023. 4. 26. 01:25
스프링 부트의 동작 방식
스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 Tomcat을 사용하는 스프링 MVC구조를 기반으로 동작한다.
서블릿
클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술, 서블릿 컨테이너에서 서블릿 인스턴스를 생성하고 관리하는 역할을 하며 톰갯은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너이다.- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
- 서블릿 객체는 싱글톤 패턴으로 관리
- 멀티 스레딩 지원
스프링에서는 DispathcerServlet이 서블릿의 역할을 수행한다.
동작구조
- DispatcherServlet으로 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 컨트롤러를 탐색한다.
- 핸들러 어댑터로 컨트롤러를 호출하고 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환한다.
- 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 View Resolver를 통해 View를 받아 리턴한다.
레이어드 아키텍처
레이어드 아키텍처 : 어플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어를 묶어 수평적으로 구성한 구조
프레젠테이션 계층
- 애플리케이션의 최상단 계층으로, 클라이언트의 요청을 해석하고 응답하는 역할
- UI나 API를 제공함
- 비즈니스 로직을 포함하고 있지 않으며, 비즈니스 계층으로 요청을 위임하고 결과를 응답하는 역할
비즈니스 계층
- 애플리케이션이 제공하는 기능을 정의하고 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행
- DDD(Domain-Driven-Design)기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 한다
데이터 접근 계층
- 데이터베이스에 접근하는 일련의 작업을 수행한다
레이어드 아키텍처 기반 설계의 특징
- 각 레이어는 가장 가까운 하위 레이어의 의존성을 주입받음
- 각 레이어는 관심사에 따라 묶여 있으며, 다른 레이어의 역할을 침범하지 않음
- 각 레이어가 독립적으로 작성되면 다른 레이어와의 의존성을 낮춰 단위 테스트에 용이하다
스프링의 레이어드 아키텍처
프레젠테이션 계층
- 상황에 따라 UI 계층이라함
- 클라이언트와의 접점이 됨
- 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할
비즈니스 계층
- 서비스 계층이라고도 함
- 핵심 비즈니스 로직을 구현하는 영역임
- 트랜잭션 처리나 유효성 검사 등의 작업도 수행함
데이터 접근 계층
- 상황에 따라 영속계층이라고 함
- 데이터베이스에 접근해야 하는 작업을 수행함
디자인 패턴
디자인 패턴 : 소프트웨어를 설계할 때 자주 발생하는 문제들을 해결하기 위해 고안된 해결책
GoF : 디자인 패턴을 구체화해서 정리한 대표적인 분류 방식
GoF 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴의 총 3가지로 구분됨
생성 패턴
- 객체 생성에 사용되는 패턴으로, 객체를 수정해도 호출부가 영향을 받지 않게 함
구조 패턴
- 객체를 조합해서 더 큰 구조를 만드는 패턴
행위 패턴
- 객체 간의 알고리즘이나 책임 분배에 관한 패턴
- 객체 하나로는 수행할 수 없는 작업을 여러 객체를 이용해 작업을 분배함. 결합도 최소화를 고려해야 함
REST API
REST(Representational State Transfer) : WWW와 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식으로 주고 받는 자원에 이름을 규정하고 URI에 명시에 HTTP 메서드(GET, PUT, POST, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미함
REST API : REST 아키텍처를 따르는 시스템/애플리케이션 인터페이스이다.
REST아키텍처를 구현하는 웹 서비스를 RESTful하다고 표현함
REST의 특징
유니폼 인터페이스 : 일관된 인터페이스로 REST 서버는 HTTP 표준 전송 규약을 따르기에 언어와 플랫폼 및 기술에 종속되지 않고 호환해 사용 가능하다는 의미
무상태성 : 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미로 불필요한 정보를 관리하지 않으므로 비즈니스 로직의 자용도가 높고 설계가 단순해진다.
캐시 가능성 : HTTP표준을 따르기에 HTTP캐싱 기능을 적용할 수 있다. 이 기능을 통해 서버의 트랜잭션 부하를 줄여 효율적이고, 사용자 입장에서는 성능이 개선된다.
레이어 시스템 : REST서버의 복잡도와 상관없이 클라이언트는 서버와 연결되는 포인트만 알면 됨
클라이언트-서버 아키텍처 : API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계한다. 이로 인해 서로에 대한 의존성을 낮추게 된다.
REST의 URI 설계 규칙
- URI의 마지막에는 '/'를 포함하지 않는다.
- 언더바(_)는 사용하지 않는다. 대신 하이픈(-)을 이용한다.
- URL에는 행위(동사)가 아닌 결과(명사)를 포함한다.
- URI는 소문자로 작성해야 한다.
- 파일의 확장자는 URI에 포함하지 않는다.
Reference : 스프링부트 핵심가이드 - 스프링부트를 활용한 애플리케이션 개발 실무_장정우 저
'SpringBoot 북 스터디' 카테고리의 다른 글
스프링 부트 API 작성 방법 (0) 2023.04.29 스프링 부트(Spring Boot)란 (0) 2023.04.26