이 카테고리의 포스트는 인프런 스프링 완전정복 로드맵 중 스프링 핵심-기본 편을 수강하며 정리한 내용입니다.
1-1. 스프링의 탄생
EJB
스프링이 등장하기 이전 자바 개발의 표준 기술은 EJB (Enterprise Java Beans)로, 각종 기능이 종합된 기술이었으나 복잡하고, 유연하지 못하고, 느리며, 비쌌다.
사용하기 오죽 불편했으면 EJB 대신 순수하게 자바 코드로만 프로그램을 작성하자는 이야기까지 나돌 정도였다고. 악명이 자자했던 모양이다.
spring과 hibernate
이러한 EJB의 불편함을 해소하고자 spring과 hibernate가 오픈소스로 개발되기 시작하였고, 이것이 현재 사실상 자바 개발의 표준 기술인 스프링과 JPA의 시작이 되었다.
JPA
JPA (Java Persistance API)는 현재 자바 표준기술로, 인터페이스들로 구성되어 있으며, 여러가지 JPA 구현체가 작성되어 표준 라이브러리로 제공되고 있다.
대표적인 JPA 구현체로 hibernate가 있으며, 현재 hibernate가 JPA 구현체 중 80% 가량을 차지한다.
오픈 소스 라이브러리
spring과 spring 바탕의 각종 기능, 라이브러리들은 기본적으로 오픈 소스기 때문에, 개발 시 큰 제약 없이 필요한 라이브러리들을 가져다 쓸 수 있다. 기업용으로도 오픈인지는 모르겠다.
다만, 이와 같은 오픈 소스 라이브러리의 단점으로 표준화가 덜 되어있다는 점, 특정 기능에 특화되어 있다는 점이 있다.
spring 이름의 유래
스프링이라는 이름의 유래는 어렵고 불편한 EJB의 시대를 끝내고 새로운 봄(spring), 새로운 시작이라는 의미에서 따 왔다고 전해진다.
1-2. 스프링이란?
스프링 생태계
스프링 생태계는 다양한 요소들로 구성된다. 핵심 기술로 스프링 프레임워크, 스프링 부트가 있으며, 그 외 스프링 데이터, 세션, 시큐리티 등 다양한 요소가 존재한다.
핵심
- 스프링 부트 : 스프링 프레임워크를 간편하게 사용할 수 있도록 기능을 제공.
- 스프링 프레임워크 : 스프링의 핵심. 실질적으로 서비스 개발에 필요한 핵심 기능을 제공.
부가 기능
- 스프링 데이터 : CRUD 등 데이터를 다루는 기능을 지원
- 스프링 세션 : 세션 기능
- 스프링 시큐리티 : 보안 기능
- 스프링 Rest Docs : API 문서 작성 기능
- 스프링 배치 : 배치 처리 특화 기술
- 스프링 클라우드 : 클라우드 기술
그 외 다양한 부가 기능이 있으며, 스프링 부트는 이 모든 기술을 편리하게 사용할 수 있도록 돕는다.
Spring | Projects
Projects From configuration to security, web apps to big data—whatever the infrastructure needs of your application may be, there is a Spring Project to help you build it. Start small and use just what you need—Spring is modular by design.
spring.io
스프링 부트
스프링 부트는 스프링을 편리하게 사용하도록 지원하는 기술로, 현재는 거의 모든 프로젝트에 기본으로 사용된다.
사실 스프링 부트 자체로는 별다른 기능을 제공하지 않는다. 일종의 틀이라고 생각하면 편할 듯 하다.
스프링 부트의 특징으로 몇 가지가 있는데, 간단히 살펴보자면 다음과 같다.
- 단독 실행 가능한 스프링 애플리케이션을 쉽게 생성한다.
- 톰캣 등의 웹 서버를 내장하기 때문에 별도의 웹 서버를 설치할 필요가 없다.
- 스프링 및 외부(3rd party) 라이브러리를 자동으로 구성해준다.
- 스프링 버전에 따라 함께 쓰기 좋은, 메이저한 라이브러리를 자동으로 구성해준다.
- 복잡한 스프링 프레임워크 설정을 간편하게 구성해준다.
사실 직접 해보지 않고 글로만 읽으면 잘 모를 수 밖에 없다.
그래서 지금은 스프링 프레임워크는 각종 설정이 중요하고, 스프링 부트는 이것을 간편하게 해준다 정도로 이해하려고 한다.
용어로서의 spring
스프링이라는 단어는 문맥에 따라 여러 의미로 사용되는데, 대표적으로 다음과 같은 의미로 쓰인다.
- 스프링 DI 컨테이너 기술 (스프링 핵심기술)
- 스프링 프레임워크 자체
- 스프링 생태계 전쳬 (스프링 부트, 스프링 프레임워크, ... 포함)
스프링 핵심 원리 (중요)
스프링이 좋다는 건 알겠는데, 그래서 이걸 왜 만들었을까? 이 질문은 스프링의 핵심 원리와 직결된다.
많은 곳에서 스프링을 사용하는 이유에 대해서 이해해야 한다.
스프링의 핵심 개념은 간단하다.
스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크다.
스프링을 통해 구현되는 모든 기능이나 라이브러리 등은 이것이 목적이다.
대부분의 개념이나 기술이 그렇듯, 핵심 개념을 이해하는 것은 중요하다.
핵심 개념을 이해해야 그것을 사용하는 이유를 이해할 수 있고, 결과적으로 알맞은 곳에 알맞은 기능을 사용할 수 있기 때문이다.
이것을 이해하지 못하면, 유용한 기능을 엉뚱한 곳에 사용하게 된다. 결과적으로 아무 의미가 없어지는 것이다.
어느 실력있던 강사로부터 자주 들었던 말을 인용하자면, 우리나라가 제주도에 최정예 군부대를 배치하는 꼴이다.
그러면 제주도는 잘 지킬 수 있겠지. 근데 그게 결과적으로 우리나라 방위에 도움이 될까?
다음 포스트에서는 좋은 객체 지향 프로그래밍이란 무엇인지에 대해서 정리한다.
'[inflearn] 스프링 핵심 원리 - 기본편 > 섹션 1 - 객체지향 설계와 스프링' 카테고리의 다른 글
4. 객체 지향 설계와 스프링 (0) | 2023.06.29 |
---|---|
3. 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2023.06.29 |
2. 좋은 객체 지향 프로그래밍 (0) | 2023.06.23 |