[Spring_Boot] 우리 좀 친해져 보자 Spring!

하이초·2023년 6월 19일

Spring_Boot

목록 보기
11/11
post-thumbnail

처음 웹 개발 프로젝트를 진행하며 Spring Boot를 사용했다.
하지만 그 당시 개발에 급급하여 정말 리터럴리 '사용'만 했지, 뭔가를 제대로 알고 이용하지는 못했었다.

그래서 지금부터 Spring Boot 뽀개기를 해보려고 한다!

🍑 Spring


근데 그 전에 먼저, SpringBoot를 알기 위해선 Spring을 알아야 한다.
사실은 걍 Spring을 알아야 하는거지만..!!
일단은 시작해 보자구

JAVA 기반의 웹 어플리케이션을 만들 수 있는 프레임워크

이게 Spring의 정의다.

🛠 Framework

그럼 또 프레임워크는 뭔가?

소프트웨어 개발을 위한 구조, 라이브러리, 툴 등을 포함하는 틀로, 개발자에게 애플리케이션 개발과 관련된 일반적인 기능을 제공하여 생산성을 높이고 일관성을 유지하는 도구

위는 ChatGPT야~ 프레임워크가 모야 😮 ?! 하고 물어본 결과다.
저 문장에서 나오는 것과 같이 프레임워크는 라이브러리를 포함한다.

라이브러리가 한 기능에 집중하여 개발자가 애플리케이션에서 필요한 기능을
간편하게 호출하거나 확장할 수 있도록 하는 도구라면,
프레임워크는 종합 선물 패키지 같은 느낌?!

향후 Spring의 성질에 대해 알아보면서 자세히 얘기가 나오겠지만,
프레임워크와 라이브러리의 지대한 차이점은 제어의 역전이다.

라이브러리는 개발자가 필요할 때 호출하므로 제어의 흐름을 개발자가 가지고 있다.
그러나! 프레임워크는 아니다. 제어의 흐름을 개발자가 아닌 프레임워크가 가지고 있다.

🍏 Spring Boot

사실 스프링의 다양한 특징이나 Core Container, JVM, JDBC 등을 먼저 알아보는 게 맞겠지만
아 모르겠구! 내가 궁금한 거 먼저 공부할거야!

Spring 프레임워크를 사용하여 애플리케이션을 간편하게 개발하고 실행할 수 있도록 도와주는 도구

Spring Boot는 위의 정의와 같이 스프링을 사용해서 애플리케이션을 빠르고 쉽게 개발할 수 있도록 하는 도구다. Spring은 개발자가 세부적인 설정을 직접 해줘야 하지만, Spring Boot는 Auto Configuration을 지원한다.
개발자로 하여금 설정 부담을 줄여주어 간편한 배포와 실행환경을 구성해준다.

Auto Configuration

여기서 auto configuration을 간단히 살펴보고 넘어가면

@SpringBootApplication
public class SpringBootApplication {
}

스프링부트의 메인 어플리케이션을 살펴보면 @SpringBootApplication 어노테이션을 확인할 수 있다.

@SpringBootApplication =
@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

해당 어노테이션은 위와 같이 세개의 어노테이션이 합쳐진 형태이다.

스프링부트 어플리케이션은 ComponentScan으로 등록하고, EnableAutoConfiguration으로 추가적으로 읽어온 Bean들을 읽어서 등록한다.

이때 Bean에 대한 이해가 있어야 이걸 이해할 수 있으므로 자세한 건 나중에 알아보도록 하자!

아무튼 그래서, Spring이 그냥 종합 선물 세트라면,
Spring Boot는 특급 종합 선물 세트 같은 거지 🍒
거기다가 내장 WAS 지원도 해준다.

그리고 내가 알고싶었던 게 바로 이 WAS다!

🌐 WAS

Spring Boot에는 톰캣 WAS가 내장되어 있다.

그렇다면 WAS란 또 무엇인가? 이걸 얘기하려면 또 웹서버를 알아야 한다.
정말 알아야 할 거 드럽게도 많음

웹 서버는 클라이언트의 요청에 따라 정적 콘텐츠를 제공하는 서버이다.

정적 콘텐츠에는 단순 HTML 문서, CSS, JavaScript, 이미지, 파일 등이 포함된다.
Apache, Nginx 등이 있다.

DB 등 변경 사항을 반영하여 동적 콘텐츠를 제공하는 서버이다.

WAS는 말 그대로 그때그때 뭔가가 변경되는 그런 자료를 건네주는 서버다.

