Spring이란?

이민형·2022년 6월 15일
26

Spring

목록 보기
1/2
post-thumbnail

Spring

Spring Framework는 Java 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이며
약 20년 동안 세월 동안 자바 엔터프라이즈 애플리케이션 개발의 최고의 자리를 차지 중이다.

Spring Framework의 구성은 20여가지로 구성 돼있다.
Spring Framework 종류 보러 가기

이러한 모듈들은 스프링의 핵심 기능(DI, AOP, ETC)을 제공해 주며, 필요한 모듈만 선택하여 사용 가능하다.

현재 단일 아키텍처(모놀리스)에서 마이크로 서비스 아키텍처로 변환 중이고
여기에 맞춰서 스프링도 진화하고 있는 상태이다.
여러 가지 모듈이 있지만 그중에서 단연
Spring Boot, Spring Cloud, Spring Data, Spring Batch, Spring Security에 중점을 둔다.

Spring은 "테스트의 용이성", "느슨한 결합" 에 중점을 두고 개발한다.
2000년대 초의 자바 EE 애플리케이션은 작성/테스트가 매우 어려웠으며, 한번 테스트하기가 번거로웠다.
이로 인하여, 느슨한 결합이 된 애플리케이션 개발이 힘든 상태였으며, 특히 데이터베이스와 같이 외부에 의존성을 두는 경우 단위 테스트가 불가능했다.
하지만 Spring이 나옴으로써 이러한 불편한 점들이 사라졌다.


Spring의 가장 큰 특징

Spring은 자바 언어 기반의 프레임워크이다.
자바의 가장 큰 특징은 객체 지향 언어라는 점인데 이 스프링은 객체지향 언어가 가진 가장 강력한 특징을 잘 살려내는 프레임워크이다.
Spring은 다형성을 극대화해서 사용할 수 있게 도와주고 IoC/DI 로 다형성을 활용해 역활과 구현을 편리하게 다룰 수 있도록 도와준다.
다시 말해 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다.


POJO (Plain Old Java Object)

POJO란 순수한 자바 오브젝트를 뜻한다.
역사를 거슬러 올라가 보면, 예전엔 EJB가 인기를 끌고, 많이 사용하던 시절에는 단순한 자바 오브젝트를 사용해서 개발하는 것이 아닌, EJB에 종속적인 부분으로 개발을 진행했다.
그로 인하여, Module의 교체, 시스템 업그레이드 시 종속성으로 인하여 불편함 발생했다.

POJO 장점

  1. 특정 규약에 종속되지 않는다.
    특정 Library, Module에서 정의된 클래스를 상속받아서 구현하지 않아도 된다.
    POJO가 되기 위해서는 외부의 의존성을 두지 않고 순수한 JAVA로 구성이 가능해야 한다.

  2. 특정 환경에 종속되지 않는다.
    만일 특정 비즈니스 로직을 처리 하는 부분에 외부 종속적인 http request, session 등이 있으면 POJO를 위배한 것으로 간주한다.
    또 많이 사용하고는 있지만 @Annotation 기반으로 설정하는 부분도 엄연히 POJO라고 볼 수 없다.

POJO Framework

POJO Framework의 대표적인 두 종류는 SpringHibernate가 있다.
하나의 서비스를 개발하기 위해서는, 시스템의 복잡함, 비즈니스 로직의 복잡함 등 다양한 어려움을 맞이하게 된다.

위의 두 프레임 워크는 객체지향적인 설계를 하고 있으며, 또한 POJO를 지향하고 있다.

그러므로 개발자가 서비스 로직집중하고 이를 POJO로 쉽게 개발할 수 있도록 지원하고 있다.


DI (Dependency Injection)

DI란 Spring이 다른 프레임워크와 차별화되어 제공하는 의존관계 주입 기능으로 객체를 직접 생성하는 것이 아닌, 외부에서 생성한 후 주입 시키는 방식이다.

DI의 장점

  1. 의존성으로부터 격리시켜 코드 테스트에 용이하다.
  2. DI를 통하여, 불가능한 상황을 Mock와 같은 기술을 통하여, 안정적으로 테스트가 가능하다.
  3. 코드를 확장하거나 변경할 때 영향을 최소화한다. (추상화)
  4. 순환 참조를 막을 수 있다.

IoC (Inversion Of Control)

IoC제어의역전 이라는 의미로, 메서드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 말한다.

스프링에서는 class 또는 service 간의 데이터를 주고받는 일반적인 Java 객체를 new로 생성하여 개발자가 관리하는 것이 아닌 Spring Container에 모두 맡긴다.

Container라는 공간에 생성하고자 하는 객체가 이미 만들어져서 들어가 있고, Singleton의 형태로 관리가 된다.

즉, 개발자에서 프레임워크로의 제어의 객체 관리의 권한이 넘어갔으므로 제어의 역전이라고 부르는 것이다.


AOP (Aspect Oriented Programming)

AOP는 관점 지향 프로그래밍으로, 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.

AOP를 사용하여 로깅, 트랜잭션 관리, 시큐리티에서의 적용 등 AspectJ와 같이 완벽하게 구현된 AOP와 통합하여 사용 가능하다.

스프링 애플리케이션은 대부분 특별한 경우를 제외하고는 MVC 웹 애플리케이션에서는
Web Layer, Business Layer, Data Layer로 정의한다.

  • Web Layer
    • REST API를 제공하며, Client 중심의 로직 적용
  • Business Layer
    • 내부 정책에 따른 logic을 개발하며, 주로 해당 부분을 개발한다.
  • Data Layer
    • 데이터베이스 및 외부와의 연동을 처리한다.

AOP 주요 Annotation

Annotation의미
@Aspect자바에서 널리 사용하는 AOP 프레임워크에 포함되며, AOP를 정의하는 Class에 할당
@Pointcut기능을 어디에 적용시킬지, 메소드나 Annotation 등 AOP를 적용 시킬 지점을 설정
@Before메소드 실행하기 이전
@After메소드가 성공적으로 실행 후, 예외가 발생 되더라도 실행
@AfterReturning메소드 호출 성공 실행 시(Not Throws)
@AfterThrowing메소드 호출 실패 예외 발생(Throws)
@AroundBefore / after 모두 제어

PSA (Portable Service Abstraction)

PSA는 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조이다.
다시 말해 하나의 추상화로 여러 서비스를 묶어둔 것을 Spring에서 PSA라고 한다.
Spring에서는 Spring Web MVC, Spring Transaction, Spring Cache 등 다양한 종류의 PSA를 제공한다.


이렇게 해서 Spring의 가장 큰 특징 5가지를 겉핥기로 알아보았다.
이제 추후에 각각 특징에 대해서 더 자세하게 파헤쳐 보도록 할 것이다.

6개의 댓글

comment-user-thumbnail
2022년 6월 15일

아 응애에요

1개의 답글
comment-user-thumbnail
2022년 6월 22일

잘 읽었습니다~

1개의 답글
comment-user-thumbnail
2022년 6월 23일

우아 짱이에요

1개의 답글