1. 스프링 구성 요소?
- 스프링은 하나의 기술이 아닌, 여러가지 기술로 나누어져 있다.
- 필수
- 스프링 프레임워크: 스프링의 기본
- 스프링 부트: 스프링 설정을 쉽게 해주는 장치
- 선택
- 스프링 데이터: 데이터(CRUD)를 쉽게 관리할 수 있는 장치, JPA를 많이 씀
- 스프링 세션: 세션 기능을 편하게 사용할 수 있도록 함
- 스프링 시큐리티: 보안 관련
- 스프링 Rest Docs: 스프링의 api를 문서화 시켜 편하게 볼 수 있도록 함
- 스프링 배치: 다량의 데이터중 일부를 가져오고 저장하는 기술이 배치, 이를 스프링 특화되게 함
*이 외에도 많은 기술들이 있다.(링크 참고)
2. 스프링 프레임워크
- 결국 가장 중요한 기술은 "스프링 프레임워크"이다.
- 핵심 기술, 웹 기술, 데이터 접근 기술, 기술 통합, 테스트, 언어, 이 모든 것들을 포함하는 기능
- 우선 핵심 기술(스프링 DI 컨테이너, AOP, 이벤트, 기타)부분들을 공부하기
: 기타 기술들은 이곳에서 파생됨, 나머지는 차례차례 배우기
3. 스프링 부트
- 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용된다.
- 왜 쓸까? -> 여러 편리한 기능이 있기 때문에!
- Tomcat같은 웹 서버를 내장할 필요 없이, 스프링 애플리케이션을 생성 가능하다.
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
: 스프링으로 환경을 구성하려면 많은 종속을 해주어야 했음
: 이제는 하나만 종속해주면 됨
- 스프링과 외부 라이브러리 자동 구성
: 예전에는 외부 라이브러리와의 버전 관리가 어려웠음
: 이를 스프링부트가 단번에 해결해줌(고민할 필요X)
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
: 모니터링 하는 것이 중요, 이를 부트가 제공해줌
- 간결한 설정
: 기본적인 내용은 알아서 설정해줌
: 몇몇 필요한 부분만 커스텀해주면 된다.
- 즉, 스프링 부트는 스프링 프레임워크, 그리고 나머지 기능들을 쉽게 사용할 수 있도록 도와주는 역할을 한다.
4. 스프링이라는 단어는 무엇인가?
- 상당히 애매하다.
- 문맥에 따라 다르게 사용됨
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크..
- 최근은 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계를 의미하는듯
5. 스프링은 왜 만들었는가?
- 이 기술을 왜 만들었는가?
- 이 기술의 핵심 컨셉은?
: 이 2가지 내용이 가장 중요, 이에 따라 프레임워크의 확장성, 사용성이 달라진다.
- 어떻게 만들었길래 스프링이라는 프레임워크가 이렇게 유명해졌을까?
- 사실 스프링의 본질을 알아야, 진정으로 잘한다고 할 수 있음
- 웹 애플리케이션 만들고, DB 접근 편하게 하는 기술인가?
- 클라우드, 마이크로 서비스인가?
- 위 내용들은 모두 결과물이다!
- 스프링은 자바 언어 기반의 프레임워크, 자바언어의 가장 큰 특징은 "객체 지향 언어"이다.
- 따라서 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크이다.
: 왜 사람들이 열광했을까?
: 기존의 방법을 사용하면, 객체지향이 가진 장점들을 모두 잃어버리고,
: 그저 상속받으면서 코딩하는 더러운 방법이었음
- 스프링은 "좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크"
- 어떤 사람들은 스프링을 사용할 시 불편하고, 스프링에 종속되어 코딩할 수 밖에 없다고 불평하는데,
- 이는 스프링의 기능만 사용하고, 스프링을 제대로 이해하지 못한 사람이라고 한다.
- 그러면 여기서 질문이 하나 생긴다.
- 좋은 객체 지향 애플리케이션이란 무엇인가?
- 이에 대해서는 다음 게시글에 이어서 작성해볼 예정이다.
위 내용은 김영한 님의 인프런 강의 "스프링 핵심 원리 - 기본편"의 내용과 강의자료를 토대로 작성된 게시글입니다.
강의 링크:
'Web > spring study' 카테고리의 다른 글
[Spring] 예시 스프링 프로젝트 설계 (0) | 2023.01.09 |
---|---|
[Spring] IOC, DI, 컨테이너 (0) | 2022.12.17 |
[Spring] 객체 지향 설계와 스프링 (0) | 2022.05.26 |
[Spring] 좋은 객체 지향 설계 5가지 원칙(SOLID) (0) | 2022.05.26 |
[Spring] 좋은 객체지향 프로그래밍이란? (0) | 2022.05.17 |
댓글