Spring

Spring Core

ghan2 2024. 11. 18. 23:58

라이브러리와 프레임워크의 차이

  • 프레임워크: 라이브러리들의 조합
  • 공통점: 특정 문제를 일반적인 방법으로 해결하기 위한 코드를 제공한다
  • 차이점:
    • 프레임워크는 주도권을 프레임워크 자신이 가진채로 동작을 하고, 라이브러리는 주도권이 나에게 있다.
    • 프레임워크는 원하는 기능을 구현하기 위하여 일정한 형태(골격)을 제공한다.
    • 라이브러리는 함수의 집합

왜 프레임워크를 써야 할까?

  • 기능적 요구 사항과 비 기능적 요구사항이 뭘까?
    • 이번주 내내 해야할 이야기
    • 소프트웨어는 항상 이 두가지로 나뉜다.
    • 이 애플리케이션이 http를 사용해서 일련의 과정을 통해 구현하는 것이 기능적 요구사항(구현에 가까움), 사용자 입장에서 고려하지 않아도 되는 부분 (오라클을 쓰던 mysql을 쓰던)
    • 비 기능적 요구사항은 사용자 입장에서 하는 요구사항 (결제 성공하면 이메일 보내주세요, 혹은 지문인식이 되게 해주세요)
  • 이 두 가지를 분리하고 구현에 가까운 반복되는 기능적 요구사항을 프레임워크로 대체하는 것이다.

어떤 프레임워크를 써야 할까?

  • 한 번 프레임워크를 도입하면 다시 걷어내기는 쉽지 않다.
  • 표준 프레임워크를 쓰는 것이 가장 좋다. 자바 개발자들이 현업에서 많이 쓰는, 계속 업그레이드 되는 프레임워크를 쓰는 것이 좋다. 스프링 프레임워크가 바로 그런 프레임워크이다!
  • 신뢰성 있는 프레임워크를 써야 한다. (꾸준히 개발이 되고 기능 추가가 되고 버그가 고쳐지는 것을 말한다.)
  • 이 프레임워크를 통해 만들어진 서브 프로그램이 있는지 확인

Spring Framework

  • 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
    • 서비스를 제공하기 위해 두 개 이상의 애플리케이션이 필요한 것을 엔터프라이즈 급 애플리케이션이라고 한다.
  • 스프링 코어는 modular방식, 원하는 기능만 뽑아서 사용할 수 있다.
  • 스프링은 비침투적인 방식으로 디자인 되어 있다. 스프링의 코드가 내 코드에 들어올 필요가 없는 상황으로 디자인 되어 있다.
    • 그러나 요즘에는 그렇지 않다.
  • 스프링은 infrastructure(데이터 저장소 등)를 다룰 수 있다.

Spring Framework 특징

  • 경량 컨테이너로서, Spring Bean을 직접 관리한다.
    • new할 필요가 없이 스프링 자체적으로 가지고 있는다
    • Spring Bean 객체의 라이프 사이클을 관리한다.
  • POJO(Plain Old Java Object) 기반의 프레임워크
  • 제어 역전(IoC: Inversion of Control)
    • 실제 구현한 방법이 의존성 주입이라는 방법
    • DDD, TDD와 같은 프로그래밍 개발론에 매우 적합하다.
  • 관점 지향 프로그래밍(AOP: Aspect-Oriented Programming)
    • 복잡한 비즈니스 영역의 문제와 공통된 자원 영역의 문제를 분리할 수 있다.
  • 영속성과 관련된 다양한 서비스 지원
    • 애플리케이션이 죽어도 데이터를 영원히 지속되어야 한다. 그렇게 하려면 메모리가 아닌 디스크 쪽에 저장을 해야한다. 결국 DB와 관련된 것이다.
  • 높은 확장성 및 범용성 그리고 Eco System