예를들어, 웹서버는 안녕하세요 고객님.하고 정해진 정적 콘텐츠를 건네준다면,
WAS는 안녕하세요, 하이초님.하고 로그인한 유저의 정보를 반영하여 바뀌는 동적 콘텐츠를 건네주는 것이다.

웹 서버는 어플리케이션 서버와 직접적으로 통신할 수 없어, 다리 역할로 WAS를 두고 사용하게 된다.

  • 프로그램 실행 환경과 DB 접속 기능을 제공
  • 여러 개의 Transaction 관리
  • 업무 처리 비즈니스 로직 수행

WAS는 주로 위와 같은 기능을 하며, Apache TomCat, JBoss, Resin 등이 있다.

이 중에서 알아볼 WAS는 당연히 아파치 톰캣!

😸 Apache TomCat

스프링부트가 내장하고 있는 WAS서버는 Apache Tomcat이다.

스프링부트는 이러한 구조로 클라이언트와 통신하고 있는데,
이처럼 Tomcat은 Web ServerServlet Container가 합쳐진 형태라고 볼 수 있다.

이때 Web Server는 Apache Web Server의 기능 일부(웹 서비스 데몬, Httpd)를 가져와 제공하고 있다.
따라서 아파치의 기능을 지원하기는 하지만 모든 기능을 제공하는 것은 아니다.
특수한 상황에서는 따로 아파치 서버를 설치하고 톰캣과 연결해서 사용하기도 한다고 한다.

아무튼 이런 상태인데 여기서 또 Servlet을 알아야 한다.. 🤔
왜냐하면.. Servlet이 Java 기반의 웹 어플리케이션 컴포넌트이기 때문이다..
그래서 스프링부트가 톰캣을 내장하고 있는 것이다.
그만.. 그만혀..

✅ Servlet

Servlet은 위에서 말한 것과 같이 Java 기반의 웹 애플리케이션 컴포넌트다. 다시 말해, Servlet은 WAS에서 실행되기 위한 도구이자 WAS의 일부 구성 요소인 것이다.

Servlet은 HTTP 프로토콜을 기반으로 클라이언트의 요청을 처리하고, 동적인 웹 콘텐츠를 생성하기 위해 사용된다. Java 언어로 작성되며, Java Servlet API를 사용하여 개발 및 구현한다.

서블렛 컨테이너에 있는 디스패쳐 서블렛이 뿌려주는 형태인데,
자세한 설명은 이 포스트를 참고하길 바란다.
정말 너무 정리를 잘 해주셔서 내가 따로 정리할 필요가 없는 수준!!

포스트도 정말 좋다!

💫 결국 다시 말해서,

WAS: Servlet 컨테이너를 포함하여 Servlet을 실행하고 관리한다.

Servlet 컨테이너: Servlet의 생명주기 관리, 멀티스레딩 지원, HTTP 요청 및 응답 처리 등의 기능을 담당한다. 또한, 웹 애플리케이션의 배치, 구성 및 보안 설정을 담당하며, 서블릿과 다른 웹 컴포넌트(예: JSP, 필터, 리스너 등) 간의 상호작용을 관리한다.

이렇게 정리할 수 있을 것 같다.

따라서, 스프링 부트가 Tomcat을 내장하면서, Servlet Container에 종속되던 Web Application의 문제를 해결해 준 것이다.

기존에는 서블릿 컨테이너를 사용하기 위해 별도의 웹 서버 (예: Apache Tomcat)를 설치하고 구성해야 했다. 웹 서버와 애플리케이션의 설정이 분리되어 있어 설정의 일관성을 유지하기 어려웠고, 서버 확장과 로드 밸런싱을 구현하기 위해서는 추가적인 구성과 설정이 필요했던 것이다.

이에 반해 스프링부트는 별도의 웹 서버 설치나 구성이 필요하지 않아 웹 어플리케이션을 더 쉽게 실행하고 배포할 수 있습니다.

🚨 아주 짧은 요점 정리

  • servlet은 WAS를 위한 도구다
  • Springboot에는 다양한 servlet이 존재한다.

👀 생각해 볼 만한 문제들

  1. Spring이란?

  2. Spring과 Spring Boot의 차이?

  3. FrameWork란?

  4. Web serve, WAS란?

  5. 사용해본 WAS의 특징?

  6. Spring Boot의 클라이언트 통신 구조?

  7. Servlet이란?

  8. Dispatcher-Servlet이란?

profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글