ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring이란?
    프로그래밍 기초 공부 2022. 10. 3. 02:47

    열 두번째로 포스팅하게 된 내용은 Spring에 대해서 입니다.

     

    [ Spring이란 ]

    • Spring이란 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 경량급 프레임 워크
    • 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크로 사용되는 것
    • Spring 은 수많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용
    • 자바 백엔드 개발자는 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용
    • JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용,  JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀
    • 옛날에 비교하면 지금은 JAVA의 활용도가 높아졌고 따라서 프로젝트 규모도 커짐
    • Spring은 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해줄 수 있음
    • Spring을 사용하면 다른 사람의 코드를 참조하여 쓰기 편리한데 이말의 의미는 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조라는 것

     

    [ Spring 사용 이유 ]

    무거운 기존 프레임워크

    • 수많은 웹서비스 기반 기업들이 등장하면서 안정된 품질, 그리고 빠른 개발속도를 가진 프로그램이 필요
    • 그동안의 프레임워크는 너무 무겁고 내용이 방대
    • 무거운 프레임워크에서 벗어나 가볍고 강력한 프레임워크를 필요
    • 이러한 기업의 니즈에 맞춰 수많은 프레임워크들이 등장하게 되었고, 이때 경량 프레임워크인 스프링이 등장

     

    전체 구조를 다루는 프레임워크

    • 기존의 프레임워크는 특정 부분에 한정해 기능을 제공하고, 전체적인 로직은 개발자에게 맡기는 방식
    • 하지만 스프링은 특정 부분에 한정되지 않고, 백엔드 프로세스 구축 전 단계를 지원

     

     다양한 프레임워크와의 호환성

    • 스프링은 다른 프레임워크와의 호환성이 높아 기본 스프링 프레임워크를 유지하며, 다른 프레임워크를 혼용하여 사용
    • 다양한 방식으로 프로세스 개발이 가능

     

     

    [ spring의 특징 ]

    • Spring은 애플리케이션 프레임워크임
      • 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표
    • Spring은 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있음
    • Spring은 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리
    • 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용함

     

    Spring의 가장 큰 특징

    • 제어의 역전 (IOC, Inversion Of Control)
      • 일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업, 즉 객체를 직접 생성하여 메소드 호출함 이는 모든 작업을 사용자가 제어하는 구조
        • ex)  A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출
      • 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡김
      • 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됨
      •  IOC란 인스턴스의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스피링 컨테이너가 대신 해주는 것
      • 제어권이 개발자가 아닌 IOC에게 있으며 IOC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어하는 것

     

    •  의존성 주입 (DI, Dependency Injection)
      • 어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라 객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식
      •  프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의
      • 사용하는 주체(A)가 사용하려는 객체(B)를 직접 생성하는 경우 의존성이 높아짐
      • 하지만, 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어듬
      • 코드 재사용을 높여 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮춤
      • JAVA에서 데이터를 저장하고 가져오는 기능을 외부의 Oracle Database를 사용할 수도 있고, JDBC, iBatis, JPA 등 다른 프레임 워크를 이용해 짤 수도 있음
      • 이때 Spring을 이용하면 그때마다 필요한 부분을 뺐다 꼈다 하면서 적절한 상황에 필요한 기능을 해냄

     

    •  관점 지향 프로그래밍 (AOP, Aspect Object Programming)
      • 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리
      • 각각의 클래스가 있다고 가정, 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많음
      • 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않음
      • 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋아짐
      • AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법

     

    • POJO (Plain Old Java Object)
      • POJO의 조건
        • 특정 규약에 종속되지 않는다.
          • POJO는 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 함
          • 별다른 가치를 주지도 못하는 규약에 종속되지 않아야 함
          • 객체지향 설계의 자유로운 적용이 가능한 오브젝트여야함
        •  특정 환경에 종속되지 않는다.
          • 순수한 애플리케이션 로직을 담고 있는 오브젝트 코드가 특정 환경에 종속되게 하면 안됨
      • POJO의 장정
        • 코드가 상당히 깔끔함
        • 자동화된 테스트에 매우 유리
        • 객체지향적인 설계를 자유롭게 적용할 수 있음

     

     

    [ 스프링 컨데이너, 스프링 빈 ]

    • 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할
    • 자바 객체를 스프링에서는 빈(Bean)이라고 부름
    • 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식으로 객체를 생성하고 소멸시킬 수 있는데, 스프링 컨테이너가 이 역할을 대신해줌
    • 제어 흐름을 외부에서 관리하는 것
    • 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 줌

    BeanFactory와 ApplicationContext

    BeanFactory

    • BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할
    • getBean() 메소드를 통해 빈을 인스턴스화할 수 있음
    • 스프링 컨테이너 안에 스프링 빈 저장소가 있고, 그 안에 빈이 들어있다고 생각하면 됨

     

    ApplicationContext

    • ApplicationContext도 BeanFactory처럼 빈을 관리할 수 있음
    • ApplicationContext가 BeanFactory의 상속을 받았기 때문
      • 완전 정확히 BeanFactory자체에 상속을 받은 것은 아니지만 빈을 관리하는 기능을 물려받음
    • 국제화가 지원되는 텍스트 메시지 관리, 이미지같은 파일 자원을 로드, 리너스로 등록된 빈에게 이벤트 발생 알림 등 부가적인 기능을 갖고 있음
    • 스프링 컨테이너하면 주로 이 ApplicationContext를 뜻합
    • 부가 기능과 빈을 지연 없이 얻을 수 있다는 장점으로 ApplicationContext을 실제 개발에서 주로 사용함

     

    Spring Boot란?

     

    • 스프링 부트는 스프링을 더 쉽게 이용하기 위한 도구라고 볼 수 있음
    • 스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많음 ->
    • 여러가지를 세팅해야되는 진입 장벽이 존재하여 Spring 을 처음 배우려는 사람들은 중도에 그만두는 경우가 생김 ->
    • Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할

    • User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점
    • 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요
    • 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행

    '프로그래밍 기초 공부' 카테고리의 다른 글

    HTML, CSS, JS란?  (0) 2022.10.09
    커넥션풀(DBCP)이란?  (0) 2022.10.06
    Tomcat과 Nginx란?  (0) 2022.10.02
    프레임워크란?  (0) 2022.10.02
    HTTP의 메서드 GET과 POST의 차이  (0) 2022.09.30
Designed by Tistory.