[Spring] 스프링 이란?

leehyunjon·2022년 5월 17일
0

Spring

목록 보기
1/3

스프링(Spring)

Spring은 자바(JAVA) 엔터프라이즈 개발을 위한 오픈소스 애플리케이션 프레임워크이다.

엔터프라이즈란 서버에서 동작하며 기업과 조직의 업무를 처리해주는 것을 얘기한다. 또한 중요한 기업 핵심정보를 다루기 때문에 보안, 안정성, 확정성이 요구된다.
이를 위해 사용 되는 것이 JavaEE(Java Enterprise Edition).
JavaEE플랫폼에서는 대규모, 다계층, 확장성, 신뢰성, 보안 네트워킹 애플리케이션의 개발과 실행을 위한 API 및 환경을 제공하고 있고 자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet, JDBC등의 많은 기술들이 포함되어 있다.

오픈소스란 소프트웨어 혹은 하드웨어 제작자의 권리를 지키면서 원시 코드를 누구나 열람할 수 있도록 한 소프트웨어

프레임워크란 개발 할 때 빈번하게 사용되는 범용 기능들을 한꺼번에 제공하여 개발의 기능 향상을 목표로 하는 소프트웨어 환경이다.
즉, 애플리케이션을 만들 때 개발에 필요한 기능을 제공해주는 틀이라고 생각하시면 될것같다.

참고로 Spring의 정확한 표현은 스프링 프레임워크(Spring Framework).

Spring 주요 특징

  • 경량 컨테이너

    • 객체의 생성부터 소멸까지의 라이프 사이클을 관리하며 스프링으로 부터 필요한 객체를 얻어올 수 있다.
    • Spring이 IOC기반의 프레임워크임을 의미한다.
  • 제어 역행(IOC : Inversion Of Control)

    • 인스턴스의 생성 부터 소멸까지 인스턴스의 생명주기 제어를 개발자가 아닌 프레임워크에 제어 권한을 넘겨 개발자가 비즈니스 로직에 조금 더 신경쓸수 있게한다.
  • 의존성 주입(DI : Dependency Injection)

    • 스프링 내부의 객체간의 관계를 관리
    • 내부에서 의존객체를 생성하는 것이 아닌 외부에서 의존객체를 주입하기 때문에 모듈간의 결합도는 낮아지고 유연성은 높아짐
  • 관점지향 프로그래밍(AOP : Aspect-Oriented Programming)

    • 트랜잭션, 로깅, 보안 등과 같이 공통으로 사용하는 기능을 분리해서 관리

Spring Framework의 구조

출처

  • Spring Core

    • Spring Core는 Spring Container를 의미한다.
      Container는 Spring Framework의 핵심이며 그 중 Bean Factory Container가 핵심이다.
      Bean Factory는 IOC패턴을 적용하여 객체 생성 부터 의존성 처리까지 모든 일을 처리하고 있다.
  • Spring Context

    • Spring Context는 Spring Core에서 지원하는 기능외에 추가적인 기능들과 좀 더 쉬운 개발이 가능하도록 지원한다.
  • Spring AOP

    • Spring Framework에 Aspect Oriented Programing을 지원하는 기능이다.
  • Spring Web

    • Web Application 개발에 필요한 Web Application Context와 Multipart Request등의 기능을 지원한다.
  • Spring MVC

    • Spring Framework에서 독립적으로 Web UI Layer에 Model-View-Controller를 지원하기 위한 기능.
  • Spring DAO

    • JDBC기반하의 DAO개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 지원
    • DAO(Data Access Object) : DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체
  • Spring ORM

    • Object Relation Mapping 프레임워크인 Hibernate등과의 결합을 지원하기 위한 기능

스프링(Spring)과 스프링부트(Spring Boot)

위에서 설명한 Spring은 다양한 특징들로 인해 java의 대표적인 프레임워크로 자리 잡았다. 하지만 복잡한 초기 설정과 같은 단점을 가지고 있었지만, Spring Boot로 인해 정말 간단하게 설정을 할 수 있게 되었다.

  1. Spring Boot는 내부에 Tomcat이 포함되어있다.

    • 별다른 Tomcat에 대한 설정 필요없이 was를 사용할 수 있다.
    • 서블릿 컨테이너가 내장되어 있으므로 프로젝트를 jar 파일 형태로 간단히 만들어 배포할수 있다.
  2. starter를 통한 dependency 자동화

    • Spring에서는 dependency을 설정할 때 연관된 다른 dependency들의 호환 버전을 일일이 맞추어 줘야 했다. 버전을 변경할때도 다른 dependency와의 호환성 때문에 버전 관리도 쉽지 않았다.
    • Spring Boot에서는 org.springframework.boot:spring-boot-starter-*라고 특정 목적을 달성하기 위한 의존성 그룹을 통해 dependency를 하나하나 설치 및 관리할 필요 없이 편리하게 dependency를 사용할 수 있다.
      예를 들어 JPA를 사용하고자 한다면 spring-boot-starter-data-jpa를 porm.xml(메이븐) 또는 build.gradle(그레들)에 추가해주면 JPA에 필요한 라이브러리를 자동으로 import한다.

      보시다 시피 spring-boot-starter-data-jpa를 gradle에 추가했을때 상호작용하고 호환되는 버전의 dependency들이 자동적으로 함께 추가되었다.
  3. Spring Security, Spring data JPA등과 같은 다른 Spring Framework 구성 요소를 쉽게 가져다 쓸 수 있다.

즉, 스프링 부트는 새로운 기술이 아닌 스프링 프레임워크의 단점을 보완한 도구이다.

출처


Reference

https://goddaehee.tistory.com/156

https://ooeunz.tistory.com/56#google_vignette

https://khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC

https://emongfactory.tistory.com/119

https://ooeunz.tistory.com/56#google_vignette

profile
내 꿈은 좋은 개발자

0개의 댓글