토비의 스프링 정리

토비의 스프링 - 8.1 스프링의 정의

ksb-dev 2022. 10. 26. 22:38

8.1.1 정의

  • 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

8.1.2 애플리케이션 프레임워크

  • 일반적인 라이브러리나 프레임워크는 특정 업문 분야나 한 가지 기술에 특화된 목표로 만들어짐
  • 예를들어, 웹 계층을 MVC 구조로 손쉽게 만들 수 있게 한다거나, 애플리케이션 로그 기능을 제공 하는 등의 한 가지 기술을 중점적으로 특화됨
  • 하지만, 스프링은 애플리케이션 프레임워크라는 특징을 갖고 있음
  • 애플리케이션 프레임워크는 특정 계층이나 기술에 국한되지 않고, 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크임
  • 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크임
  • 스프링은 전 계층에 등장하는 기술과 애플리케이션 전 영역에 대한 효과적인 설계과 개발 기법을 다루고 있음
  • 즉, 스프링은 애플리케이션 전 영역을 지원한는 종합적인 애플리케이션 프레임워크임
  • 단지, 스프링이 여러 계층의 다양한 기술을 그저 한데 모아뒀기 때문에 애플리케이션 프레임워크라 불리는 것은 아님
  • 애플리케이션 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에 애플리케이션을 빠르고 효과적으로 개발할 수 있음
  • 스프링을 MVC 또는 JDBC/ORM 지원 프레임워크라 생각하는 것은 스프링이 다루는 일부 역역만 본 것임
  • 또, 스프링을 IoC/DI 프레임워크나 AOP 툴이라 보는 것은 스프링이 제공하는 핵심 기술에만 주목했기 때문임
  • 스프링의 일차적인 존재 목적은 핵심 기술에 담긴 프로그래밍 모델을 일관되게 적용해서 엔터프라이즈 애플리케이션 전 계층과 전 영역에 전략과 기능을 제공해 줌으로써 애플리케이션을 편리하게 개발하게 해주는 애플리케이션 프레임워크로 사용된다는 것임

8.1.3 경량급(LightWeight)

  • 스프링은 매우 복잡하고 방대한 프레임워크임
  • 단지, 스프링이 경량급이라 하는 것은 불필요하게 무겁지않다는 의미임
  • 경량급은, 스프링이 처음 등장하던 시절의 자바 주류 기술이었던 EJB 같은 과도한 엔지니어링이 적용된 기술과 스프링을 대비시켜 설명하려고 사용된 표현임
  • 당시 EJB는 기술에 대한 과도한 욕심으로 개발, 운용, 빌드, 테스트 모두 매우 무겁고 복잡하게 만들었음
  • 또한, EJB가 동작 하려면 고가의 느리고 무거운 WAS가 필요했음
  • 그에 반해 스프링은 가장 단순한 서버 환경인 톰캣(Tomcat)이나 제티(Jetty)에서도 완벽하게 동작함
  • 스프링의 단순한 개발툴과 기본적인 개발 환경으로도 엔터프라이즈 개발에서 필요로 하는 주요한 기능을 갖춘 애플리케이션을 개발하기에 충분함
  • 서블릿 컨테이너만으로 충분하기 EJB 컨테이너를 비롯해 복잡한 기능이 잔뜩 포함된 고급 WAS를 굳이 사용하지 않아도 됨
  • 그만큼 개발 과정도 단순해짐
  • 스프링의 장점은 가볍고 단순한 환경에서도 EJB와 고가의 WAS를 갖춰야만 했던 엔터프라이즈 개발의 고급 기술을 대부분 사용할 수 있다는 점임
  • 결과적으로 스프링은 EJB를 대표하는 기본의 많은 기술이 불필요하게 무겁고 복잡했음을 증명한 셈이고, 그런 면에서 스프링은 군더더기 없이 깔끔한 기술을 가진 경량급 프레임워크라 불리게 된 것임
  • 스프링의 이런 특정인 개발환경과 서버에 국한된 것이 아님
  • 경량급의 의미는 EJB나 여타 프레임워크에서 동작하기 위해 만들어진 코드에 비해 상대적으로 작고 단순하다는 뜻임
  • 프레임워크와 서버환경에 의존적인 부분을 제거했기 때문임
  • EJB와 WAS 같은 기술과 환경을 지원하기 위해 군더더기 처럼 우겨넣어야 헸단, 판에 박힌 듯이 반복되던 코드가 제거되거 나니 가장 단순하고 가벼운 코드만 남게 됐음
  • 스프링을 통해 만들어진 코드가 EJB가 지원하는 기술수준은 비슷하더라도 그것을 훨씬 빠르고 간편하게 작성하게 해줌으로써 생산성과 품질 면에서 유리하다는 것이 바로 경량급

8.1.4 자바 엔터프라이즈 개발을 편하게

  • EJB를 포함한 대부분의 자바 엔터프라이즈 기술과 프레임워크는 저마다 개발을 편하게 해준다고 주장하고 있음
  • 하지만 스프링은 근본적인 부분에서 엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시함
  • 편리한 애플리케이션 개발이란, 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 비즈니스 로직을 빠르고 효과적으로 구현하는 것임
  • EJB는 일정 부분에서는 엔터프라이즈 개발의 고민거리와 부담을 덜어줬음
  • 문제는 이 과정에서 다른 차원의 더 큰 복잡함을 애플리케이션 개발에 끌고 들어오는 실수를 저지름
  • 스프링은 당시 EJB의 잘못된 접근 방법에 대한 대안을 모색하는 중에 등장한 것임
  • 스프링은 개발자들이 프레임워크가 제공하는 기술이 아닌 개발자가 작선하는 애플리케이션의 로직에 더 많은 관심을 쏟게 해줌
  • 스프링 초기 설정과 적용 기술만 잘 선택하면 애플리케이션 개발 도중에는 스프링과 관련된 코드나 API에 대해 개발자가 신경 쓸 일이 거의 없음
  • 스프링은 또한 엔터프라이즈 개발의 기술적인 복잡한과 그에 따른 수고를 제거해줌
  • 여기서 제거한다는 것은 기술적인 필요를 무시하는 것이 아님
  • 엔터프라이즈 개발에 필연적으로 요구된는 기술적인 요구를 충족하면서도 개발을 복잡하게 만들지 않는다는 점이 스프링의 뛰어난 점임

8.1.5 오픈소스

  • 스프링은 아파치 라이선스 버전 2.0
  • 스프링은 상업적인 목적에 포함시키거나 비공개 프로젝트에 자유롭게 이용할 수 있음
  • 스프링을 사용한다는 점과 원저작자를 밝히고 제품을 패키징할 때 라이선스 정보를 포함시키는 등의 기본적 의무사항만 지키면 됨
  • 필요하다면 스프링 소스코드르 가져와 수정해서 이용할 수 있으며, 수정한 소스코드를 공개해야 하는 의무는 없음
  • 오픈소스의 장점은 많은 사람이 자유롭게 참여할 수 있다는 점임
  • 스프링에 대한 문제점이나 버그 등을 신고할 수 있음
  • 단, 스프링의 직접적 개발은 스프링소스(SpringSource)가 담당함
  • 오픈소스는 투명한 방식으로 다양한 참여를 통해 개발되기 때문에 빠르고 유연하게 개발이 가능함