본문 바로가기
Spring-Java/Spring

Day46_Spring Framework

by 현대타운301 2023. 10. 25.

2023.10.23

 

Day46 세 줄 요약

Spring 프레임워크를 통해 웹 어플리케이션을 효율적으로 개발할 수 있다.

Spring 프레임워크를 다른 말로 'DI 컨테이너' 혹은 'IoC 컨테이너' 라고도 부른다.

의존성을 주입(DI)할 때 자연스럽게 IoC가 일어난다.

 


 

    기본 개념 및 용어

     

    프레임워크(Framework)

    어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조

    소프트웨어 분야에서는 '개발에 있어서 하나의 뼈대 역할을 하는 것'을 지칭하는 용어로 쓰임

    여러 기능을 가진 클래스와 라이브러리가 합쳐진 형태

         - 웹 프레임워크 : 웹 서비스 개발을 위한 최적의 환경이 갖춰진 프레임워크

         - ex) Spring(Java), Django(Python), Laravel(PHP), Ruby on Rails(Ruby) 등

     

     

    모듈화

    하나의 시스템(혹은 프로그램)을 여러 개의 기능적 구성요소(모듈)들의 조합으로 구성하는 설계 방식

    다형성, 재사용성을 효율적으로 활용할 수 있는 설계 방식

    Spring을 구성하는 모듈 (위키백과)

     


     

    Spring (= Spring Framework)

     

    Java 어플리케이션(주로 웹 관련)을 개발함에 있어 포괄적인 인프라구조를 지원하는 Java 플랫폼

    JVM에서 작동

     

    * 특징

    1) POJO(Plain Old Java Object) 방식

    : 단순히 getters & setters로 구성된 가벼운 객체구성 방식을 의미

         -  무겁고 종속성이 강한 객체를 다룬 EJB에 반대해 탄생한 개념

         - 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이

         - Spring에서 POJO는 곧 'Beans'를 의미

     

    * Beans?

    : 애플리케이션의 핵심을 이루는 객체로, Spring IoC 컨테이너에 의해 인스턴스화, 관리, 생성됨

         - 사용자가 설정한 메타데이터(XML 파일)에 의해 생성

         - 컨테이너는 해당 XML 파일을 통해 Bean의 생성, Life cycle, Dependency(종속성) 등을 알 수 있음

     

    2) AOP(Aspect Oriented Programming), 관점지향 프로그래밍

    : 여러 모듈에서 공통적으로 사용하는 기능을 분리해서 관리하는 방식

         - 객체지향 프로그래밍에서 보다 더 발전된 형태로, 객체 자체가 아닌 '어떤 일을 처리하는가'에 포커스

         - 한마디로 '기능'에 중점을 두고 큰 범위로 묶어 모듈화 효율을 개선한 방식

     

    3) DI(Dependency Injection), 의존성 주입

    : 구성요소(객체) 간의 관계가 해당 소스코드 내부가 아닌 외부로부터 설정이 되어 정의되는 방식

         - A 객체가 B,C 객체를 '사용(참조)'한다. = A 객체는 B,C 객체에 '의존'한다.

         - 외부에서 객체를 주입받는 방식을 통해 객체간 결합이 약한(=유지보수가 용이한) 프로그램 설계 가능

         - Spring에선 메타데이터(XML, annotation)를 기반으로 IoC 컨테이너에 의해 DI가 이루어짐

     

     

     

    4) IoC(Inversion of Control), 제어의 역전 또는 역전 제어

    : 프레임워크의 특정 모듈이 사용자가 직접 하던 작업을 대신 해주는 과정에서 '제어가 역전되었다' 라는 표현을 사용

         - 객체를 생성하고 변수에 대입하는 일을 Spring에 맡김 (생성뿐만 아니라 소멸을 포함한 라이프 사이클 전체를 관장)

         - 따라서 DI 과정에서는 IoC가 자연스레 발생함(Spring 프레임워크에선 서로 뗄 수 없는 개념)

     

     

     

     

    * 참고링크 

    https://www.codestates.com/blog/content/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8