[Spring] Spring이란?

얄루얄루·2022년 12월 3일
0

Spring

목록 보기
1/14

Spring은 Framework이다

프레임워크라는 건,

Framework는 어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다.

라고 나와 있기는 한데, 사람을 이해시킬 생각이 있는 설명인지는 의문이다.

개인적으로 너무 추상적인 설명이라고 본다.

보다 구체적으로 말하자면, 프레임워크는 각종 라이브러리와 모듈들의 집합체다.

더 간단하게 말하자면, 이미 설계되어 있는 특정한 용도의 프로그램이다.

몇 번을 들어봤을 법 한 Django (Python), Flask (Python), Express.js (JavaScript), Ruby on Rails (Ruby), Laravel (PHP), .NET Core (C#), Spring (Java) 등이 모두 프레임워크이다.

프레임워크를 이용한다는 것은 이미 틀이 완성된 해당 프로그램 안에 내 코드를 얹는 것이다.

그러면 프레임워크가 그때그때 필요한 부분을 가져다 쓴다. 바로 이렇게.

아무튼 그럼 이딴 걸 왜 쓰냐?

위와 같은 장점을 취하기 위해 쓴다. 시간은 돈이라구 친구

Spring은 봄이다

정적 웹사이트에서 동적 웹사이트로 웹의 구조가 바뀌어 가는 시점에 많은 언어들을 서버용 언어로 사용하려는 시도가 있어왔다.

당연히 Java를 이용하려는 시도도 있었다.

서버 개발에 필요한 기능들을 모아서 Java EE라는 표준을 만들어서 썼는데,

Java EE의 핵심 기술이 EJB (Enterprise Java Beans) 였다.

장점으로는, 데이터 처리의 트랜잭션이 안정적으로 수행된다는 것이 있었다.

그런데 단점이 좀 많았다.

일단 굉장히 느리고, EJB 전용 코드가 너무 많았으며, 테스트가 아주 어렵거나 불가능했고, 개발에 이용한 특정 Java EE 서버 제품에 지나치게 종속적이었다. 게다가 EJB 하나를 배포하려면 XML을 서너 개 쯤 작성해야 했다는 듯.

그러다가 나온 게 Spring인데, Java의 겨울이었던 EJB의 시대가 끝나고 드디어 봄이 왔다는 뜻으로 Spring이라고 이름지어졌다, 라는 말이 있다.

진짜일 수도 있고, 아닐 수도 있고, 어차피 이름 따윈 별로 중요하지 않다.

중요한 건, 그런 표현이 나올 정도로 많은 장점을 끼고 나온 프레임워크라는 것이다.

Spring의 강점

그럼 무슨 장점들이 있나 알아보자.

우선 한 마디로 정의하자면, 애초에 Java EE의 대안으로 나온 것이기에 서버 개발에 필요한 도구는 거의 다 갖추고 있다고 봐도 무방하다.

사진에 보면 화살표가 3개 있는데, 이 화살표의 좌우로 해서 프로젝트를 4단계로 구분한다.

1) Web layer, 2) Common layer, 3) Service layer, 4) Data layer

그리고 아래쪽의 3 프로젝트가 5번째 단계를 구성하는데, 5) Foundation layer로 칭하며 1~4 여러 단계에 걸쳐 존재할 수 있다.

Web layer

이 단계에 포함되어 있는 도구는 다음과 같다.

  • Spring HATEOAS
    • HATEOAS principle를 따르는 REST representation을 만드는데 도움이 된다.
    • 이는 REST 서비스가 다른 발견 가능한 서비스 혹은 representation을 메타데이터로 반환 할 수 있게 해 준다.
  • Spring Mobile
    • 모바일 친화적인 페이지를 개발하는데 도움이 된다.
  • Spring Web Flow
    • 데이터를 여러 스크린으로 나눌 수 있게 해 준다.
  • Spring Session
    • 웹 세션을 다룰 수 있게 해준다.
    • Spring Data Redis와 함께 사용하면 어떤 세션 데이터라도 Redis datastore에 저장할 수 있게 된다.
    • 이렇게 저장된 데이터는 짧은 기간 동안 유지되고, 빠르고, 임시적이다.
    • 이 기능을 사용하기 위해서는 Redis Connection Factory를 셋업해야 한다.
  • Spring Web Services
    • 계약 우선 SOAP 기반 웹 서비스를 구축하는 데 도움이 된다.
    • 또한 Spring과 함께 SOAP 기반 웹 서비스를 사용하는 데 도움이 된다.
  • Spring Social
    • facebook, LinkedIn, twitter와 같은 소셜 계정으로 로그인을 할 수 있게 해 준다.
  • Spring for Android
    • 기본 Android 애플리케이션을 빌드하는 데 도움이 된다.
  • Spring Security
    • 웹 애플리케이션을 보다 보안적이게 해 준다.
    • 인증에 관한 라이브러리, 로그인과 회원 가입, 적정 유저의 접근 권한 등을 관리하며, OAuth도 지원한다.

