JavaRush /Java Blog /Random-KO /Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교

Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교

Random-KO 그룹에 게시되었습니다
안녕하세요! 현재 Java에 대한 지식을 갖춘 개발자에게 가장 인기 있는 개발 방향은 웹 개발입니다. 물론, 이 전문 분야에는 공부하는 데 필요한 기술 목록이 있습니다. 주요한 것 중 하나는 Spring 입니다 . Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교 - 1대신 Java EE를 배울 수 있다고 주장할 수도 있습니다 . 물론 이것은 사실이지만 이제 대부분의 새로운 프로젝트에서는 Spring을 사용합니다 . 이로 인해 Spring은 사실상 Java 웹 개발자의 기본 필수 기술이 되었습니다. 그리고 시장의 요구에 부응하고 싶다면 이를 연구해야 합니다. 오늘 저는 Spring 에 대해 이야기하고 싶습니다 . 즉, Spring에 대한 여러분의 비전을 조금 확장하고자 합니다. Spring 생성의 역사, Java EE 스택과의 주요 차이점에 대해 이야기하고 Spring 스택 의 주요 구성 요소에 대한 간략한 개요를 제공합니다 . 시작하자! Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교 - 2

1. 봄은 어떻게, 언제 나타났고, 시간이 지나면서 어떤 모습으로 진화했나요?

모든 것은 Rod Johnson이 "Expert One-onOne J2EE Design and Development"라는 책을 집필한 2002년 10월 에 시작되었습니다. WroxSpring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교 - 3 에서 출판한 이 책에서 저자는 당시 엔터프라이즈 Java 개발 상태를 설명하고 여러 가지 사항을 지적합니다. Java EE 및 컴포넌트 기반 (Enterprise Java Bean)EJB 의 단점 . 동시에 Rod Johnson은 일반 Java 클래스(POJO - 일반 Java 객체) 및 종속성 주입을 기반으로 하는 더 간단한 솔루션을 제안합니다. 책에서 그는 EJB를 사용하지 않고도 확장 가능한 고품질 온라인 예약 애플리케이션을 만드는 방법을 설명합니다. 저것들. 그는 애플리케이션 개발의 복잡성을 제거하고 이전에는 EJB를 통해서만 가능했던 모든 것을 간단한 JavaBeans를 사용하여 달성하는 방법을 명확하게 보여주었습니다. 그러나 Spring 의 범위는 서버 측에서 실행되는 소프트웨어 구성 요소의 개발에만 국한되지 않습니다. 모든 Java 애플리케이션은 단순성, 테스트 용이성 및 느슨한 결합 측면에서 프레임워크의 장점을 활용할 수 있습니다. 그의 J2EE 개발 디자인은 즉각적인 인기를 끌었습니다. 책의 일부로 무료로 제공되는 애플리케이션 코드의 대부분은 재사용이 가능했으며, 곧 많은 개발자가 자신의 프로젝트에서 이를 사용하기 시작했습니다. Wrox에는 소스 코드와 패치가 포함된 책의 웹 페이지가 있었습니다. 그들은 또한 책에 대한 온라인 포럼을 제공했습니다. 2003년 2월 개발자 Jurgen Heller와 Jann Karoff는 Rod Johnson에게 프레임워크 코드를 기반으로 한 오픈 소스 프로젝트를 만들도록 설득했습니다. 그 순간부터 Rod, Jurgen 및 Yann은 완전히 새로운 것을 만들기 위해 협력하기 시작했습니다. 실제로 새 프레임워크의 "Spring"이라는 이름을 생각해낸 사람은 Yann Karoff였습니다. 여기서 의미하는 바는 Spring이 봄과 같다는 것입니다. 전통적인 J2EE의 "겨울" 이후의 새로운 시작입니다.
  • 2003년 6월, Spring 0.9가 Apache 2.0 라이선스로 출시되었습니다.
  • 스프링 1.0은 2004년 3월에 출시됐다. 흥미롭게도 Spring 1.0이 출시되기 이전에도 이전 버전인 0.9는 매우 호평을 받았으며 널리 채택되었습니다.
  • 2004년 8월 Rod Johnson, Jurgen Heller, Keith Donald 및 Colin Sampaleanu 는 Spring 컨설팅, 교육 및 지원 회사인 인터페이스21을 공동 창립했습니다 .
  • 2006년 10월: XML 구성 파일을 단순화하는 Spring 2.0이 출시되었습니다.
  • 2007년 11월에 출시된 Spring 2.5에는 주석 구성이 도입되었습니다.
  • 2012년 12월에 출시된 Spring 3.2에는 Java 구성이 도입되었으며 Java 7, Hibernate 4, Servlet 3.0이 지원되었으며 Java 1.5 이상이 필요했습니다.
  • Yann Karoff는 일찍 팀을 떠났습니다. 로드 존슨은 2012년 스프링 팀을 떠났습니다. Jurgen Heller는 여전히 Spring 개발 팀의 활동적인 멤버입니다.
  • 2014년에 출시된 Spring 4.0에는 Java 8에 대한 지원이 추가되었습니다.
  • 또한 2014년에는 Spring Boot가 세상에 소개되었습니다.
  • 2017년에 스프링 5.0이 출시되었습니다. Spring 5를 지원하는 Spring Boot 2.x와 같습니다.
  • 실제로 이것이 우리가 가장 좋아하는 프레임워크가 지금 우리가 알고 있는 프레임워크가 된 방법입니다.

