개발/Framework

[Spring 시리즈] Spring Framework

알 수 없는 사용자 2024. 8. 8. 14:58

 

안녕하세요! ITibiza입니다.

 

 

오늘은 Spring Framework에 대해서 알아보는 시간을 가지려고 합니다.

어떤 언어든 패키지로 필요한 프레임워크 들이 있죠!

그 중 한국에서 가장 많이 사용하는 언어는 JAVA이기도 하고 또 떼려야 뗄 수 없는

프레임 워크가 바로 Spring이기도 합니다!

 

시대가 바뀜에 따라 꼭 이 언어와 프레임워크를 알아야할 필요는 없지만 

위 통계로도 보시다시피 한국 내에서는 압도적이니 만큼 Spring에 대해서 한 번 알아가 보는 시간이 되었으면 좋겠습니다.

 

Spring Framework

 

짧게 정리 하자면

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

 

일반적으로 위와 같이 정의하지만 글로만 읽었을 땐 이해가 바로 되지 않으니 구문에 대해서 좀 더 자세히 알아보도록 하겠습니다.

 

1.엔터프라이즈 개발

 

일반적으로 기업을 대상으로 하는 개발 이라고 하며 대규모 데이터 처리와 트랜잭션 이 동시에 여러 사용자로 부터 행해지는 매우 큰 규모의 환경을 엔터프리이즈 환경이라고 합니다.

2.프레임 워크

 

프레임워크는 디자인 패턴의 개념을 널리 알린 랄프 존슨님의 말을 빌리자면

소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것

 

또는

설계의 기반이 되는 부분을 기술하고 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 확장하는데 필요한 라이브러리
이 두 가지 요소가 통합되어 제공되는 형태를 말하며, 사용자가 이를 이용해 일정수준 이상의 품질을 보장받는 코드를, 비교적 빠른 시간에 완성 및 유지 보수할 수 있는 환경을 제공해 주는 솔루션.

 

쉽게 말해 "기본적인 설계나 필요한 라이브러리는 알아서 제공해 줄꺼니깐 넌 그냥 니가 하고싶은 기능 구현에만 전념해

정도로만 정리 하시면 될 것 같습니다.

 

Spring Framework의 장점

  1. 정형화 되어 있어서 일정 수준의 품질을 기대할 수 있고 유지보수가 쉬워진다.
  2. 스프링은 전체 구조에 집중 했기에 특정 영역의 프레임워크와 공존하는 방식으로 사용할 수 있다.
  3. 의존성 주입(DI) 및 제어의 역전(IoC), 관점 지향 프로그래밍 (AOP)

 

Spring Framework의 단점

  1. Framework대한 많은 이해도와 지식을 요구함.
  2. 다양한 방법론( XML 기반 의존성 vs 애너테이션 기반의존성, 리엑티브 웹 vs 서블릿 웹 등등)

 

위 Spring Framework 장점 중 언급 했던 의존성 주입(DI)제어의 역전(IOC) 꼭 알아가야 하는 사항이니 

짚고 넘어가도록 하겠습니다.

 

제어의 역전(IOC)

일단, IoC에 대해 깊게 이해하기 위해서는 Dependency와 Dependency Inversion 그리고 Depdendency Injection에 대한 개념을 이해하고 있어야 하므로 위 내용은 따로 작성 후 기재 하도록 하겠습니다.

 

다시 돌아와서 IOC는 Inversion of Control의 약자로 "제어의역전" 이라고 부릅니다.

 

일반적으로 지금까지 프로그램은

객체 생성 -> 의존성 객체 생성 -> 객체 내의 메소드 호출하는 방식이었습니다.

이는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 작업에 직접적으로

참여합니다. 즉, 모든 작업을 사용자가 제어 했습니다.

 

하지만 IOC에서는 이 흐름의 구조를 바꿉니다.

IOC에서의 객체는 자기가 사용할 객체를 선택하거나 생성하지 않고

자신이 어디서 만들어지고 어떻게 사용되는지 또한 모릅니다.

자신의 모든 권한을 다른 대상에 위임함으로써 제어 권한을 위임 받은 특별한 객체에 의해 결정되고 만들어집니다.

쉽게 말해 IOC란 기존 사용자가 모든 작업을 제어하던

( 객체 생성 -> 의존성 객체 생성 -> 객체 내의 메소드 호출) 과정을 특별한 객체(Dispatcher-Servlet) 에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어 간 것을 IOC, 제어의 역전 이라고 합니다.

 

1. IOC의 분류

 

DL(Dependency Lookup) 과 DI (Dependency Injection)

 

1-1. 의존성 주입 (Dependency Injection, DI)

 

의존성 주입은 외부에서 객체의 의존성을 주입하는 방식입니다. 그리고 이 방식은 아래와 같습니다.

 

생성자 주입 : 객체가 생성될 때 생성자를 통해 의존성을 주입받습니다.

public class MyClass {
    private final MyDependency dependency;

    @Autowired
    public MyClass(MyDependency dependency) {
        this.dependency = dependency;
    }
}

 

세터 주입 : 객체가 생성된 후 세터 메서드를 통해 의존성을 주입받습니다.

public class MyClass {
    private MyDependency dependency;

    @Autowired
    public void setMyDependency(MyDependency dependency) {
        this.dependency = dependency;
    }
}

 

필드 주입 (Field Injection): 필드에 직접 주입합니다.

public class MyClass {
    @Autowired
    private MyDependency dependency;
}

 

1-2. 의존성 조회 DI (Dependency Injection)

 

의존성 조회는 객체가 자신의 의존성을 직접 조회하여 사용하는 방식입니다.

객체는 IoC 컨테이너로부터 필요한 의존성을 요청합니다.

 

EX)

 

1. ApplicationContext를 이용한 조회

public class MyClass {
    public void doSomething() {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        MyDependency dependency = (MyDependency) context.getBean("myDependency");
        // Use the dependency
    }
}

 

2. Service Locator 패턴

public class ServiceLocator {
    private static ApplicationContext context;

    public static void setApplicationContext(ApplicationContext context) {
        ServiceLocator.context = context;
    }

    public static MyDependency getMyDependency() {
        return (MyDependency) context.getBean("myDependency");
    }
}

public class MyClass {
    public void doSomething() {
        MyDependency dependency = ServiceLocator.getMyDependency();
        // Use the dependency
    }
}

 

오늘 이렇게 간단하게나마 Spring에 대해서 알아보았는데요. 위 글에서 단점으로 언급 되었던 "Framework대한 많은 이해도와 지식을 요구함." 말과 같이 다음 시간에는 AOP와 Spring 내부 구조 및 설정 파일 내용에 대해서 알아보도록 하겠습니다!

 

 


 


필자의 잘못된 부분이나 피드백은 언제든지 댓글로 남겨주세요!

감사합니다^^