Spring FrameWork

유동현·2022년 11월 10일
0
post-thumbnail

🧐Spring Framework

  • Framework : 어플리케이션을 구현하고 관리하는 환경(틀, 약속)을 의미한다.

개요

  • 개발자가 설정한 내용(xml,annotation)에 따라 어플리케이션을 구성하고 객체를 생성 및 관리하는 주체이다.

  • 이전의 Servlet Container도 Spring만 제어한다면 같이 제어할 수 있다.
    → 즉 Spring framework에도 컨테이너라는 개념이 있는것
    → JSP/Servlet보다 훤씬 큰 개념으로 서블릿 컨테이너도 스프링 컨테이너 안에 있는 개념이다.

  • 스프링은 스프링 컨테이너 OR Application Context 라고 불리는 스프링 런타임 엔진을 제공한다.

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

  • 일반적으로 스프링 컨테이너는 스프링에서 객체를 관리(생성,관리)하는 공간으로 이전에 서블릿에서 했던 doGet, doPost, scope까지 관리한다.

  • 보통 스프링 컨테이너는 웹 모듈에서 동작하는 서비스 , 서블릿으로 등록해서 사용한다.

  • 설정 정보를 전달하는 방법으로는 xml, annotation이 있다.
  • 스프링을 사용하려면 먼저 스프링 컨테이너를 다루는 방법, 스프링 컨테이너가 어플리케이션 오브젝트를 이용할 수 있도록 설정 정보를 작성하는 방법을 알아야 한다.

✏️개념

  • 스프링은 자바 Enterprise Application(단체 개발에 용이한 협업에 특화되어 있다는것) 개발에 사용되는 어플리케이션 프레임워크이다.
    → 어플리케이션 프레임워크는 어플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 그리고 기술 API등을 제공해준다.

장점

기존은 1번과 같이 A에 B만 꽂을수 있었으나 스프링 프레임워크를 사용하면 2번과 같이 A와 B의 관계가 고정되지않고 A에 여러가지를 꽂아 사용할 수 있게 된다.

  
1.  A                       2.       A
    ↑                                ↑
    B                            S D C G H J 

💯공통 프로그래밍 모델

Framework라는 어플리케이션을 구성하는 객체가 생성되고 동작하는 방식에 대한 틀을 제공해줄 뿐 아니라
어플리케이션 코드가 어떻게 작성되어야 하는지에 대한 기준이다.
Spring은 3가지 핵심 프로그래밍 모델을 제공

①Ioc/DI

  • 오브젝트 생명 주기와 의존 관계에 대한 프로그래밍 모델이다. 스프링은 유연하고 확장성이 뛰어난 코드를 만들 수 있게 도와주는 객체 지향 설계 원칙과 디자인 패턴의 핵심 원리를 담고 있는 IoC/DI 를 프레임워크의 핵심 근간으로 가진다.

  • 스프링 프레임워크에서 동작하는 코드는 IoC/DI 방식을 따라 작성되어야 한다. 스프링이 직접 제공하는 모든 기술과 API, 컨테이너 모두 IoC/DI 방식으로 작성되어 있다.

Ioc

IoC → - 객체 관리(활용)의 주체
                 - Inversion of Control : 제어의 역전(역제어) //클래스내부의 메소드와 객체가 없으면 기동할수없게되는 즉 밑의 그림에서 도형 객체가 없으면 업무를 할 수 없게되는 상황
                 
                 - 객체 생성과 관리를 직접 하는 것이 아니라
                   외부(컨테이너)에서 만들어진 오브젝트(객체)를
                   제공받는 입장이 되는 것
                   
                 - Bean : 스프링이 관리하는 대상
                 
                 - Bean Factory : 객체를 관리하는 주체 → bean을 찍어내고 관리하는 '공장'
                   일반적으로 이 기능을 확장한 Application Context 를 사용하게 된다.
                 
                 - Application Context : Bean Factory 의 확장 버전 → '공단'
                 
                 - 설정 정보 : 어떤 객체들이 관리 대상인지 설정한 정보
                   XML, Annotation 등을 이용한다.
                   객체 의존 관계도 표현되어 있다.
                 
                 - IoC 컨테이너 : 객체를 등록하고 관리및 활용하는 공간
		   → 이를 가리켜서 '스프링', '스프링컨테이너'라고도 한다.
  • Annotation :

    코드레벨에서 바꿔쓰지 않아도 돼서 사용자 입장에서 편함
    컴파일하고 실행과정에서 내용 바꿀 수 없음

  • XML

    컴파일하고 실행과정에서 바꿀 수 있음. 배포한 뒤에도 xml에 적은 객체 수정하면 여러 가지 꽂을 수 있음 즉 유연성이 더 뛰어나다




DI

