Skip to content

Latest commit

 

History

History
100 lines (63 loc) · 7.16 KB

readmespring.md

File metadata and controls

100 lines (63 loc) · 7.16 KB

Spring

[ 2022-08-22 ]

목차


  • Spring이란

    • Java의 웹 프레임워크로 Java 언어를 기반으로 사용한다.
    • JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀이라 할 수 있다.
    • 과거와 비교해 지금은 Java의 활용도가 높아졌고 따라서 프로젝트 규모도 커졌다.
    • JAVA의 활용도가 높아지면서, JAVA를 이용한 기술이 JSP, Mybatis, JPA 등의 기술이 생겨났다.
    • Spring은 이 기술들을 더 편하게 사용하기 위해 만들어진 것이다.
    • Spring은 다른 사람의 코드를 참조하기 쉽고 편리한 구조로 앞서 말한 기술들을 더 쉽게 사용해주는 오픈소스 프레임워크이다.
    • 결론적으로 Spring이란 Java기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다.
  • 프레임워크란

    과거 라이브러리와 프레임워크를 같이 보며 프레임 워크가 무엇인지 알아본 적 있다.

    프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다.
    프레임워크는 라이브러리의 컬렉션이라고 할 수 있다.

    그렇다면 라이브러리와 프레임워크의 차이점은 뭘까?

    프레임워크는 작업(work)의 구조(frame)가 정해져 있는 라이브러리라고 볼 수 있다.
    단, '프레임워크가 원하는 방식'대로 다양한 기능을 제공한다.
    앱/서버 등의 구동, 메모리 관리, 이벤트 루프 등의 공통된 부분은 프레임워크가 알아서 관리하며,
    개발자는 서비스별로 다른 부분만 "프레임워크가 정해준 방식대로" 클래스, 메서드 등에 구현해두면 된다.

    라이브러리는 상대적으로 F/W(framework)에 비해 자유도가 더 높고,
    프레임워크는 정해진 틀이있는 구조 내에서 프로그래밍을 하기 때문에 라이브러리에 비해 상대적으로 더 빠른 개발 효율성을 가지고 있다.

  • 스프링 프레임워크의 특징

    스프링 프레임워크는 4가지 특징이 있는데, IoC, DI, AOP, POJO방식 이렇게 존재한다.
    하나씩 살펴보자.

    • IoC(Inversion of Control, 제어 반전)

      • 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 스프링 컨테이너로부터 필요한 객체를 얻어 올 수 있다.

      • 개발자는 JAVA 코딩시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성, 소멸시킨다. 여기서 IoC란 객체의 생성부터 소멸까지 개발자가 아닌 스프링컨테이너가 대신 해주는 것이다.

      • 제어권이 개발자가 아닌 IoC에 있으며, IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸 하며 생명주기를 관리하는 것이다.

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

      • 각 계층이나 서비스들 사이 또는 객체들 사이에 의존성이 존재할 경우 스프링 프레임워크가 서로를 연결시켜준다. 이는 클래스들 사이에 약한 결합을 가능케 한다.

      • 프로그램에서 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의 되는 방식이다.

      • 코드 간의 재사용을 높이고, 소스코드를 다양한 곳에 사용하며 모듈 간의 결합도를 낮출 수 있다.

      • 대표적으로 라이브러리나 API, 프레임워크를 연동 할 때 연결하는 소스코드를 직접 작성하는게 아닌 외부 파일을 연결해 불러오는 방식이다.

    • AOP(Aspect Object Programming, 관점 지향 프로그래밍)

      • 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용할 수 있다.

      • 각각의 클래스가 있다고 가정하자. 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많다. 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않다. 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋다.

      • 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.

    • POJO(Plain Old Java Object) 방식

      • POJO는 Java EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.

      • 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.

      • 즉, getter/setter를 가진 단순한 자바 오브젝트를 말한다.

  • 스프링 프레임워크 런타임

    image url

    여기서 Core Container란 스프링 프레임워크의 핵심이며 스프링 빈의 생명 주기를 관리하고 Spring 프레임워크의 특징인 IoC와 DI(의존성 주입)을 제공해주는 역할을 한다. Spring 프레임워크에서 굉장히 중요한 역할을 하기때문에 확실히 공부할 필요가 있어보인다.

  • 스프링 프레임워크 모듈

    스프링 모듈 기능
    1. spring-core 스프링의 핵심인 DI(Dependency Injection)와 IoC(Inversion of Control)를 제공
    2. spring-aop AOP구현 기능제공
    3. spring-jdbc 데이터베이스를 쉽게(적은 양의 코드) 다룰수있는기능 제공
    4. spring-tx 스프링에서 제공하는 트랜잭션 관련기능 제공
    5. spring-webmvc 스프링에서 제공하는 컨트롤러(Controller)와 뷰(View)를 이용한 스프링MVC 구현기능제공

    스프링 프레임워크에서 제공하고 있는 모듈(라이브러리)을 사용하려면, 모듈에 대한 의존설정을 개발 프로젝트에 XML 파일등을 이용해서 개발자가 직접 하면 된다.