본문 바로가기
Back-end/java spring

Spring 이란?

by kkkdh 2022. 12. 23.
728x90

Spring의 생태계에는 다음과 같이 굉장히 다양한 기술들이 존재한다.

스프링 프레임워크

  • 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타
  • 웹 기술: 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원
  • 기술 통합: 캐시, 이메일, 원격접근, 스케줄링
  • 테스트: 스프링 기반 테스트 지원
  • 언어: 코틀린, 그루비
  • 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용한다.

위와 같은 기능들을 제공하는 것을 통합해서 스프링 프레임워크라고 부르고, 강의에서는 그중에서도 핵심 기술에 대한 이해를 위주로 다룬다.

 

나머지는 이것에서 파생된 개념들이다. 지금 실무에서는 스프링 부트를 기본으로 깔고 들어간다고 함.

 

스프링 부트

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성해준다.
  • Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 된다.
  • 손쉬운 빌드 구성을 위한 starter 종속성을 제공
  • 스프링과 3rd party(외부) 라이브러리 자동 구성
    • 유명한 메이저 라이브러리와 스프링 버전의 호환성을 확인해 맞는 버전을 자동으로 깔리도록 관리해 준다.
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
    • 운영 환경에서 모니터링이 매우 중요한데, 이러한 부분을 스프링 부트가 기본적으로 제공해 준다.
  • 관례(convention?)에 의한 간결한 설정
    • 스프링만 사용하는 경우 설정이 굉장히 어려웠는데, 스프링 부트는 이런 설정을 간단하게 해결할 수 있도록 도와준다.

 

스프링 단어의 의미?

  • 스프링이라는 단어는 문맥에 따라 다르게 사용한다. (매우 애매한 명칭이다.)
    • 스프링 DI 컨테이너 기술을 지칭
    • 스프링 프레임워크를 지칭
    • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 생태계를 지칭

스프링이란 과연 뭘까?

스프링은

  • 웹 애플리케이션을 만들고, DB 접근을 편리하게 해주는 기술?
  • 전자 정부 프레임워크?
  • 웹 서버 자동으로 띄워줘서 좋다?
  • 클라우드, 마이크로서비스에 사용?

이런 것들은 스프링이라는 것의 핵심 개념으로 인한 장점으로 도출된 결과에 불과하다. 

 

스프링의 진짜 핵심

  • 스프링은 자바 언어 기반의 프레임워크
  • 그리고 자바 언어의 가장 큰 특징 - 객체 지향 언어라는 점
  • 따라서 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크라고 할 수 있다.
  • 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있도록 개발자를 돕는 프레임워크

기존의 EJB를 사용하는 상황에서는 자바 본래의 객체 지향이 가진 장점들을 잃게 되었는데, EJB를 사용하면 EJB에 종속될 수밖에 없는 상황이 벌어졌다. 그래서 순수한 자바로 돌아가자 POJO라는 단어도 나왔었다.

 

스프링이 가진 DI 컨테이너, IOC 컨테이너라고 하는 것들이 이걸 가능하게 하는 것들이 있었다. 여기서 출발한 것이 스프링이다.

 

따라서 좋은 객체 지향 애플리케이션이 뭘까 이해하는 것부터가 스프링에 대한 이해의 출발점이라고 말할 수 있다.

728x90

댓글