📚 Study/Spring

Spring :: Spring Framework 이해하기 및 환경설정

bono-hye 2024. 1. 8. 23:11

🔎 개요

1. Framework

    어플리케이션을 구현하고 관리하는 환경(틀, 약속)

2. Spring Framework

    전달받은 설정 정보에 의해 어플리케이션을 구성하고, 객체를 생성, 관리하는 주체.

 


🔎 스프링 프레임워크(Spring Framework)의 개념

스프링은 자바 엔터프라이즈 어플리케이션 개발에 사용되는 어플리케이션 프레임워크.

어플리케이션 프레임워크는 어플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 틀과

공통 프로그래밍 모델, 그리고 API 등을 제공해준다.

 

   ✔ 어플리케이션의 기본 틀 → 스프링 컨테이너

        스프링은 스프링 컨테이너 또는 어플리케이션 컨텍스트라고 불리는 스프링 런타임 엔진을 제공한다.

        스프링 컨테이너는 설정 정보를 참고해서 어플리케이션을 구성하는 오브젝트(객체)를 생성하고 관리한다.         

        스프링 컨테이너는 독립적으로 동작할 수도 있지만 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용.

 

         스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법과

         스프링 컨테이너가 어플리케이션 오브젝트를 이용할 수 있도록 설정 정보를 작성하는 방법을 알아야 한다.

 

         ==> 설정 정보에 의해 어플리케이션을 구성하고 객체를 생성, 관리하는 주체

 

   ✔ 공통 프로그래밍 모델 → IoC/DI, 서비스 추상화, AOP

         프레임워크는 어플리케이션을 구성하는 오브젝트(객체)가 생성되고 동작하는 방식에 대해 틀을 제공해줄 뿐 아니라

         어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준도 제시한다.

         이런 틀은 보통 프로그래밍 모델이라고 한다.

         스프링은 세 가지 핵심 프로그래밍 모델을 제공한다.

 

         ① IoC/DI

             오브젝트 생명 주기와 의존 관계에 대한 프로그래밍 모델이다.

             스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체 지향 설계 원칙과

              디자인 패턴의 핵심 원리를 담고 있는 IoC/DI 를 프레임워크의 핵심 근간으로 삼고 있다.

              스프링 프레임워크에서 동작하는 코드는

              IoC/DI 방식을 따라 작성되어야 스프링이 제공하는 가치를 제대로 누릴 수 있다.

              스프링이 직접 제공하는 모든 기술과 API, 심지어 컨테이너까지도 IoC/DI 방식으로 작성되어(만들어져) 있다.

              스프링을 바르게 이해하고 효율적으로 사용하는데 기본이 되며 가장 중요한 기술이다.

IoC DI
- 객체 관리의 주체
- Inversion of Control : 제어의 역전(역제어)
- 객체 생성과 관리를 직접 하는 것이 아니라
- 외부(컨테이너)에서 만들어진 오브젝트(객체)를
  제공받는 입장이 되는 것.
- Bean : 스프링이 관리하는 대상.
- Bean Factory : 객체를 관리하는 주체. Bean을 찍어내는 공장
                           일반적으로 이 기능을 확장한
                            Application Context 를 사용하게 된다.
 - Application Context : Bean Factory 의 확장 버전.
                                     공장들이 모여있는 공단
- 설정 정보 : 어떤 객체들이 관리 대상인지 설정한 정보
                     XML, Annotation 등을 이용한다.
                     객체 의존 관계도 표현되어 있다.
- IoC 컨테이너 : 객체를 등록하고 관리하는 공간   
- 객체를 관리하는 방법.
- 자바에서 객체를 생성하고 관리하는 방법은
  모두 has-a 관계를 통해 처리해 왔기 때문에
  이들은 의존관계가 치밀하고 밀접한 상황일 수 밖에 없다.
  때문에 이러한 강한 결합 상태는
  유연성을 떨어뜨리는 결과를 초래하게 된다.
- Dependency injection : 의존성 주입(의존관계 주입)
- 의존관계 주입 : 의존 객체를 이 객체를 사용하는 객체에
                            외부에서 주입하는 액션(상태)
