공부/Spring

토비의 스프링 부트 - 스프링 부트 살펴보기

데부한 2023. 3. 31. 22:24
반응형

출처 : 인프런

 

스프링 부트 소개

스프링 부트는 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립실행형 애플리케이션을 복잡한 고민 없이 빠르게 작성할 수 있게 도와주는 여러가지 도구의 모음이다. 즉, 스프링 부트는 스프링을 기반으로 한 프레임워크이자 라이브러리이다. 

 

프레임 워크

소프트웨어 개발자가 응용 소프트웨어의 표준 구조를 구현하기 위해 사용하는 소프트웨어 프레임워크로 구성된다. 즉, 프로그래밍에서 특정 운영체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리의 모임이다.

재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 된다.

- 출처 : 위키백과

 

라이브러리

주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있다.

- 출처 : 위키백과

 

스프링 부트의 핵심 목표

  • 매우 빠르고 광범위한 영역의 스프링 개발 경험 제공
  • 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하면서, 필요에 따라 원하는 방식으로 손쉽게 변형 가능
  • 프로젝트에서 필요로 하는 다양한 비기능적인 기술(내장형 서버, 보안, 메트릭, 상태 체크, 외부 설정 방식 등) 제공
  • 코드 생성이나 XML 설정을 필요로 하지 않음

 

 

 

Containerless

Containerless는 Serverless와 유사한 의미를 가진다. Serverless는 개발자가 서버의 설치 및 관리를 신경쓰지 않고 서버 애플리케이션을 배포 및 운영할 수 있게 만드는 것을 말한다. 그러나 완전히 같은 의미는 아니기 때문에 일단 Container가 무엇인지 알아보자.

 

Container

일반적으로 웹 프로그램을 개발한다는 건 웹 컴포넌트를 만드는 것이다. 웹 컴포넌트는 주로 동적 콘텐츠를 생성하는데 사용된다. 또한 항상 웹 클라이언트를 필요로한다. 즉, 웹 컴포넌트는 웹 클라이언트로부터 요청을 받아 동적 콘텐츠를 생성한다. 그리고 그 요청에 대한 응답을 웹 클라이언트에게 보내준다.

이 웹 컴포넌트는 독립적으로 존재하지 못하고 항상 웹 컨테이너 안에 들어가있어야 한다. 웹 컨테이너는 웹 컴포넌트를 관리하는 역할을 한다. 웹 컴포넌트의 라이프 사이클을 관리한다. 그리고 웹 컨테이너는 단 하나의 웹 컴포넌트를 관리하는 것이 아니라 여러 개의 서비스를 제공하는 웹 컴포넌트들을 관리할 수도 있다. 웹 클라이언트에게서 요청이 오면 어떤 서비스를 제공하는 웹 컴포넌트에게 이 요청을 전달할지를 결정해 알맞은 웹 컴포넌트에게 요청을 전달한다. 이런 기능을 라우터 혹은 매핑 기능이라한다. 이 웹 컴포넌트는 자바 쪽 용어로 설명하면 서블릿이 된다. 웹 컨테이너는 서블릿 컨테이너이다. 이 구성은 90년대 초반 구성이다. 오래된 만큼 불편한 점이 많았던 이 방식은 스프링이 도입되면서 구성이 달라졌다.

스프링도 하나의 컨테이너이다. 서블릿 컨테이너 뒤쪽에 스프링 컨테이너가 붙고, 그 안에 서블릿처럼 특정 기능을 담당하는 Bean이라는 컴포넌트들이 자리잡고 있다. 스프링 컨테이너는 서블릿 컨테이너를 통해 들어온 요청을 전달받아 특정 기능을 하는 Bean에게 전달해 요청을 처리한다. 중요한 점은 아무리 간단한 웹 프로그램이라도 무조건적으로 서블릿 컨테이너도 동작해야한다. 서블릿 컨테이너를 실행하려면 다양한 설정들을 해야하며, 톰캣같이 자주, 많이 사용하는 서블릿 컨테이너 외에  새로 접하는 서블릿 컨테이너 프로그램은 따로 공부까지 해야 사용할 수 있다.

즉, Containerless는 서블릿 컨테이너를 사용하지 않는게 아니라 서블릿 컨테이너를 사용하긴 하지만 개발자들이 서블릿 컨테이너를 사용하기 위한 설치 및 환경 설정, 사용 방법에 대한 공부와 같이 부수적으로 따라오는 수고들을 덜 수 있도록한다는 의미이다.

 

 

 

Opinionated

스프링 프레임워크의 설계 철학

  • 극단적인 유연함 추구
  • 다양한 관점 수용
  • Not opinionated
  • 수많은 선택지 포용

 

스프링 부트의 설계 철학

  • Opionionated - 자기 주장이 강한, 자기 의견을 고집하는, 독선적인
  • 일단 정해주는 대로 빠르게 개발하고 고민은 나중에
  • 스프링을 잘 활용하는 뛰어난 방법 제공

 

사용 기술과 의존 라이브러리 결정

  • 업계에서 검증된 스프링 생태계 프로젝트, 표준 자바 기술, 오픈소스 기술의 종류와 의존관계, 사용 버전 정해줌
  • 각 기술을 스프링에 적용하는 방식(DI 구성)과 디폴트 설정값 제공

 

유연한 확장

  • 스프링 부트에 내장된 디폴트 구성을 커스터마이징 하는 매우 자연스럽고 유연한 방법 제공
  • 스프링 부트가 스프링을 사용하는 방식을 이해한다면 언제라도 스프링 부트를 제거하고 원하는 방식으로 재구성 가능
  • 스프링 부트처럼 기술과 구성을 간편하게 제공하는 나만의 모듈 작성 가능

 

 

 

스프링 부트의 이해

스프링 부트를 이용한 개발의 오해와 한계

  • 애플리케이션 기능 코드만 잘 작성하면 된다
  • 스프링을 몰라도 개발을 잘 할 수 있다
  • 스프링 부트가 직접적으로 보여주지 않는 것은 몰라도 된다
  • 뭔가 기술적인 필요가 생기면 검색을 해서 해결한다

 

스프링 부트를 이해하게 되면

  • 스프링 부트가 스프링의 기술을 어떻게 활용하는지 배우고 응용할 수 있다
  • 스프링 부트가 선택한 기술, 자동으로 만들어주는 구성, 디폴트 설정이 어떤 것인지 확인할 수 있다
  • 필요할 때 부트의 기본 구성을 수정하거나, 확장할 수 있다
  • 나만의 스프링 부트 모듈을 만들어 활용할 수 있다

 

 

 


- 출처 : 인프런 토비의 스프링 부트 - 이해와 원리 강의

반응형