2. 스프링과 자바 EE

웹 개발자를 위한 두 가지 주요 Java 스택 인 SpringJava EE를 간단히 비교해 보겠습니다. Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교 - 4
자바 EE
장점 결함
  • Java EE로 작성된 애플리케이션은 더 안정적이고 안전하며 확장 가능한 것으로 간주됩니다.
  • Java EE는 업계에서 승인된 API 표준입니다.
  • Spring 과 마찬가지로 주로 주석과 CDI(컨텍스트 및 종속성 주입)를 기반으로 합니다.
  • EJB 컨테이너 및 POJO 기반 구현
  • 트랜잭션 수가 많은 복잡한 애플리케이션은 JEE에서 매우 잘 처리됩니다.
  • 확장 가능한 모놀리식 애플리케이션에 성공적으로 사용됨
  • Java EE에는 특정 스타일과 구문을 포함하는 자체 OOP 언어가 있습니다.
  • 초보자가 이해하기 어려운 매우 복잡한 애플리케이션 개발 환경(때로는 노년층도 마찬가지)
  • 설계, 배포, 애플리케이션 개발을 포함한 프로젝트의 최종 비용은 엄청날 수 있습니다.
Oracle이 라이선스를 부여한 Java EE는 대중 시장 애플리케이션 구축을 위해 광범위하게 적용 가능하고 배포 가능한 환경이 필요한 조직 및 회사를 위해 설계되었습니다. Spring과 마찬가지로 Java EE에는 데이터베이스 액세스(JDBC, JPA), 원격 엔지니어링 호출(RMI), 정보(JMS), 웹 관리, XML 처리를 위한 추가 라이브러리가 포함되어 있으며 엔터프라이즈 JavaBeans, 포틀릿, 서블릿, Java Server Pages에 대한 표준 API의 특성을 지정합니다. Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE와의 비교 - 5Java EE의 기본 목표는 다양한 API를 사용하여 현재 애플리케이션을 구축하는 것과 관련하여 개발자가 직면하는 주요 문제를 해결하는 것입니다 . 동시에 Java EE 개발은 복잡성 수준이 높기 때문에 초보자뿐만 아니라 기준이 엄청나게 높아집니다. 그리고 숙련된 전문가가 이미 작성된 기능을 이해하기 어려울 수 있으므로 Java EE 개발에는 시간이 더 오래 걸리고 그에 따라 비용도 더 많이 듭니다. Java EE에 대해 간단히 말해서 다음과 같이 말할 수 있습니다. 복잡하지만 유연합니다. 자, 이제 Spring 에 대해 조금 이야기해보자 . Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 6과의 비교
장점 결함
  • 개체 상호 작용을 효과적으로 구성할 수 있습니다.
  • Java EE보다 더 간단함
  • IOCAOP를 기반으로 구현되어 애플리케이션의 느슨한 결합을 보장합니다.
  • XML, Groovy 또는 주석 구성을 기반으로 작동합니다.
  • 일반 Java 개체(POJO)를 사용할 수 있으므로 개발자는 애플리케이션 서버와 같은 엔터프라이즈 컨테이너가 필요하지 않습니다.
  • Java 개발자에게 높은 수준의 모듈성을 제공합니다.
  • Java EE 라이브러리 구현을 제공하지만 자체 방식으로 사용이 훨씬 쉬워집니다.
  • 오픈소스 라이선스
  • Spring Boot는 초기 애플리케이션 설정을 크게 단순화합니다.
  • Spring 애플리케이션 코드는 일반적으로 테스트하기 쉽습니다.
  • Spring은 명확한 초점이 부족하여 상대적으로 개발이 어렵습니다.
  • 새로운 Java 개발자의 경우 Spring 프레임워크를 배우는 것이 어려울 수 있습니다(그러나 Java EE보다는 여전히 쉽습니다).
  • Spring은 Java EE보다 느립니다.