그림에는 다른 도구들이 Spring Security를 둘러싸고 있어 마치 해당 도구에 대해 의존성이 있는 것 같아 보이지만 실제로는 그렇지 않다.

그저, 위의 도구들이 모두 Spring Security를 사용할 수 있음을 의미한다.

Common layer

Spring 프레임워크에는 20+개의 모듈들이 있고, 이 모듈들은 아래 6개의 카테고리에 들어간다.

  • Spring Web
  • Spring Test
  • Spring Data Access/Integration
  • Spring AOP and Instrumentation
  • Spring Messaging
  • Spring Core Container

모듈들을 하나하나 분류하는 건 생략한다.

Service layer

  • Spring Integration
    • Enterprise Integration Pattern 을 지원하는 확장 기능을 제공한다
    • 다시 말해, 스프링 기반 어플리케이션 내에 가벼운 메시징 기반 서비스를 제공하고 선언적 어답터를 사용해 외부 시스템과의 통합을 쉽게 해준다.
    • 이는 Messages, Message Channel, EndPoint 라는 3가지 핵심 컴포넌트를 추가함으로써 이루어진다.
  • Spring Cloud
    • MSA 구성을 지원한다. 즉, 마이크로서비스의 개발, 배포, 운영에 필요한 구조를 쉽게 구성할 수 있게 해준다.
    • 다시 말해, 분산 시스템에서 여러 표준 패턴들을 빠르게 구축할 수 있는 도구를 제공한다.
    • 표준 패턴이란, 구성 관리, 서비스 검색, 회로 차단기, 지능형 라우팅, 마이크로 프록시, 제어 버스, 일회성 토큰, 전역 잠금, 리더십 선거, 분산 세션, 클러스터 상태 등을 말한다.
    • 핵심 컴포넌트로는 Spring Cloud Netfix의 Zull, Eureka, hystrix, ribbon EOS, Spring Config가 있다.

Data layer

  • Spring AMQP (Advanced Message Queuing Protocol)
    • 메시지 송수신을 추상화한다.
    • 데이터와 상호 작용할 수 있는 낮은 수준의 템플릿을 제공한다.
    • 연결 팩토리를 제공한다.
    • RabbitMQ에서 미리 빌드된 구현을 제공한다.
    • 리스너 컨테이너를 제공한다.
  • Spring LDAP (Lightweight Directory Access Protocol)
    • Java의 LDAP 프로그래밍을 단순화 하는 라이브러리를 제공한다.
    • LdapTemplate 클래스는 기존의 LDAP 프로그래밍을 작업을 캡슐화한다.
    • LDAP라는 건, 네트워크상에서 조직이나 개인, 파일, 디바이스 등을 찾아볼 수 있게 해주는 소프트웨어 프로토콜이다.
    • 보안&인증에 주로 이용되며, Spring LDAP를 통해 Spring Security의 인증 방식을 변경할 수 있다.
  • Spring Data
    • 여러 다른 데이터베이스에 대한 CRUD 작업을 수행하는 공통 API를 제공한다.
    • 이는 데이터베이스 변경 시 코드의 변경을 최소화 하는데 도움을 준다.
    • 만약 Hibernate를 사용한다면, 그 아래에서 Spring Data JPA를 사용해 보일러 플레이트 코드를 상당량 줄일 수 있다.
  • Spring Batch
    • 벌크 처리 작업을 수행할 수 있다.
    • 벌크 처리 작업은 백그라운드에서 실행해야 하는 장기 실행 쿼리이다. (e.g. 데이터베이스 업데이트)

프로그래밍적인 강점

단순히 이미 준비되어 있는 도구들을 많이 제공한다는 점에서도 Spring은 채택할만 하다.

그러나 그것이 전부는 아니다.

Spring의 구조는 DI, IoC 등을 지킨, 흔히 말하는 클린 코드의 구조와 유사하다.

물론 개떡같이 코딩하면 이런 장점들도 없어지기 마련이지만...

이미 글이 많이 길어졌으니 이에 대해선 다음 글에서 기본적인 어노테이션들의 소개와 함께 알아보자.

References

profile
시간아 늘어라 하루 48시간으로!

0개의 댓글