개발에 앞서 알면 좋은 기초 지식(CH02)

이도훈·2025년 3월 26일

스프링 부트 핵심 가이드 책을 통한 글 입니다.

2.1 서버 간 통신

단일 서비스 아키텍처

단일 서비스 아키텍처는 어떤 포털사이트를 하나의 서비스 단위로 개발한다. 즉, 블로그, 카페, 메일 등의 기능등을 하나의 애플리케이션으로 통합한다. 하지만 유지보수 시 한번에 유지보수 해야 하기 때문에 어렵고 서비스 규모도 커지기 때문에 서비스를 구동하는 시간도 오래 걸린다. 이를 해결하기 위해 마이크로 아키텍처가 설계되었다.

마이크로서비스 아키텍처

마이크로서비스 아키텍처는 서비스 규모를 나누어 구성한 아키텍처이다. 위 예시처럼 블로그 프로젝트, 카페 프로젝트, 메일 프로젝트 등 애플리케이션을 기능 별로 나눠서 개발한다. 마이크로 아키텍처와 같이 독립적인 애플리케이션을 개발하게 되면 각 서비스 간에 통신해야 하는 경우가 발생하는데 이를 서버 간 통신이라고 말한다.

2.2 스프링 부트의 동작방식

2.2.1 서블릿이란?

  • 서블릿(Servlet)은 클라이언트의 요청을 처리하고 반환하는 웹 프로그래밍 기술이다. 일반적으로 서블릿은 서블릿 컨테이너(Servlet Container)에서 관리한다. 서블릿 컨테이너는 서블릿 인스턴스(instance)를 생성하고 관리하는데 톰켓이 이를 수행하는 대표적인 컨테이너다.
  • 스프링에서는 Dispatcher Servlet이 서블릿의 역할을 수행한다.
  • Spring MVC 환경에서는 DispatcherServlet이 프론트엔드의 HTTP요청을 받아 이를 맞는 Controller에 전달하는 역할을 한다.

2.2.2 서블릿 컨테이너의 특징

  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다.
  • 서블릿 객체는 싱글톤 패턴으로 관리된다. 싱글톤 패턴은 객체의 인스턴스를 한개만 생성되게 하는 패턴이다. 주로 전역 상태를 관리하거나 공통된 리소스를 공유할 때 사용된다.
  • 멀티 쓰레딩을 지원한다.

싱글톤 패턴 : 한 클래스에서 클래스 자신 인스턴스를 new(생성)하고, static으로 선언하여 전역적으로 접근할 수 있게 한다. private로 외부 객체 생성을 막고 final을 통해 상속 받을 수 없게 하며 getter를 통해 인스턴스를 반환한다.

public class Singleton {
    // 클래스 로딩 시 인스턴스 생성
    private static final Singleton instance = new Singleton();

    // private 생성자
    private Singleton() {}

    // 인스턴스 반환 메서드
    public static Singleton getInstance() {
        return instance;
    }
}

2.2.3 스프링부트 동작과정


(1) DispatcherServlet으로 요청(HttpServletRequest)이 들어오면 , DispatcherServlet핸들러 매핑(Handler Mapping)을 통해 URL에 매핑된 핸들러 즉, 맞는 컨트롤러를 탐색한다(핸들러 = 컨트롤러).
(2) 그리고 핸들러 어댑터로 컨트롤러를 호출한다.
(3) 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView(스프링 MVC에서 모델(Model)과 뷰(View) 정보를 함께 담아 컨트롤러의 처리 결과를 표현하는 데 사용되는 객체)로 응답을 가공해 반환한다.
(4) 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴한다.

2.3 레이어드 아키텍처

레이어드 아키텍처(Layered Architecture)는 3계층(프레젠테이션, 비즈니스, 데이터 접근) 혹은 4계층(프레젠테이션, 비즈니스, 데이터 접근, 데이터베이스)로 구성되어 있다.

2.3.1 프레젠테이션 계층

  • 유저 인터페이스(UI) 계층이라고도 한다.
  • 클라이언트와의 접점이 된다.
  • 클라이언트로부터 데이터와 함께 요청받고 처리 결과를 응답으로 전달한다.
  • 여기서 MVC 패턴과 서블릿이 쓰인다.