Spring은 대기업을 위한 오픈 소스 Java 프레임워크입니다. Spring 프레임워크는 J2EE 아이디어를 가능한 가장 간단하게 구현하고 POJO 기반 프로그래밍 모델의 기능을 확장하여 뛰어난 프로그래밍 방식을 활용하는 것을 목표로 합니다. 저것들. Java EE는 공식적인 표준에 가깝지만 Spring은 이 표준을 자체 방식으로 구현하는 프레임워크에 가깝습니다.

비교 결과

내가 이해한 바에 따르면 Java EE와 Spring은 JDBC 및 Hibernate와 비슷합니다. 여기서 JDBC는 더 빠른 기술이지만 동시에 불필요한 코드가 많이 있습니다. 그리고 Hibernate는 이미 JDBC를 사용하고 있지만 동시에 개발을 단순화하고 크게 줄였습니다(일부 제한 사항은 부과하지만). 그들 중 어느 것이 더 나은지 확실히 말하는 것은 불가능합니다. 이것은 또한 ArrayList 또는 LinkedList 중 어느 것이 더 나은지에 대한 질문을 다소 연상시킵니다. 결국 상황에 따라 대답은 동일합니다. 각각에는 고유한 강점과 약점이 있으므로 신중하게 선택하고 상황을 평가하고 현재 가장 큰 이점을 가져올 것이 무엇인지 이해해야 합니다. Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 7과의 비교

3. 스프링 구성요소

이제 Spring을 구성하는 프레임워크에 대해 조금 이야기해 보겠습니다.

스프링 프레임워크

모든 배포 플랫폼에서 최신 Java 기반 엔터프라이즈 애플리케이션을 위한 포괄적인 프로그래밍 및 구성 모델을 제공하는 핵심 모듈입니다. 여기에는 많은 핵심(핵심) Spring 기술이 포함되어 있습니다 .
  • 핵심 - IoC(제어 반전) 및 DI(종속성 주입) 개념을 구현하는 기본 기능입니다 .
  • AOP - 관점 지향 프로그래밍 - 엔드투엔드 논리 구현을 목표로 하는 관점 지향 프로그래밍입니다.
  • MVCWebFlux - 웹 상호작용을 위한 프레임워크.
  • JDBC , ORM - 데이터베이스와 상호작용하는 기술.
  • 테스트 - Spring 컨테이너 데이터의 투명하고 복잡하지 않은 테스트를 위한 기능입니다.
  • SpEL - 스프링 표현 언어(Spring Expression Language) - 스프링 표현 언어.
  • 등.

스프링 부트

초기 애플리케이션 설정을 최소화하고 Spring 애플리케이션 요소를 자동 구성하여 Spring 기반 애플리케이션 생성을 단순화합니다. 5분 안에 Spring Boot를 시작하는 예

스프링 데이터

데이터 액세스 기술, 관계형 및 비관계형 데이터베이스의 사용을 대폭 단순화합니다(반복 코드를 제거하고 데이터와의 상호 작용을 단순화). 이 기사에는 Spring 데이터 연결에 대한 좋은 튜토리얼이 포함되어 있습니다.

스프링 클라우드

이는 마이크로서비스 아키텍처에 사용되어 마이크로서비스 간의 상호 작용을 단순화하고 AWS , Azure 등과 같은 클라우드 플랫폼에서 애플리케이션 배포를 자동화합니다. 여기에서 Spring Cloud에 대한 자세한 튜토리얼을 참조하세요 . 하지만 이 주제는 쉬운 주제가 아니며 고위 수준에 가까운 전문가를 대상으로 한다는 점을 경고하겠습니다.

스프링 시큐리티

애플리케이션에 대한 강력하고 사용자 정의 가능한 인증(인증) 및 액세스 제어(권한 부여) 도구를 제공합니다. 이 게시물 에서는 Spring Security를 ​​애플리케이션에 연결하는 간단한 예를 찾을 수 있습니다 . Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 8과의 비교

스프링 GraphQL

