Spring 과 Spring Boot

웹 애플리케이션 서버를 만들 때 스프링을 이용하는게 가장 일반적일만큼 대한민국 개발자의 스프링 의존도는 상당하다. 요즘에는 Node.js 나 Django 로도 많이 개발을 하지만 가장 익숙한건 아무래도 스프링인 듯 하다. 이번 포스트에서는 스프링이 정확히 어떤 것인지 그리고 스프링 부트와 어떤 차이가 있는지 알아보고자 한다.

Spring?

스프링, 정확하게는 스프링 프레임워크이다. 먼저 스프링에 대해 이해하기 위해서는 프레임워크가 무엇인지, 라이브러리와의 차이가 어떤건지 알고 가는게 가장 중요하다. 라이브러리는 간단하게 특정 기능을 하는 코드 뭉치이다. 개발자는 자기 코드에 라이브러리를 포함시키고 원하는 기능을 사용해서 개발을 할 수 있다. 더욱 간단하게는 원하는 기능을 하는 함수를 콜해서 사용하는 것으로 라이브러리를 활용한다. 프레임워크는 라이브러리를 포함하는 개념이고, 개발자가 만든 코드를 사용한다. 코드를 어떻게 실행하는지는 코드를 사용하는 프레임워크에 달려있다.

그렇다면, 스프링 프레임워크라는 것은 무엇일까? 스프링 프레임워크는 여러 라이브러리를 제공하고, 그것을 활용해서 개발한 프로그램을 동작시킨다. 스프링 프레임워크의 위키백과 정의는 다음과 같다.

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.

출처: 위키백과

스프링 사이트에서는 스프링 프레임워크가 인프라와 관련된 내용을 애플리케이션 레벨에서 설정하도록 해줌으로써 개발자가 코드로 대부분을 컨트롤 할 수 있게끔 지원한다고 설명한다. 즉, 개발자가 코드 안에 애플리케이션 동작에 대한 내용을 기술하면 스프링 프레임워크가 이를 해석해서 동작하는 것이다. 스프링을 사용하는 가장 일반적인 예로는 Servlet API 가 있다. 개발자는 API를 처리할 클래스를 정의하고 이것이 Servlet API 를 위한 클래스임을 표시(어노테이션 활용)한다. 그 이후 프로그램을 실행하면 스프링은 API 요청이 들어오면 해당 클래스를 이용해서 처리한다. 개발자가 Servlet에 관련된 것을 개발하지 않아도 되며, 데이터 바인딩, 객체 생성 등 왠만한 것들은 스프링이 알아서 해준다. 이런 편한 점 때문에 많은 개발자들이 스프링 프레임워크를 사용하고 있다.

Spring Boot?

스프링 프레임워크는 기능이 많은만큼 환경설정이 복잡한 편이다. 이에 어려움을 느끼는 사용자들을 위해 나온 것이 바로 스프링 부트다. 스프링 부트는 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 정말 편하게 스프링을 활용할 수 있도록 돕는다. 스프링 부트 starter 디펜던시만 추가해주면 바로 API를 정의하고, 내장된 탐캣이나 제티로 웹 애플리케이션 서버를 실행할 수 있다. 심지어 스프링 홈페이지의 이니셜라이저를 사용하면 바로 실행 가능한 코드를 만들어준다. 실행환경이나 의존성 관리 등의 인프라 관련 등은 신경쓸 필요 없이 바로 코딩을 시작하면 된다. 그리고 바로 그것이 스프링의 키 포인트이다.

마무리

스프링 프레임워크는 라이브러리가 아닌 프레임워크이다. 단순히 코드를 제공하는 것이 아니라 프로그래밍 방법을 제공한다. 이렇게 프로그래밍 방법을 제공하고 개발자가 그에 맞추어 개발하는 방식은 어쩌면 너무 딱딱하고 획일화된 프로그램을 만들 수 있다. 하지만 특정 목적을 위한 프로그램을 만드는 데에 있어서 정형화된 방식은 효율성을 극대화 시켜준다. 그리고 스프링을 처음 사용하거나 웹 애플리케이션 서버를 간단히 만들 때 스프링 부트로 개발을 한다면 정말 빠르고 간편하게 프로그램을 만들 수 있다.