ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발 기초 지식
    SpringBoot 북 스터디 2023. 4. 26. 01:25

    스프링 부트의 동작 방식

    스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 Tomcat을 사용하는 스프링 MVC구조를 기반으로 동작한다.

    서블릿
    클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술, 서블릿 컨테이너에서 서블릿 인스턴스를 생성하고 관리하는 역할을 하며 톰갯은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너이다.

    • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
    • 서블릿 객체는 싱글톤 패턴으로 관리
    • 멀티 스레딩 지원

    스프링에서는 DispathcerServlet이 서블릿의 역할을 수행한다.

     

    동작구조

    1. DispatcherServlet으로 요청이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 컨트롤러를 탐색한다.
    2. 핸들러 어댑터로 컨트롤러를 호출하고 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환한다.
    3. 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 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
Designed by Tistory.