위 그림에서 외부에서 도형인터페이스를 통해 클래스의 사용에 필요한 객체(삼각형,사각형,원형)을 삽입하여
객체에 대한 의존성을 주입하는 컨트롤을 DI(Dependency Injection)이라고 부른다.

·DI → - 객체를 관리(활용)하는 방법
                - 자바에서 객체를 생성하고 관리하는 방법은
                  모두 has-a 관계를 통해 처리해 왔기 때문에
		       ----------
			   └→ 포함된 관계

                  이들은 모두 의존 관계가 치밀하고 밀접한 상황이다.
                  때문에... 이러한 강한 결합 상태는
                  유연성을 떨어뜨리는 결과를 초래하게 된다.
	  		 
             → ex. 모터를 고치려면 선풍기 다 뜯어고쳐야 한다.
			      이러한 결합 상태를 풀어주는 과정(방법)이 바로 DI 이다.
                - Dependency Injection : 의존성 주입(의존관계 주입)
                - 의존관계 주입 : 의존 객체를 이 객체를 사용하는 객체에
                 외부에서 주입하는것
		 
                - 의존관계 : A 가 실행되기 위해서 B 를 필요로 하는 상태
                - 의존객체 : A 입장에서 의존 객체는 B (즉, 주입되는 객체)
			     → ex. '선풍기' 입장에서 의존 객체는 '모터' '모터'입장에선 '나사'

                ※ 우선... A 객체에 B 객체의 주소를 넘겨줌으로써
                   B 객체를 사용하게 된다면...
                   A 객체는 여전히 B 객체를 사용하는 데는 문제가 없고,
                   B 객체는 A 객체와의 결합 상태가 느슨해진다고 할 수 있다.
			
                   객체를 넘겨주는 방법에는 생성자 또는 setter() 메소드를
                   이용하는 방법이 있다.
                
                   DI 를 위해 객체는 작은 객체부터 생성해서
                   큰 객체로 DI 하는 과정을 반복적으로 거치게 된다.
                           ---
                        의존성 주입

			+) 선풍기 만들 때, 선풍기 부터 만드는 거 아니라,
			   선풍기의 나사 - 코일 - 자석 만들고 하는 거!

            이 때, 완성된 오브젝트(객체)가 만들어질 때까지
            객체를 관리할 주체가 필요하게 되는데
            그 역할을 하는 것이 바로 Ioc 또는 스프링 컨테이너인 것이다. 
		   → 그 관리를 스프링한테 맡기는 거




②서비스 추상화

  • 개발자가 하는일에 속한다.

  • 스프링을 사용하면 환경이나 서버, 특정 기술에 종속되지 않고 이식성이 뛰어나며 유연한 어플리케이션을 만들 수 있게 되는데, 이를 가능하게 해 주는 것이 바로 서비스 추상화이다. 구체적인 기술과 환경에 종속되지 않도록 유연한 추상 계층을 두는 방법이다.

<서비스 추상화>
기능() {	
   [모터 ob = new 모터();] 
}
라고 되어있으면 그 자리에는 모터만 들어올 수 있는 거
그런데, 그 [] 자리에 그냥 네모 모양으로 구멍만 뚫어놓으면

네모로 생긴 모터는 다 끼워넣을 수 있음
동그라미로 생긴 모터는 못 끼워넣겠지만 ! 

 	│ㅇ 특정 자리에 유동현 앉을 수 있다 → 해놓으면 나만 앉을 수 있음
 	│ㅇ 20대만 앉을 수 있다. → 나 뿐 아니라, 그냥 20대 다 앉을 수 있음
 	│ㅇ 사람 앉을 수 있다. → 사람이면 다 앉을 수 있다.
   	     ==> 아래로 갈수록 추상화 되어가는것
	     
======> 이게 <서비스 추상화> 이다.

해당 자리에 <Rect ob = new Rect();> 해놓으면 Rect 클래스 인스턴스만 올 수 있는데,
그냥 <사각형 인터페이스> 라고 해두면
	Rect implements 사각형
	Circle implements 사각형
	Angle implements 사각형
하게되면 전부 사각형으로 <업캐스팅> 이 가능하므로 전부 해당자리로 갈 수 있게된다.

======> 이게 [[서비스 추상화]]




③AOP(관점지향프로그래밍)

  • Aspect Oriented Programming

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

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

  • AOP는 자바의 OOP와 다른것이 아닌 OOP를 보조하는 개념이다.




스프링 프레임워크의 주요 기능과 특징

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

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

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

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

   5. 트랜잭션 처리
      JDBC 나 JTA 를 사용하는 설정 파일을 통해
      트랜잭션을 관리하여 동일한 코드를 여러 환경에서 
      사용하도록 하는 것이 가능

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

0개의 댓글