개발

스프링 프레임워크(Spring Framework)란?

aahcbird 2019. 12. 26. 21:14

프레임워크란?

  • 프레임워크(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 어노테이션을 달아주면 해당 클래스의 인스턴스를 이용해서 설정 파일을 대신할 수 있다.

 

스프링의 주요 특징

  1. POJO(Plain Old Java Object) 기반의 구성
    • 스프링은 별도의 API를 사용하지 않고 기본적인 자바 코드를 이용하여 객체 간의 관계를 구성할 수 있다.
    • 따라서 스프링은 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않아 생산적이며, 유연한 테스트가 가능하다.
  2. 의존성 주입(DI, Dependency Injection)을 통한 객체 간의 관계 구성
    • 의존성(dependency)이란 하나의 객체 A가 다른 객체 B 없이 제대로 된 역할을 할 수 없는 관계를 말한다.
    • 이때 객체 A가 객체 B가 의존적이다 라고 표현한다.
    • 주입(injection)이란 객체 A가 객체 B를 만들어 사용하는 방식과는 달리, 객체 A가 객체 B를 필요로 한다는 신호를 보내면 제3의 존재(Injector)가 객체 B를 객체 A에 전달해주는 것을 의미한다.
    • 따라서 의존성 주입이란, 객체 A가 의존성을 가질 객체 B를 필요로 하는 상황에서 제 3의 존재가 객체 B를 찾아 객체 A에 전달해주는 것을 의미한다.
    • 의존성 주입에 대한 추가적인 내용은 따로 포스팅할 예정이다.
  3. 관점 지향 프로그래밍(AOP, Aspect Oriented Programming) 지원
    • 좋은 개발 환경의 중요 원칙 중 하나는 '개발자가 비즈니스 로직에만 집중할 수 있게 한다' 이다.
    • 그 원칙을 달성하기 위해서는 '반복적인 코드의 제거'가 필요하다.
    • 보안, 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분을 스프링에서는 횡단 관심사(cross-concern)라고 한다.
    • AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다.
    • 따라서 AOP를 사용하면 모듈화를 통해 반복적인 코드의 제거가 이루어지고, 개발자가 비즈니스 로직에 더욱 집중하게 되어 생산성의 향상으로 이어진다.
    • 스프링은 AspectJ의 문법을 통해 AOP를 작성할 수 있다.
  4. 트랜잭션(Transaction)의 지원
    • 데이터베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리이다.
    • 트랜잭션을 처리하는 것은 데이터베이스의 완전성(integrity) 유지를 위해 반드시 필요한 작업이다.
    • 스프링은 트랜잭션의 관리를 어노테이션이나 XML로 쉽게 설정할 수 있어 매번 코드를 작성할 필요가 없도록 설계되어 있다.
  5. 그 외에도 스프링에는 편리한 MVC 구조WAS(Web Application Server)에 종속적이지 않은 개발 환경 등의 특징이 존재한다.

 

참고한 자료

'개발' 카테고리의 다른 글

스프링의 의존성 주입(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