이 모듈은 GraphQL Java를 기반으로 구축된 Spring 애플리케이션에 대한 지원을 제공합니다. GraphQL 은 클라이언트가 필요한 제한된 데이터 세트를 쿼리할 수 있게 하고, 결과적으로 제한된 수의 쿼리로 데이터가 수집될 수 있도록 하는 API용 쿼리 언어입니다. 이미 JPA에 익숙하다면 유사한(또는 동일한) 개념을 가진 EntityGraph를 접했을 수도 있습니다. GraphQL에 대한 자세한 내용은 여기에서 확인할 수 있습니다 .

봄 세션

Spring 프레임워크의 이 부분은 사용자 세션 정보를 관리하기 위한 API와 구현을 제공합니다(사용자 세션 데이터는 Redis , MongoDb , HazelCast 등과 같은 영구 저장소에 저장됩니다 ). Spring Session을 사용하는 예는 여기에서 찾을 수 있습니다 .

스프링 통합

이 모듈은 Spring 기반 애플리케이션의 메시징을 단순화하고 선언적 어댑터를 통해 외부 시스템과의 통합을 지원하도록 설계되었습니다. 이러한 어댑터는 원격, 메시징 및 스케줄링에 대한 Spring의 지원보다 더 높은 수준의 추상화를 제공합니다. 자세한 기사 .

스프링 REST

REST API 개발을 단순화하는 풍부한 도구 세트(요청 라우팅 도구, JSON/XML을 필요한 유형의 개체로 변환하는 도구 등)를 제공합니다. Spring의 RESTful 서비스 예는 이 자료 에서 찾을 수 있습니다 .

스프링 웹 흐름

Spring Web Flow는 Spring MVC를 기반으로 하며 웹 애플리케이션의 "흐름"을 구현할 수 있게 해줍니다. 이러한 흐름은 일부 비즈니스 작업 완료를 통해 사용자를 안내하는 일련의 단계를 캡슐화합니다. 이는 여러 HTTP 요청에 걸쳐 있고 상태를 유지하며 트랜잭션 데이터로 작업하고 재사용이 가능하며 본질적으로 동적이며 내구성이 있습니다. Spring Web Flow를 연결하는 예는 이 가이드에서 영어로 볼 수 있습니다 .

스프링 웹서비스

이 모듈은 XML 페이로드를 조작하는 여러 방법 중 하나를 사용하여 유연한 웹 서비스를 생성할 수 있도록 함으로써 계약 기반 SOAP 서비스를 보다 쉽게 ​​개발할 수 있도록 설계되었습니다. SOAP - 단순 개체 액세스 프로토콜 - 단순 개체 액세스 프로토콜입니다.

봄 하테오아스

이 모듈은 Spring, 특히 Spring MVC로 작업할 때 HATEOAS 원칙을 따르는 REST 컨트롤러를 더 쉽게 생성할 수 있도록 몇 가지 API를 제공합니다. HATEOAS - 애플리케이션 상태의 엔진으로서의 하이퍼미디어 - 애플리케이션 상태의 엔진으로서의 하이퍼미디어. 여기에서 이 Spring 라이브러리 의 사용을 볼 수 있습니다 .

스프링 배치

이 모듈은 기업 시스템의 일상적인 운영에 필수적인 일괄 데이터 처리(데이터가 큰 조각으로 처리되는 경우)를 위한 기능을 제공합니다. Spring Batch는 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 건너뛰기, 리소스 관리 등 대용량 레코드를 처리하는 데 필요한 재사용 가능한 기능을 제공합니다. 이 링크에서 Spring Batch에 대한 흥미로운 리뷰를 찾을 수 있습니다 .

봄 AMQP

이 모듈은 AMQP 기반 메시징 솔루션 개발에 핵심 Spring 개념을 적용합니다. 이는 메시지 전송 및 수신을 위한 상위 수준 추상화로 템플릿을 제공합니다. 또한 리스너 컨테이너를 사용하여 메시지 기반 POJO에 대한 지원도 제공합니다. AMQP - 고급 메시지 큐 프로토콜 - 고급 메시지 큐 프로토콜. 프로젝트에는 두 부분이 포함되어 있습니다. spring-amqp는 기본 추상화이고 spring-rabbit은 RabbitMQ 구현입니다 . Spring을 사용한 RabbitMQ 연결의 예 Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 9와의 비교

Apache Kafka를 위한 봄

이 프로젝트는 Kafka 기반 메시징 솔루션 개발에 핵심 Spring 개념을 적용합니다 . 템플릿은 메시지 전송을 위한 상위 수준 추상화로 제공됩니다. 또한 필요한 주석과 리스너 컨테이너가 포함된 메시지 기반 POJO에 대한 지원도 제공합니다. 여기에는 Spring AMQP와 분명한 유사점이 있지만 이 모듈은 Kafka에 맞게 특별히 조정되었습니다. Spring Kafka를 연결하는 예는 여기에서 볼 수 있습니다 .

