본문 바로가기

Backend/Spring

[Spring] 스프링에 대하여

728x90

<김영한 스프링 원리 기본편>

 

 

 

스프링을 이해해보자

  • 스프링의 등장
  • 스프링 부트의 등장
  • 스프링이란?
  • 스프링의 핵심 (Concept)

 

 

 

 

스프링의 등장

 

스프링 이전

EJB(Enterprise Java Bean) 라는 기술을 자바 표준 기술로 선정하여 사용하고 있었다.

여러가지 장점이 있었지만, 단점이 너무 명확하다 

비싸고 / 어렵고 / 복잡함  *특히 자바의 특징인 객체지향을 전혀 살릴 수 없었음

https://woongsin94.tistory.com/357

 

EJB(Enterprise Java Bean)

개념 EJB(Enterprise Java Bean), 기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델이다. 일반적으로 업무 로직을 가지고 있는 서버 어플리케이션을 EJB라고 한다. Enterprise JavaBeans(EJB)는 독립한

woongsin94.tistory.com

EBJ 참고 

 

 

결국, 몇몇 개발자들이 탈주해서 다른 것을 개발하기 시작

J2EE 와 하이버네이트

 

J2EE (→ Spring)

  • EJB 컨테이너를 대체 
  • 단순하다
  • BeanFactory, ApplicationContext, POJO, 제어의 역전(IoC), 의존관계 주입(DI) 내용 등이 포함
  • (로드 존슨)30000줄의 자바코드였던 이것은 훗날 오픈소스로 발전해 스프링이 되었음

 

하이버네이트 ( → JPA )

  • EJB 엔티티빈 기술을 대체
  • 이를 조금 정제하여, JPA라는 이름으로 자바의 표준이 되었음 (자바 ORM기술은 거의 이걸 사용)

 

 

스프링 부트의 등장

스프링 부트는 2003년 스프링 프레임워크의 첫 출시 이후, 2014년에 처음 출시되었다.

초기 스프링은 설정이 가장 어려웠다. 

스프링을 빌드하고, 서버(톰캣)을 따로 설치해야하며 스프링 프로젝트를 톰캣 서버에 띄워서.. 등 설정이 어려웠는데,

내장 서버를 지원하고, 설정을 자동화해주는 등 스프링을 사용하기 편리하게 도와주는 도구로서 등장했다. (나중에 자세히)

 

 

 

 

스프링(Spring)이란?

스프링의 구성 

필수

  • 스프링 프레임워크(핵심)
  • 스프링 부트 : 스프링 및 다른 스프링 부가 사항들을 쉽게 사용하도록 돕는 것

 

선택

  • 스프링 데이터 : 데이터베이스접근 을 편리하게 하도록 도와주는것 , spring data jpa가 가장많이 사용됨
  • 스프링 세션 : 세션기능을 편리하게 
  • 스프링 시큐리티 : 보안관련 
  • 스프링 Rest Docs : api문서와 테스트를 엮어 편리하게
  • 스프링 배치 : 배치처리, 실시간반영이 어려운 실무에서 n건씩 한번에 배치로 처리가능하도록 돕는기술
  • 스프링 클라우드 : 클라우드기술

등등

그 외에도 많은 project들이 존재

https://spring.io/projects

 

Spring | Projects

Spring Framework Provides core support for dependency injection, transaction management, web apps, data access, messaging, and more.

spring.io

 

 

 

스프링 프레임워크
  • 핵심기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
  • 웹 기술 : 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술 : 트랜젝션, JDBC, ORM지원, XML지원
  • 기술 통합 : 캐시, 이메일, 원격접근, 스케쥴링
  • 테스트 : 스프링 기반 테스트 지원
  • 언어 : 코틀린, 그루비 

를 통합하여 스프링 프레임워크라고 한다. 

 

 

스프링 부트

스프링만을 사용해서 작업할 수 있지만, 스프링 부트를 이용하면 훨씬 쉽고 편리하게 스프링을 사용가능

즉, 스프링 부트는 단독이 아님 스프링 프레임워크를 쓸 수 있게 도와주는 거지 독립적으로 무언가를 할 수 있는 것은 아니다.

  • 스프링을 편리하게 사용할 수 있도록 지원하는 기술 
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
    • 웹 서버를 내장하여 별도의 웹 서버를 설치하지 않아도 됨
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공 
    • 특정 라이브러리를 사용하기 위해 종속적으로 필요한 라이브러리를 각각 땡겨오지 않아도, starter로 필요한 라이브러리들을 한번에 땡겨올 수 있도록 제공 
  • 스프링과 3rd party(외부) 라이브러리 자동 구성
    • 외부 라이브러리 지원되는 버전을 알아서 알려줌 
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
    • 모니터링을 기본적으로 어느정도 지원해줌
  • 관례에 의한 간결한 설정 

 

 

스프링(Spring)이라는 단어는 이제 문맥에 따라 다양한 뜻을 가지게 되었다.

  • 스프링 DI 컨테이너 기술(스프링 핵심 기술 , 빈관리 등)
  • 스프링 프레임워크
  • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

 

 

 

스프링의 핵심 개념
- 무엇을 위해 만들어 졌는가? 

 

스프링은 자바 언어 기반 즉, 객체 지향이 강점!

스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 

-> 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크

이전 : EJB를 사용할 때는 상속받으면서 의존적으로 개발되기 때문에 객체지향의 장점이 사라진다.

 

즉, 스프링을 잘 사용해서, 스프링의 개발의 의의를 살리려면, "좋은 객체 지향 프로그래밍"을 해야한다.

즉, 좋은 객체 지향 프로그래밍이 어떤건지 알아야 핵심 개념을 잘 살릴 수 있다!

 

728x90