[Spring] Spring Framework 기초

Framework 탄생 전

  • SW 재사용성을 높일 수 있는 방안들
    • copy & paste
    • 자주 사용되는 유사한 기능들을 모아 메소드로 정의하여 재사용(메소드 호출)
      • 복사, 붙이기보다는 진보된 방식이지만 작업 영역 간의 결합도(Coupling) 문제는 여전히 존재
    • 클래스의 재사용(상속)
    • AOP (Aspect Oriented Programming)

 

디자인 패턴

  • 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로 소프트웨어 개발과정에서 발견한 노하우를 축적하여 이름을 붙여 이후에 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것
  • 이 용어를 소프트웨어 개발영역에서 구체적으로 처음 제시한 곳은 GoF(Gang of Four)라 불리는 네 명의 컴퓨터 과학 연구자들이 쓴 서적 Design Patterns: Elements of Reusable Object Oriented Software이다.

 

디자인 패턴을 사용하는 이유

  • 요구사항은 수시로 변화하기 때문에 요구사항 변경에 대한 소스코드 변경 최소화 필요
  • 여러 사람이 같이 하는 팀 프로젝트 진행에 범용적인 코딩 스타일 필요
  • 인수인계 상황 발생 경우 직관적인 코드 사용 필요

 

프레임워크의 정의

  • 비기능적(Non-functional) 요구사항(성능, 보안, 확장성, 안정성 등)을 만족하는 구조와 구현된 기능을 안정적으로 실행하도록 제어해주는 잘 만들어진 구조의 라이브러리 덩어리
  • 프레임워크는 애플리케이션들의 최소한의 공통점을 찾아 하부구조를 제공함으로써 개발자들로 하여금 시스템의 하부구조를 구현하는데 들어가는 노력을 감소시켜준다. → Business Logic에 좀 더 집중할 수 있다.

 

디자인 패턴 + 프레임워크의 조합

  • 디자인 패턴은 프레임워크의 핵심적인 특징이고 프레임워크를 사용하는 애플리케이션에 그 패턴이 적용된다는 특징을 가지고 있다.
  • 디자인 패턴은 애플리케이션을 설계할 때 필요한 구조적인 가이드라인이 되어줄 수 있지만 구체적인 구현된 기반 코드를 제공하지는 않는다.
  • 프레임워크는 디자인 패턴과 함께 제공해서 프레임워크를 사용하는 구조적인 틀과 구현 코드의 패턴이 적용된 기반 클래스 라이브러리를 함께 제공한다.
  • 개발자는 프레임워크의 기반 코드를 확장하여 사용하면서 자연스럽게 그 프레임워크에서 사용된 패턴을 적용할 수 있게 된다.

 

라이브러리란?

  • 프레임워크는 특정 부분의 기술적인 구현을 라이브러리 형태로 제공한다
  • Class Library는 프레임워크의 정의 중 하나인 Semi Complete (반제품)이다.

 

 

라이브러리 vs 프레임워크

특징 프레임워크 라이브러리
유저코드의 작성 프레임워크 클래스를 서브클래싱해서 작성 독립적으로 작성
호출흐름 프레임워크 코드가 유저코드 호출 유저코드가 라이브러리 호출
실행흐름 프레임워크가 제어 유저코드가 제어
객체의 연동 구조프레임워크가 정의 독자적으로 정의

 

 


Spring Framework란?

  • Rod Johnson이 만든 오픈 소스 프레임워크로 Java 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다.
    • 복잡한 엔터프라이즈 애플리케이션 개발을 겨냥해서 탄생
    • 2002년 책을 통해 소개
  • Ejb 기반으로 개발을 하지 않고 POJO 기반으로 개발을 하더라도 가볍고 제어가 가능한 상호 관련이 적은 AOP를 지원하고 컨테이너를 통해 라이프사이클을 관리하고 xml 기반으로 컴포넌트를 개발할 수 있도록 지원해주는 프레임워크이다.
  • Spring은 경량의 제어 역행과 관점 지향 컨테이너 프레임워크이다.
    • 경량: 전체 스프링의 크기는 1MB 남짓한 하나의 jar 파일, 스프링에 의해 발생하는 부하는 무시해도 되는 부분
    • 관점 지향: 스프링은 관점지향 프로그래밍을 위한 풍부한 지원을 한다.
    • 제어 역행: 제어역행(IoC)라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
    • 컨테이너: 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 스프링은 일종의 컨테이너이다.

 

Spring Framework 구성 기능 요소

  • Spring은 필요한 기능을 모듈로 제공하고 있기 때문에 필요한 모듈만 가져다 사용하면 된다. 기본 모듈은 Spring-Context
  • 필요한 모듈은 pom.xml 문서에 등록하여 의존관계에 해당하는 모든 라이브러리를 한번에 관리할 수 있다.