콘텐츠
Spring Framework
우리가 웹 개발 시 많은 사이트가 채용한 웹 프레임워크인 Spring 에 대해 정리하고 이해하는 시간을 가지고자 한다.
블로그에서 JDK 설치 도 다루고 Tomcat 설치 도 다루어 기초적인 웹 어플리케이션을 작성할 환경을 구성 했으니 Spring 기반의 웹 사이트를 만들고 운영하는 방법 까지 다루어 보자.
Spring Framework 는 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크다.
Framework
여기서 프레임워크란 소프트웨어 개발에 있어 일종의 뼈대, 기반 구조를 제공하는 도구 혹은 라이브러리의 집합을 이야기 한다.
즉, Spring Framework 이하 Spring 은 자바 기반의 소프트웨어를 만드는데 사용 되는 공통적인 패턴, 기능을 사전에 정의하고 구현해 놓은 프레임워크 종류 중 하나다.
엔터프라이즈 급 (비즈니스 환경, 즉 기업 수준) 애플리케이션을 개발 하는데 필요한 프로그래밍, 구성 모델을 제공하고 있다.
Spring 은 자바 애플리케이션 개발을 더 쉽고 빠르게, 보다 광범위 하게 할 수 있도록 지원하는 것을 목적으로 한다.
웹 개발에 이용
이 프레임워크는 웹 개발에 널리 사용 된다. 이를 위한 여러 모듈과 프로젝트를 주로 제공 하는데 흔하게 들어본 MVC (Model-View-Controller) 패턴 구현은 이 프레임워크를 통해 개발하는 경우가 많다.
Spring Framework 특징
스프링 프레임워크는 인기가 많은 오픈소스 프레임워크인 만큼 자바 앱 개발에 좋은 여러가지 특성을 지니고 있다.
경량 컨테이너
먼저 컨테이너란 애플리케이션에서 객체의 생성, 구성, 관리 등을 담당하는 하나의 컴포넌트 (재사용이 가능한 기능 단위 블록을 이야기 함) 를 말한다.
여기서 Spring 은 경량의 IoC(Inversion of Control, 제어의 역전) 란 컨테이너를 제공 하는데 객체의 생성, 생명 주기를 애플리케이션 소스 코드가 아니라 프레임워크가 관리하도록 하는 개념이다.
IoC 컨테이너는 XML, 애노테이션, 자바 기반 구성 등 다양한 방식으로 애플리케이션의 구성을 정의할 수 있게 해준다.
의존성 주입(Dependency Injection, DI)
의존성 주입이란 용어는 소프트웨어 설계 패턴 중 하나다.
객체가 다른 객체의 인스턴스 (클래스가 실제로 실체화 된 것) 를 직접 생성하지 않고, 외부(주로 프레임워크나 컨테이너)로 부터 필요한 객체(의존성)을 받는 방식이다.
Spring Framework 도 이 의존성 주입을 통해 객체를 다룰 수 있게 해준다.
다양한 모듈
인기 있는 프레임워크인 만큼 다양한 모듈을 포함하여 용도에 맞는(개발, 보안, 데이터 엑세스, 메시징, 트랜잭션 관리 등) 모듈을 이용해 애플리케이션을 개발 할 수 있다.
이 외에도 트랜잭션 관리, AOP, 애플리케이션 모니터링과 관리, 마이크로서비스 아키텍쳐 지원 등의 여러 특징을 지닌다.
Spring Boot
Spring Boot 는 Spring Framework 를 기반으로 하는 Java 애플리케이션을 쉽게 개발할 수 있게 만들어주는 도구다.
Spring Framework 는 이런 Spring Boot 를 포함한 개발 방식, 방법론 이고 Spring Boot 는 이를 위한 개발 도구로 용어가 차이가 있다.
Spring 개발을 하기 위해 개발자가 xml 등을 이용해 설정 하던 부분을 자동으로 해주며 쉽게 개발을 시작하고 배포하게 해준다.
Spring Boot는 이클립스와 같은 IDE에 STS 플러그인을 설치해 사용하거나 Maven, Gradle 등의 빌드 도구를 이용해 의존성 추가로 사용한다.
STS (Spring Tool Suite)
STS 는 위에 언급한 Spring Boot 를 포함한 Spring 개발에 특화된 IDE 다.
이를 설치하고 사용하는 방법은 이전 게시글 Spring 개발의 시작 STS(Spring Tool Suite) 설치하기 에 다루고 있다.
STS 는 이전 게시글에서도 다루었지만 이클립스의 확장 플러그인을 추가해 익숙한 기존 환경에서 개발을 시작하는 것과 좀 더 Spring 에 특화 된 STS 자체를 설치해 사용하는 방법으로 나뉜다.
두 방식 모두 Spring 어플리케이션 개발이 가능하다.