- 의존관계 : A 가 실행되기 위해서 B 를 필요로 하는 상태
- 의존객체 : A 입장에서 의존 객체는 B (즉, 주입되는 객체)





  ※ 우선 A객체에 B 객체의 주소를 넘겨줌으로써
     B 객체를 사용하게 된다면
     A 객체는 여전히  B 객체를 사용하는 데는 문제가 없고,
     B 객체는 A 객체와의 결합 상태가 느슨해진다고 할 수 있다.

     이 때, 넘겨주는 방법은 생성자 또는 setter() 메소드를
     이용하는 방법이 있다.

     DI를 위해 객체는 작은 객체부터 생성해서
     큰 객체로 DI 하는 과정을 반복적으로 거치게 된다.

     이 때, 완성된 오브젝트(객체)가 만들어질 때 까지
     객체를 관리할 주체가 필요한데,
     이 역할을 하는 것이 바로 컨테이너인 것이다.

      class 클래스 A
      {
           ...
           ...

           클래스B ob = new 클래스B();
                   
       }

 

          ② 서비스 추상화

              스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며

              유연한 어플리케이션을 만들 수 있게 되는데, 이를 가능하게 해 주는 것이 바로 서비스 추상화이다.

              구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.

              ex. 이 자리에는 홍길동만 앉을 수 있어 → "홍"씨이면 앉을 수 있어

 

           ③ AOP

               AOP 는 어플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적인 상태로 모듈화하는 프로그래밍 모델

              스프링은 AOP 를 이용해서 다양한 엔터프라이즈 서비스를 적용하고도 깔끔한 코드를 유지할 수 있게 해준다.

 

   ✔ 기술 API

          스프링은 엔터프라이즈 어플리케이션 개발의 다양한 영역에 바로 활용될 수 있는 방대한 양의 기술 API를 제공한다.

          UI 작성은 물론이고, 웹 프리젠테이션 계층, 비즈니스 서비스 계층, 기반 서비스 계층, 도메인 계층,

          데이터 엑세스 계층 등에서 필요한 주요 기술을 스프링에서 일관된 방식으로 사용할 수 있도록 지원해주는

          전략 클래스를 제공한다.

          스프링이 제공하는 API 와 지원 기술은 모두 스프링 프로그래밍 모델에 따라 작성되었기 때문에

          이를 가져다 쓰는 것만으로도 스프링 프로그래밍 모델을 코드에 자연스럽게 적용할 수 있다.

          스프링의 모든 기술은 표준 자바 엔터프라이즈 플랫폼(JavaEE)에 기술을 두고 있다.
          표준 기술과 더불어 유명 오픈 소스 기술과 주요 상용 기술에 대한 지원 기능도 다양하게 제공된다. 


🔎 스프링 프레임워크(Spring Framework)의 주요 기능과 특징

 

   1. 경량 컨테이너

       자바 객체를 담고, 이들 자바 객체의 생성과 소멸의 라이프 사이클을 관리.

 

    2. DI(Dependency Injection)
        의존성(관계) 주입(삽입)을 지원.
        설정 파일을 통해 객체간의 의존 관계를 정의

 

    3. AOP(Aspect Oriented Programming) 지원
        관점 지향 프로그래밍을 지원.
        여러 모듈에 공통적으로 쓰이는 기능을 분리하여 각 모듈에 적용하는 것이 가능.

    4. POJO(Plane Old Java Object) 지원
        가장 기본적인 자바 객체를 지원하여 기존 작성 코드의 유지성을 향상.
         → 보통의 자바(빈) 객체.
             - 상속(x)
             - 인터페이스(x)

    5. 트랜잭션 처리
        JDBC 나 JTA 를 사용하는 설정 파일을 통해 트랜잭션을 관리하여

        동일한 코드를 여러 환경에서 사용하도록 하는 것이 가능.

    6. 다양한 프레임워크와의 조합
        myBatis(iBatis), Hivernate, Struts, Struts2, JPA, JDO, Quartz 등
        다른 프레임워크 뿐 아니라 사용자가 만든 프레임워크와의 연동성을 제공한다.

 

 

    ※ 스프링 프레임워크(Spring Framework) 에서 가장 중요한 개념 ※

           - DI(Dependency Injection, 의존성 주입, 의존관계 주입)                                                                                                         : 객체를 생성하고 관리하는 의존성에 대해서 어떻게 처리하는가에 대한 개념

            - IoC(Inversion of Control, 제어의 역전)
              : 인스턴스의 생성부터 소멸까지의 인스턴스 생명주기 관리를 컨테이너가 대신하는 개념

 


🔎 Spring Framework 환경설정

※ 스프링 프레임워크(Spring Framework) 구성을 위해 스프링 프레임워크 관련 리소스를 다운로드 받아야 하는데
   http://www.spring.io 경로에 접근하여 확인해보면 다운로드 받을 수 있는 경로를 찾을 수 없는 상태이다.
   (STS 연동 (Maven 활용)만 가능한 형태...)


○ 적용 및 테스트가 원활한 버전으로 실습 환경 구성(비 STS)

   ① spring-framework-3.0.2-with-docs.zip
      기본적인 스프링 프레임워크 구성에 필요한 필수적인 jar 파일과
      스프링 프레임워크 설명문서(pdf 버전, html 버전)가 포함된 항목.
      스프링 원래의 jar 파일들~!!!

   ② spring-framework-3.0.2-dependencies.zip
      스프링 프레임워크 구성에 의존성을 가진 jar 파일들이 포함된 항목.
      어떤 기능을 수행하느냐에 따라 추가적으로 필요한 항목.
      스프링이 참조하는 의존 jar 파일들~!!!

※ 주의
   다운로드 받은 두 개의 압축 파일은 C:\ 또는 D:\ 드라이브 루트에 폴더를 생성하여 압축을 풀어놓는다.
   그 안에 들어있는 jar 파일들을 선택적으로 복사하여 사용할 예정이기 때문에
   쉬운 경로에 압축을 풀어놓는다는 의미도 있지만
   압축을 해제하는 과정에서 이름(경로 포함)이 길어서 특정 파일에 대해
   제대로 압축을 해제하지 못하고 오류가 발생하기 때문에 간단한 경로에서 압축을 해제할 수 있도록 한다.