<김영한 스프링 원리 기본편>
스프링을 이해해보자
- 스프링의 등장
- 스프링 부트의 등장
- 스프링이란?
- 스프링의 핵심 (Concept)
스프링의 등장
스프링 이전
EJB(Enterprise Java Bean) 라는 기술을 자바 표준 기술로 선정하여 사용하고 있었다.
여러가지 장점이 있었지만, 단점이 너무 명확하다
비싸고 / 어렵고 / 복잡함 *특히 자바의 특징인 객체지향을 전혀 살릴 수 없었음
https://woongsin94.tistory.com/357
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들이 존재
스프링 프레임워크
- 핵심기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
- 웹 기술 : 스프링 MVC, 스프링 WebFlux
- 데이터 접근 기술 : 트랜젝션, JDBC, ORM지원, XML지원
- 기술 통합 : 캐시, 이메일, 원격접근, 스케쥴링
- 테스트 : 스프링 기반 테스트 지원
- 언어 : 코틀린, 그루비
를 통합하여 스프링 프레임워크라고 한다.
스프링 부트
스프링만을 사용해서 작업할 수 있지만, 스프링 부트를 이용하면 훨씬 쉽고 편리하게 스프링을 사용가능
즉, 스프링 부트는 단독이 아님 스프링 프레임워크를 쓸 수 있게 도와주는 거지 독립적으로 무언가를 할 수 있는 것은 아니다.
- 스프링을 편리하게 사용할 수 있도록 지원하는 기술
- 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
- 웹 서버를 내장하여 별도의 웹 서버를 설치하지 않아도 됨
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
- 특정 라이브러리를 사용하기 위해 종속적으로 필요한 라이브러리를 각각 땡겨오지 않아도, starter로 필요한 라이브러리들을 한번에 땡겨올 수 있도록 제공
- 스프링과 3rd party(외부) 라이브러리 자동 구성
- 외부 라이브러리 지원되는 버전을 알아서 알려줌
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
- 모니터링을 기본적으로 어느정도 지원해줌
- 관례에 의한 간결한 설정
스프링(Spring)이라는 단어는 이제 문맥에 따라 다양한 뜻을 가지게 되었다.
- 스프링 DI 컨테이너 기술(스프링 핵심 기술 , 빈관리 등)
- 스프링 프레임워크
- 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계
스프링의 핵심 개념
- 무엇을 위해 만들어 졌는가?
스프링은 자바 언어 기반 즉, 객체 지향이 강점!
스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
-> 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
이전 : EJB를 사용할 때는 상속받으면서 의존적으로 개발되기 때문에 객체지향의 장점이 사라진다.
즉, 스프링을 잘 사용해서, 스프링의 개발의 의의를 살리려면, "좋은 객체 지향 프로그래밍"을 해야한다.
즉, 좋은 객체 지향 프로그래밍이 어떤건지 알아야 핵심 개념을 잘 살릴 수 있다!
'Backend > Spring' 카테고리의 다른 글
[Spring] 객체 지향 설계 원칙 - SOLID (0) | 2021.09.19 |
---|---|
[Spring] 객체 지향 프로그래밍 (0) | 2021.09.18 |
[Spring] AOP (0) | 2021.09.14 |
[Spring] db접근기술(JPA, Spring JPA) (0) | 2021.09.14 |
[Spring] 데이터베이스 접근 기술(Jdbc) (0) | 2021.09.14 |