ABOUT ME

Today
Yesterday
Total
  • [Spring] 스프링 부트 살펴보기
    Backend/Spring 2023. 8. 15. 13:16

    스프링 부트는 실무 환경에서 활용 가능한 독립실행형 애플리케이션을 빠르게 개발할 수 있도록 스프링 기반의 다양한 도구와 기술을 제공하는 플랫폼입니다. 이는 개발자들에게 복잡한 설정 고민 없이 빠른 개발을 도와주는 개념으로 큰 의미를 지닙니다.

     

    스프링 부트가 아닌 스프링을 활용한 개발은 때때로 어떤 기능을 어떻게 활용해야 하는지에 대한 불확실성으로 인해 초기 진입이 어려울 수 있습니다. 이런 어려움을 해소하기 위해 등장한 것이 바로 스프링 부트입니다. 이 도구는 이러한 고민을 더 이상 걱정하지 않아도 된다는 안도감을 주는 역할을 합니다.

     

    스프링과 스프링 부트는 서로 다릅니다. 게다가, 각각의 버전도 독립적으로 존재하며, 스프링 부트는 스프링의 버전을 결정하는 역할을 수행합니다.

     

    스프링 부트의 핵심 목표

    • 매우 빠르고 광범위한 영역의 스프링 개발 경험을 제공합니다
      • 스프링이 제공하는 것을 넘어서 다양한 기술들을 제공합니다.
    • 강한 주장을 가지고 즉시 적용 가능한 기술 조합을 제공하면서, 필요에 따라 원하는 방식으로 손쉽게 변형 가능합니다.
      • 쉬운 개발 환경을 통해 고민 없이 빠르게 개발할 수있도록 지원합니다.
      • 스프링 부트가 제공하는 친절한 가이드를 따라가면서 개발하는 개념, 필요에 따라 수정 가능한 유연함 제공합니다.
    • 프로젝트에서 필요로 하는 다양한 비기능적인 기술(내장형 서버, 보안, 메트릭, 상태 체 크, 외부 설정 방식 등) 제공
      • 설정의 번거로움을 스프링 부트가 더욱 간편하게 제공합니다.

     

    스프링부트의 역사

    2012년 스프링 프레임워크 프로젝트에 이슈로 등록된 "Containerless 웹 개발 아키텍처의 지원"요청에서 논의와 개발 시작.

    https://github.com/spring-projects/spring-framework/issues/14521

     

    Improved support for 'containerless' web application architectures [SPR-9888] · Issue #14521 · spring-projects/spring-framewor

    Mike Youngstrom opened SPR-9888 and commented As the enterprise development landscape grows more diverse the simpler the application framework the more likely developers are to adopt the framework....

    github.com

     

    이슈에서 요청하였던 Containerless란?

    Containerless(컨테이너리스 웹 애플리케이션 아키텍처)

    Serverless란 매우 유사합니다. 서버에 대한 설치 관리가 없어도 서버의 운영이 가능하다는 개념인데 이와 유사한 개념입니다.

    컨테이너

    웹 컴포넌트(WebComponent)는 주로 동적인 데이터를 제공하는 역할을 수행합니다.

    웹 컨테이너(WebContainer)는 웹 컴포넌트를 관리하며, 요청이 들어오면 적절한 컴포넌트에 작업을 위임하는 역할을 수행합니다(라우팅 또는 매핑).

     

    자바로 풀어보면

    웹 컴포넌트는 서블릿(Servlet)이며, 웹 컨테이너는 서블릿 컨테이너(Servlet Container)입니다. 대표적으로 톰캣(Tomcat)이 있습니다.

     

    스프링 컨테이너는 서블릿 컨테이너의 뒷단에서 서블릿을 통해 웹 요청을 받아 스프링 컨테이너에 할당하고, 빈(Bean)에 작업을 위임합니다.

     

    ContainerLess의 장점은 다음과 같습니다.

    • 서블릿 컨테이너 설치, WAR 폴더 구조, web.xml, WAR 빌드, 배치, 포트 설정, 클래스로더, 로깅과 같은 애플리케이션 개발의 부담을 덜어줌
      • 서블릿 컨테이너가 필요하지만, 서블릿 컨테이너에 대한 지식을 학습하기보다는 스프링에서 제공해주면 좋겠습니다.
    • 독립실행형(standalone) 자바 애플리케이션으로 배포되므로 컨테이너에 의존하지 않고 동작 가능

     

    스프링 부트는 강한 주장을 가진 (opinionated) 도구입니다.

    스프링 부트는 스프링 프레임워크의 특유한 설계 철학을 반영하는 강력한 주장을 가진 도구입니다.

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

    • 극단적인 유연함을 추구합니다.
      • 다양한 기술을 유연하게 교체하면서 사용할 수 있는 장점을 제공합니다. 기존 코드 변경 없이도 다양한 관점에서 애플리케이션을 개발할 수 있습니다.
    • 다양한 관점을 수용합니다.
      • 표준 기술, 상용 기술, 오픈 소스 기술을 자유롭게 수용할 수 있다는 것을 의미합니다.
    • 하지만, 직접 선택하는 고민은 개발자가 다 직접해야 합니다.
      • 기술 선택에 대한 고민은 개발자 스스로가 해야 합니다. 이는 호환성과 가이드 등을 고려해야 함을 의미합니다.

    스프링 부트의 설계 철학

    • Opionionated - 자기 주장이 강한, 자기 의견을 고집하는 독선적인
      • 우리가 기술적 고민들을 하지 않도록 정해줄 테니까, 애플리케이션을 빨리 개발하세요.
      • 빠르게 시작할 수 있고, 광범위한 스프링의 기술들을 받아들입니다.
    • 일단 정해주는 대로 빠르게 개발하고 고민은 나중에 하세요.
    • 스프링을 잘 활용하는 뛰어난 방법을 제공합니다.

    스프링 부트가 결정해주는 것들

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

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

    유연한 확장

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

    스프링 부트에 대한 오해와 한계

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

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

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

     

    강의는 인프런의 토비의 스프링 부트를 수강하였습니다.

    https://www.inflearn.com/course/%ED%86%A0%EB%B9%84-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%9D%B4%ED%95%B4%EC%99%80%EC%9B%90%EB%A6%AC

     

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

    스프링 부트의 핵심 기능을 직접 만들어보면서 스프링 부트의 동작 원리를 이해하고, 이를 통해 스프링 부트를 잘 학습하고 사용하는 방법을 배우는 강의입니다. 스프링 부트가 사용하는 스프

    www.inflearn.com

     

Designed by Tistory.