2.3.2 비즈니스 계층

  • 상황에 따라 서비스(Service) 계층이라고도 한다.
  • 핵심 비즈니스 로직을 구현하는 영역이다.
  • 트랜잭션 처리나 유효성 검사 등의 작업도 수행한다.

2.3.3 데이터 접근 계층

  • 영속(Persistence) 계층이라고도 한다.
  • 데이터베이스에 접근하는 작업을 수행한다.
  • Spring Data Java에서는 DAO 역할을 Repository가 수행하기 때문에 Repository로 대체할 수 있다.

2.4 디자인 패턴

2.4.1 생성 패턴

  • 객체 생성에 사용되는 패턴으로, 객체를 수정해도 호출부가 영향을 받지 않게 한다.

2.4.2 구조 패턴

  • 객체를 조합해서 더 큰 구조를 만드는 패턴이다.

2.4.3 행위 패턴

  • 객체 간의 알고리즘이나 책임 분배에 관한 패턴이다.
  • 객체 하나로는 수행할 수 없는 작업을 여러 객체를 이용해 작업을 분배한다. 결합도 최소화를 고려할 필요가 있다.

2.5 REST API

Rest API는 대중적으로 가장 많이 사용되는 애플리케이션 인터페이스이다. 이 인터페이스를 통해 클라이언트는 서버에 접근하고 자원을 조작할 수 있다.

2.5.1 REST란?

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

2.5.2 REST API란?

API는 애플리케이션에서 제공하는 인터페이스를 의미하고 이를 통해 서버 또는 프로그램 사이를 연결할 수 있다. 즉, REST APIREST 아키텍처를 따르는 시스템/애플리케이션 인터페이스이다.

레이어드 아키텍처에서 REST API의 역할

컨트롤러 계층

클라이언트의 HTTP 요청을 받아들이고, 해당 요청을 처리할 서비스 계층으로 전달한다.

서비스 계층

비즈니스 로직을 구현하며, 컨트롤러로부터 받은 요청을 처리하고 필요한 데이터를 조회하거나 조작한다. 이 계층은 레포지토리 계층과 상호작용하여 데이터의 일관성을 유지한다.

레포지토리 계층

데이터베이스와 직접적으로 상호작용하며, 서비스 계층에서 요구하는 데이터를 조회하거나 저장한다. 이를 통해 데이터 액세스 로직을 캡슐화하고, 데이터 소스의 변경에 유연하게 대응할 수 있다.

2.5.3 REST의 특징

유니폼 인터페이스

유니폼 인터페이스일관된 인터페이스를 의미한다. 즉, REST 서버는 HTTP 표준 전송 규약을 따르기 때문에 어떤 프로그래밍 언어로 만들어졌느냐와 상관없이 플랫폼 및 기술에 종속되지 않고 타 언어, 플랫폼, 기술 등과 호환해 사용할 수 있다는 것을 의미한다.

무상태성

무상태성이란 서버에 상태 정보를 따로 보관하거나 관리하지 않는다는 의미다. 서버는 클라이언트가 보낸 요청에 대해 세션이나 쿠키정보를 별도로 보관하지 않는다. 그렇기 때문에 한 클라이언트가 여러 요청을 보내거나 여러 클라이언트가 각각 하나의 요청을 보내든 개별적으로 처리한다.

캐시 가능성

RESTHTTP캐싱(빠른 저장장치에 정보를 복사해 놓는 기법) 기능을 적용할 수 있다. 이 기능을 사용하면 서버의 트랜잭션 부하가 줄어 효율적이고 사용자 입장에서 성능이 개선된다.

레이어 시스템

REST 서버는 네트워크 상의 여러 계층으로 구성되어 있는데, 각 계층은 자신의 역할에만 집중하고 바로 인접한 계층끼리만 상호작용한다.

클라이언트-서버 아키텍처

REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계한다. 이 구성은 서로에 대한 의존성을 낮춘다.

0개의 댓글