Post

spring framework 소개

스프링을 알아보기 전에 간략히 스프링의 역사와 핵심기술들을 살펴보자.

스프링의 탄생

과거 자바 커뮤니티에서는 EJB(Enterprise JavaBeans)라는 기술이 매우 인기 있었다.

EJB는 처음에는 개발의 복잡성을 줄이는 혁신적인 솔루션으로 등장했으나, 점차 객체지향의 원칙을 무시하고 특수한 기술 스택에 더 많이 의존하게 되었다.

이로 인해 EJB를 사용하는 비즈니스 코드는 점점 더 기술에 종속되어 유지보수가 어려운 코드를 작성하게 만들었다.

이러한 문제점을 해결하기 위해 스프링 프레임워크가 탄생했다. 스프링은 EJB와 달리, 객체지향의 본질에 충실하며, 사용자의 핵심 비즈니스 로직을 프레임워크의 복잡성으로부터 분리하여 확장성 있고 유지보수가 용이한 코드를 작성할 수 있도록 설계되었다.

이로 인해 개발자들은 객체지향의 장점을 효과적으로 활용할 수 있게 되었고 스프링은 지금까지도 매우 인기 있는 프레임워크로 자리잡게 되었다.

스프링 핵심과 이를 위한 중요 기술들

스프링 중요 기술 중 IoC/DI, AOP, PSA들은 가벼운 POJO만으로도 충분히 개발 가능하게 도와준다.

핵심 기술들 모두 좋은 객체지향 개발을 할 수 있도록 도와주는 것을 목표로 하고 있다. 사실 이런 핵심 기술은 스프링만의 독점적인 것이 아니라 객체지향 설계를 하다 보면 자연스럽게 사용할 수 밖에 없는 것들이다.

핵심기술들 모두 객체지향을 위한 것이니 얼마나 객체지향에 진심인지 느껴진다. 이제 각 핵심요소에 대해서 간단히 살펴보자.

POJO (Plain Old Java Object)

POJO는 자바 객체 그 자체를 뜻한다. 특정 환경에 종속되지 않는 순수 객체일 뿐만 아니라 객체지향적으로 만들어져야 한다.

스프링을 이용하면 핵심 로직을 POJO 기반으로 객체지향으로 설계하여 구현할 수 있을 뿐 아니라 POJO 기반으로 만들어진 스프링 생태계의 각종 서비스에 자신의 코드를 자연스럽게 적용할 수 있다. 스프링과 생태계의 기술 모두 객체지향으로 설계, 구현되어 있기 때문이다.

이런 식으로 스프링은 개발자들이 내부 복잡한 기술 부분보다는 핵심 비즈니스 로직과 객체지향적인 설계에 더 집중할 수 있도록 도와준다.

IoC (Inversion of Control)

IoC는 스프링의 핵심 기술 중 가장 기본이자 핵심이다. IoC는 DI (Dependency Injection)라고도 알려져 있다.

자신이 사용할 객체를 직접 생성하지 않으며 인터페이스를 두고 느슨하게 관계를 맺고, 실제 사용할 객체는 DI를 이용해 외부에서 지정하도록 한다. 확장에는 열려있으며 변경엔 닫힌 객체지향 원칙을 지킬 수 있다.

AOP(Aspect Oriented Programming)

관점지향프로그래밍으로 아예 새로운 패러다임이 아닌 객체지향을 보완하기 위해 탄생한 보조개념의 프로그래밍 방식이다.

객체지향을 이용해 관심사가 다른 코드를 모듈로 분리하는 것은 가능하지만, 부가기능은 모듈로 분리하기가 힘들다.

왜냐하면 말 그대로 부가기능이기 때문에 핵심기능에 의존하는 건 어쩔 수 없기 때문이다. 이를 모듈화 하기 위해 탄생한 것이 AOP이다.

덕분에 우리의 애플리케이션 핵심 코드는 여전히 객체지향적으로 설계할 수 있다.

PSA (Portable Service Abstraction)

환경에 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 기술이다. 예를 들어, JPA는 ORM기술을 추상화한 인터페이스이다.

특정 기술을 의존하는 게 아닌 서비스를 추상화했고 그 인터페이스에 의존했기 때문에 기존에 Hibernate를 사용하다가 EclipseLink로 기술을 변경하더라도 기존 코드는 잘 동작한다.

더 알아보기

  • 애플리케이션의 전반적인 영역을 지원하는 종합 프레임워크이다.
  • 오픈소스라서 누구든지 소스를 볼 수 있으며 의견을 낼 수 있지만, 실제 스프링 개발 및 유지보수는 전문기업 Pivotal이 담당한다. 오픈소스의 다양한 의견으로 커뮤니티의 힘과 전문기업의 담당으로 프로젝트 안정성을 더했다. (Pivotal이 Vmware에 인수되면서 Vmware tanzu가 되었다고 한다. )
  • 오랫동안 많이 사용되고 사랑받아 성숙도가 매우 높다.
  • 코어 기술 이외에도 개발하다보면 꼭 필요한 기술들이 이미 잘 되어 있어 감사히 사용할 수 있다
This post is licensed under CC BY 4.0 by the author.