프레임워크란?
- 프레임워크(Framework)는 뼈대나 근간을 이루는 코드들의 묶음이다.
- 프레임워크는 프로그램의 기본 흐름이나 구조를 정하고, 개발자는 그렇게 미리 완성된 구조에 맞추어 코드를 작성한다.
- 따라서 개발자는 개발 시간을 단축할 수 있고, 코드의 일정한 품질이 보장되는 결과 또한 얻을 수 있다.
스프링 프레임워크의 등장 배경
- 스프링 프레임워크가 생겨난 2000년도 초엔 기업 단위의 대규모 개발이 활발함에 따라 여러 프레임워크가 이미 생겨나 자리 잡고 있었다.
- 하지만 그러한 프레임워크들의 문제점은 너무 무겁고, 복잡하고, 특정 분야에 전문적이며, 다른 프레임워크와의 융화가 쉽지 않다는 점이었다.
- 스프링 프레임워크는 그러한 프레임워크들의 문제점을 대부분 극복한 일종의 경량 프레임워크(light-weight Framework)이다.
스프링은 다른 프레임워크와 무엇이 다른가?
- 하나의 기능을 위해 너무 많은 구조를 필요로 했던 프레임워크와는 달리 스프링은 필요한 특정 기능을 위주로 간단한 jar 파일(Java archive)을 이용하기 때문에 가볍다.
- 다른 프레임워크는 객체 간의 관계를 구성하기 위해 별도의 API를 공부해야 했었지만 스프링은 일반적인 Java 문법을 사용하기 때문에 간단하여 진입장벽이 낮다.
- 스프링은 웹이나 데이터베이스와 같은 한 분야가 아닌 전체를 설계하는 용도로 사용된다.
- 스프링은 전체 구조에 집중하기 때문에 변화에 따른 수정을 최소화 한다. 따라서 다른 종류의 프레임워크와 공존하기 쉬운 프레임워크이다.
스프링 버전에 따른 기능 추가
- 스프링 프레임워크는 2019년 12월 26일 기준 현재 5.2.2 버전까지 나온 상태이다.
- 스프링 버전이 업그레이드 됨에 따라 추가된 주요 기능들은 다음과 같다.
버전 | 기능 |
2.5 | 어노테이션(Annotation)을 활용하는 설정을 도입하면서 편리한 설정과 개발이 가능하도록 지원 |
3.0 | 별도의 설정 없이도 Java 클래스만으로 설정 파일을 대신할 수 있게 지원 |
4.0 | 모바일 환경과 웹 환경에서 많이 사용되는 REST 방식의 컨트롤러 지원 |
5.0 | Reactor를 이용한 Reactive 스타일의 개발 환경 지원 |
- 기존에는 스프링에 관련된 설정을 XML 파일로만 가능하게 되어있었다.
- 스프링 3.0 버전에서 새로 생긴 Java 클래스 파일을 이용한 설정은 2.5 버전에서 추가된 어노테이션을 이용하는 것이다.
- 설정으로 사용할 클래스의 선언부 위에 @Configuration 어노테이션을 달아주면 해당 클래스의 인스턴스를 이용해서 설정 파일을 대신할 수 있다.
스프링의 주요 특징
- POJO(Plain Old Java Object) 기반의 구성
- 스프링은 별도의 API를 사용하지 않고 기본적인 자바 코드를 이용하여 객체 간의 관계를 구성할 수 있다.
- 따라서 스프링은 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않아 생산적이며, 유연한 테스트가 가능하다.
- 의존성 주입(DI, Dependency Injection)을 통한 객체 간의 관계 구성
- 의존성(dependency)이란 하나의 객체 A가 다른 객체 B 없이 제대로 된 역할을 할 수 없는 관계를 말한다.
- 이때 객체 A가 객체 B가 의존적이다 라고 표현한다.
- 주입(injection)이란 객체 A가 객체 B를 만들어 사용하는 방식과는 달리, 객체 A가 객체 B를 필요로 한다는 신호를 보내면 제3의 존재(Injector)가 객체 B를 객체 A에 전달해주는 것을 의미한다.
- 따라서 의존성 주입이란, 객체 A가 의존성을 가질 객체 B를 필요로 하는 상황에서 제 3의 존재가 객체 B를 찾아 객체 A에 전달해주는 것을 의미한다.
- 의존성 주입에 대한 추가적인 내용은 따로 포스팅할 예정이다.
- 관점 지향 프로그래밍(AOP, Aspect Oriented Programming) 지원
- 좋은 개발 환경의 중요 원칙 중 하나는 '개발자가 비즈니스 로직에만 집중할 수 있게 한다' 이다.
- 그 원칙을 달성하기 위해서는 '반복적인 코드의 제거'가 필요하다.
- 보안, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분을 스프링에서는 횡단 관심사(cross-concern)라고 한다.
- AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.
- 따라서 AOP를 사용하면 모듈화를 통해 반복적인 코드의 제거가 이루어지고, 개발자가 비즈니스 로직에 더욱 집중하게 되어 생산성의 향상으로 이어진다.
- 스프링은 AspectJ의 문법을 통해 AOP를 작성할 수 있다.
- 트랜잭션(Transaction)의 지원
- 데이터베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리이다.
- 트랜잭션을 처리하는 것은 데이터베이스의 완전성(integrity) 유지를 위해 반드시 필요한 작업이다.
- 스프링은 트랜잭션의 관리를 어노테이션이나 XML로 쉽게 설정할 수 있어 매번 코드를 작성할 필요가 없도록 설계되어 있다.
- 그 외에도 스프링에는 편리한 MVC 구조, WAS(Web Application Server)에 종속적이지 않은 개발 환경 등의 특징이 존재한다.
참고한 자료
- 코드로 배우는 스프링 웹 프로젝트 개정판 (구멍가게 코딩단 저, 남가람북스)
- https://en.wikipedia.org/wiki/Spring_Framework
'개발' 카테고리의 다른 글
스프링의 의존성 주입(DI) (0) | 2020.01.01 |
---|---|
펜윅 트리(Fenwick Tree)란? (0) | 2019.12.22 |
함수 포인터(Function Pointer)란? (0) | 2019.12.02 |
커버로스 프로토콜(Kerberos Protocol)이란? (1) | 2019.11.24 |
CSS 선택자(Selector)란? (0) | 2019.11.15 |