스프링 크레드허브

Cloud Foundry 플랫폼 에서 실행되는 CredHub 서버에서 자격 증명을 저장, 검색 및 삭제하기 위한 클라이언트 측 지원을 제공합니다 . CredHub - 다양한 유형의 자격 증명을 안전하게 저장, 생성, 검색 및 삭제하기 위한 API를 제공합니다. Spring CredHub는 CredHub API에 대한 Java 바인딩을 제공하므로 Spring 애플리케이션을 CredHub와 쉽게 통합할 수 있습니다.

봄 FLO

파이프라인을 위한 간단한 HTML5 내장형 비주얼 디자이너와 스트리밍 및 배치 데이터 모니터링을 위한 간단한 그래프를 제공하는 JavaScript 라이브러리입니다. 이 기술의 데모는 링크의 비디오에 있습니다 .

스프링 LDAP

이 라이브러리는 LDAP 작업을 단순화하고 Spring JdbcTemplate을 기반으로 합니다. 프레임워크는 컨텍스트 검색 및 닫기, 결과 보기, 값 인코딩/디코딩, 필터 등을 허용합니다(Spring Jdbc와 동일한 원칙을 기반으로 구축됨). Spring LDAP의 구현 예는 여기에서 찾을 수 있습니다 .

스프링루

이 모듈은 Spring 기반 애플리케이션을 생성하고 관리할 수 있는 RAD 도구를 제공합니다. 그 목표는 Java 개발자의 생산성을 향상시키는 것입니다. 애플리케이션의 비즈니스 로직을 작성할 수는 없지만 구성 및 인프라 관련 작업은 처리할 수 있습니다.

스프링 쉘

라이브러리를 사용하면 Spring Shell jar를 사용하고 사용자 고유의 명령(Spring Bean에서 메소드로 제공됨)을 추가하여 모든 기능을 갖춘 쉘(명령줄이라고도 함) 애플리케이션을 쉽게 생성할 수 있습니다. 예를 들어, 프로젝트의 REST API와 상호 작용하거나 로컬 파일 콘텐츠를 작업하는 데 명령줄 애플리케이션을 만드는 것이 유용할 수 있습니다. 여기여기에서 자세한 내용을 읽어보세요 .

스프링 상태머신

이 모듈을 통해 애플리케이션 개발자는 Spring 애플리케이션에서 상태 머신 개념을 사용할 수 있습니다 . 이 기능을 사용하는 자세한 예는 여기여기에서 확인할 수 있습니다 .

스프링 볼트

Spring Vault는 비밀에 대한 액세스, 저장 및 취소를 위한 친숙한 Spring 추상화 및 클라이언트측 지원을 제공합니다. Vault 와 상호 작용하기 위한 낮은 수준 및 높은 수준의 추상화를 모두 제공하므로 사용자가 인프라 문제에 대해 걱정할 필요가 없습니다. Spring Vault 구현 예 Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 10과의 비교“이거 다 배워야 하나요?” -놀랍게도 묻습니다. 겁먹지 마세요! 이건 틀렸어! 더 정확하게는 그렇지 않습니다. 이것은 Spring에서 사용 가능한 기술의 전체 목록이었습니다. 초보자가 알아야 할 기술 목록은 훨씬 적습니다.
  • 스프링 코어
  • 스프링 부트
  • 스프링 웹(MVC 및 REST)
  • 스프링 데이터(Spring ORM, Spring JDBC, Spring JPA)
  • 스프링 테스트
프로젝트에서 흔히 볼 수 있는 다른 기술도 있지만 복잡성으로 인해 일반적으로 초심자보다는 경험이 많은 개발자가 처리합니다. 그러나 초보자가 최소한 다음에 대한 일반적인 이해를 갖는 것도 유용합니다.
  • 스프링 시큐리티
  • 스프링 AOP
  • 스프링 클라우드
다른 기술은 훨씬 덜 자주 사용되므로 특정 프로젝트를 수행하기 위해 진지하게 연구하면 됩니다. 그런데 Java 개발자가 알아야 할 내용에 대한 전체 체크리스트는 내 다른 기사에서 찾을 수 있습니다. 오늘은 여기까지입니다. 곧 만나요! Spring에 대해 알아야 할 사항: 역사, 주요 모듈, Java EE - 11과의 비교
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION