본문 바로가기

Spring Boot

[Spring Boot] 스프링의 핵심 가이드 (개발에 앞서 알면 좋은 기초 지식)

🔍 서버 간 통신

  • 어떤 포털 사이트를 하나의 서비스 단위로 개발한다고 가정하면, 개발에 보수적인 입장을 취할 수밖에 없고, 서비스 자체의 규모도 커지기 때문에 서비스를 구동하는 데 걸리는 시간도 길어진다.
  • 이 같은 문제를 해결하기 위해 나온 것이 마이크로서비스 아키텍처(MSA)이다. 마이크로서비스 아키텍처는 서비스 규모를 작게 나누어 구성한 아키텍처를 뜻한다. 서비스 기능별로 구분해서 독립적인 애플리케이션을 개발하게 되면 각 서비스 간에 통신해야 하는 경우가 발생한다. 서버 간 통신은 한 서버가 다른 서버에 통신을 요청하는 것을 의미하며, 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조이다. 몇 가지 프로토콜에 의해 다양한 통신 방식을 적용할 수 있지만 가장 많이 사용되는 방식은 HTTP/HTTPS 방식이다.

⚙️ 스프링 부트의 동작 방식

  • 스프링에서는 DispatcherServlet이 서블릿의 역할을 수행한다. 일반적으로 스프링은 톰캣을 임베드해 사용한다.
  • 핸들러 매핑은 요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스이다.
  • 뷰 리졸버는 뷰의 렌더링 역할을 담당하는 뷰 객체를 반환한다.
  1. DispatcherServlet으로 요청(HttpServletRequest)이 들어오면 DispatcherServlet은 핸들러 매핑을 통해 요청 URI에 매핑된 핸들러를 탐색한다. 여기서 핸들러는 컨트롤러(Controller)를 의미한다.
  2. 그리고 핸들러 어댑터로 컨트롤러를 호출한다.
  3. 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView로 응답을 가공해 반환한다.
  4. 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴한다.

💡Spring boot와 Servlet

  • Spring boot는 내부적으로 내장 톰켓을 가지고 있다. 즉 스프링 부트가 실행되면서 내부적으로 냉장톰켓 즉 서블릿 컨테이너가 실행된다. 스프링 부트에서 사용자 정의 프로그램을 구현한 프로그램인 서블릿은 DispatchServlet이다. 스프링부트에서 DispatchServlet이 FrontController 역할을 한다. 스프링 부트에 DispatchServlet의 상속 구조이다.

🔍 REST API

  • REST 란 Representational State Transfer의 약자로, 웹 기반 시스템에서 자원을 고유한 URI로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 해당 자원의 상태를 읽거나 수정하는 인터페이스를 말한다.
  • 이를 통해 클라이언트와 서버 간의 통신을 간단하고 효율적으로 처리하여 자원을 관리하고 정보를 요청하고 전달하는 데 사용된다.
  • 즉, REST(Representational State Transfer)는 웹 아키텍처의 스타일이며, 분산 시스템에서 자원을 정의하고 주소를 지정하여 네트워크 상에서 상호작용하는 방법론이고, REST API는 이러한 REST 아키텍처를 따르는 웹 서비스 API를 의미한다. REST는 아키텍처 원칙이고, REST API는 이러한 원칙을 따르는 웹 서비스 인터페이스를 말한다.

💡 REST 의 특징

  • 무상태성(Statelessness): 서버는 각 요청을 완전히 독립적으로 처리하며, 클라이언트의 상태를 서버에 저장하지 않는다. 각 요청은 필요한 모든 정보를 포함해야 한다.
  • 자원과 URI: 모든 자원(데이터 또는 서비스)은 고유한 URI(Uniform Resource Identifier)로 식별되어야 한다.
  • 통일된 인터페이스: HTTP 표준 메소드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 다루는 통일된 인터페이스를 제공한다.
  • 클라이언트-서버 구조: 클라이언트와 서버는 각각 독립적으로 발전할 수 있도록 분리되어야 한다.
  • 계층화(Layered System): 서버는 다양한 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 캐싱 등을 위해 계층을 추가할 수 있다.
  • 캐시(Caching): HTTP 프로토콜의 표준 캐싱 기능을 이용하여 응답을 캐시할 수 있다.