본문 바로가기
  • 소소한 개발자 이야기
Software/Spring Boot 핵심 가이드

02_개발에 앞서 알면 좋은 기초 지식

by Siwan_Min 2022. 11. 28.
728x90

2.1 서버 간 통신

마이크로서비스 아키텍처(MSA: Microservice Architecture): 서비스 규모를 작게 나누어 구성한 아키텍처
- 애플리케이션을 기능별로 나누어 개발
- A ↔ B 각 서비스 간에 통신해야 함.
- 서버를 업데이트 하거나 애플리케이션을 유지보수할 때 용이**

2.2 스프링부트 동작 방식

서블릿

  • 서블릿: 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술로 서블릿 컨테이너에서 관리한다.
  • 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 관리하는 역할을 수행하는 주체로서 톰캣은 WAS의 역할과 서블릿 컨테이너의 역할을 수행하는 대표적인 컨테이너이다.
    - 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
    - 서블릿 객체는 싱글톤 패턴으로 관리
    - 멀티 스레딩을 지원

스프링

  • spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣을 사용하는 스프링 MVC 구조를 기반으로 동작.
  • 스프링에서는 DispatcherServlet이 서블릿 역할을 수행.
  • 일반적으로 톰캣을 임베드(embed)해 사용
  • 서블릿 컨테이너와 DispatcherServlet은 자동 설정된 web.xml의 설정값을 공유

DispatcherServlet 동작

1. DispatcherServlet으로 요청(HttpServletRequest)이 들어오면 DispatcherServlet은 핸들러 매핑 (Handler Mapping)을 통해 요청 URI에 매핑된 핸들러를 탐색합니다. (핸들러: Controller)
(1) 핸들러 매핑: 요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스. 여러 구현체를 가진다.


BeanNameUrlHandlerMapping

- 빈 이름을 URL로 사용하는 매핑 전략
- 빈을 정의할 때 슬래시(’/’)가 들어가면 매핑 대상이 된다.
- ex) @Bean(”/hello”)

 

ControllerClassNameHandlerMapping

- URL과 일치하는 클래스 이름을 갖는 빈을 컨트롤러로 사용하는 전략
- 이름 중에 Controller를 제외하고 앞부분에 작성된 suffix를 소문자로 매핑

 

SimpleUrlHandlerMapping

- URL 패턴에 매핑된 컨트롤러를 사용하는 전략

 

DefaultAnnotationHandlerMapping

- 어노테이션으로 URL과 컨트롤러를 매핑하는 방법

 

2. 핸들러 어댑터로 컨트롤러를 호출

3. 핸들러 어댑터에 컨드롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환

4. @Controller 방식: 뷰 형식으로 리턴하는 컨트롤럴를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴

 

 

5. @RestController에서 return 하는 방식: MessageConverter를 거쳐 JSON 형식 변환

2.3 레이어드 아키텍처

  • 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어로 묶어 수평적으로 구성한 구조를 의미
  • 3계층 또는 4계층 구성을 의미

프레젠테이션 계층

  • 최상단 계층으로, 클라이언트의 요청을 해석하고 응답
  • UI나 API를 제공
  • 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행

비즈니스 계층

  • 기능을 정의, 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행
  • DDD 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도를 도메인 계층을 두기도 합니다.

데이터 접근 계층

  • 데이터베이스 접근하는 일련의 작업을 수행

Spring MVC는 Model-View-Controller 구조로 View와 Controller는 프레젠테이션 계층 영역이며, Model은 비즈니스와 데이터 접근 계층의 영역으로 구분할 수 있다.

비즈니스 계층에 서비스를 배치해 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합하도록 하고 데이터 접근 계층에는 DAO를 배치해 도메인을 관리한다.

  • 프레젠테이션 계층
    - 유저 인터페이스 계층이라고도 한다.
    - 클라이언트와의 접점이 된다.
    - 클라이언트로부터 데이터와 함께 요청을 받고 처리 결과를 응답으로 전달하는 역할
  • 비즈니스 계층
    - 서비스 계층이라고도 한다.
    - 핵심 비즈니스 로직을 구현
    - 트랜잭션 처리나 유효성 검사 등의 작업도 수행
  • 데이터 접근 계층
    - 영속 계층이라고도 한다.
    - 데이터베이스에 접근해야 하는 작업을 수행

2.4 REST API

REST API를 통해 클라이언트는 서버에 접근하고 자원을 조작할 수 있다.
REST 아키텍처를 따르는 인터페이스.

2.4.1 REST란?

‘Representational State Transfer’, 월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식. 주고받는 자원

주고받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미

REST 아키텍처를 구현하는 웹 서비스를 ‘RESTful’라고 표현합니다.

2.4.2 REST의 특징

  • 유니폼 인터페이스
  • 무상태성
  • 캐시 가능성
  • 레이어 시스템
  • 클라이언트-서버 아키텍처

2.4.3 REST의 URI 설계 규칙

URL 규칙

  • URI의 마지막에는 ‘/’를 포함하지 않는다.
  • 언터바(_)는 사용하지 않는다. 대신 하이픈(-)을 이용
  • URL에는 행위(동사)가 아닌 결과(명사)를 포함
  • URI는 소문자로 작성
  • 파일의 확장자는 URI에 포함하지 않는다.
728x90

댓글