스프링 오버뷰
버전 5.3.10
스프링은 자바 엔터프라이즈 애플리케이션을 만들기 쉽게 만든다. 그것은 당신에게 엔터프라이즈 환경에서 자바를 수용하는 모든 것들을 제공한다, 또한 JVM환경의 그루비와 코틀린을 지원한다, 애플리케이션의 니즈에 따라 다양한 종류의 아키텍쳐를 제공하는 유연성과 함께. 스프링 5.1+ 이후로, 스프링은 JDK8이상에서만 지원되며, jdk 11이상의 버전에 대한 지원도 제공한다. JAVA SE 60이 최소한의 버전이지만, 최신버전을 사용하는 것을 추천한다.
스프링은 다양한 범위의 애플리케이션 시나리오를 지원한다. 넓은 엔터프라이즈에서, 애플리케이션은 오래동안 존재해야하며, JDK와 애플리케이션 서버에서 실행되야하며, 그것의 업그레이드 사이클은 개발자의 컨트롤하에 없는(?_). 다른 것은 아마도 하나의 jar파일에 서버가 내장되어있다는 것이며, 클라우드 환경에서 돌아가는. 그리고 다른 것은 아마도 서버가 필요없는 혼자서 돌아가는 독립 실행형 애플리케이션.
스프링은 오픈소스이다. 그것은 거대하고 활성화된 커뮤니티를 가지고 있고, 지속적인 피드백을 제공하며, 다양한 실세계의 유스케이스를 제공한다. 이것은 스프링이 오래동안 성공적으로 진화해오는 것에 도움이 되고있다.
1. 스프링의 의미
스프링의 의미는 다른 문맥에서 다른 의미를 지닌다. 스프링 프레임워크 프로젝트 그 자체를 의미하기도 한다. 스프링 프레임워크의 상단에 건설된 스프링 프로젝트를 의미하기도 한다. 대부분의 경우, 사람들이 Spring이라고 하면, 전체적인 프로젝트를 의미한다. 이 레퍼런스 문서는 스프링 프레임워크 그 자체에 포커스를 둔다.
스프링 프레임워크는 모듈들로 나뉜다. 애플리케이션은 그들이 필요로하는 모듈로 나눌 수 있다. 핵심은 설정 모델과 DI 메커니즘을 포함하는 핵심 컨테이너의 모듈이다. 그것을 넘어서 스프링 프레임워크는 다양한 애플리케이션 아키텍처를 지원하는 근본적인 지원을 제공한다, 메시지, 트랜잭셔널 데이터와 영속성, 웹. 그것은 또한 서블릿 기반의 스프링 MVC 웹 프레임워크와, 병렬적으로, 스프링 웹플럭스 리액티브 웹 프레임워크를 포함한다.
모듈에 대한 노트: 스프링의 프레임워크 자르들은 JDK 9(직소)의 모듈 패스에 배포를 허용한다. 직소를 지원하는 애플리케이션에서 사용하기 위해, 스프링 프레임워크 5의 jar는 자동 모듈 이름의 메니페스트 엔트리와 함께 안정적인 언어 레벨 모듈 이름의 독립적인 자르 아티팩트 네임. 따라서 스프링 프레임워크의 자르는 꾸준히 jdk8 과 jdk 9+에서 잘 작동한다. ( 양쪽에서 잘 작동하도록 언어 모듈 이름을 잘 짓고 있다는 것으로 보인다.)
2. 스프링과 스프링 프레임워크의 역사
J2EE 명세의 복잡성에 대한 응답으로 2003년에 탄생하였다. 누군가는 JAVA EE와 스프링을 경쟁관계에 있다고 생각하지만, 사실 스프링은 JAVA EE를 보완한다. 스프링의 프로그래밍 모델은 JAVA EE 플랫폼의 명세를 포괄하지 않는다. 오히려, EE로 부터 개개인적인 명세를 신중하게 선택하여 통합할 수 있다. ( 더 좋다는 뜻)
- Servlet API (JSR 340)
- WebSocket API (JSR 356)
- Concurrency Utilities (JSR 236)
- JSON Binding API (JSR 367)
- Bean Validation (JSR 303)
- JPA (JSR 338)
- JMS (JSR 914)
- as well as JTA/JCA setups for transaction coordination, if necessary.
스프링 프레임워크는 또한 DI와 일반적인 애노테이션 명세를 지원한다, 애플리케이션 개발자들이 스프링 프레임워크에서 제공하는 스프링에 특정한 메커니즘을 따르는 대신에. ( 스프링에서만 돌아가는 것이 아닌, 자바 표준을 지원한다는 뜻)
스프링 프레임워크 5.0에서, 스프링은 JAVA EE 7 레벨(서블릿 3.1+ , JPA 2.1+)을 최소로 요구하게 되었다 - 그 동시에 JAVA EE 8 레벨에서 최신 API와 즉시 사용 가능한 통합을 제공한다. (예를 들어 servlet 4.0과 JSON BINDING API를 사용하면 이런 충돌이 발생하겠지만, 스프링에서 ...). 이것은 스프링을 완벽하게 호환되도록 톰캣8과 9, 웹스피어 9, 그리고 JBoss EAP 7.
시간이 흘러, 애플리케이션 배포에 있어서 JAVA EE의 역할이 진화해왔다. 예전의 JAVA EE와 스프링은 애플리케이션이 애플리케이션 서버에서 등록하기 위해 생성되었다. 오늘날에는, 스프링 부트의 도움으로, 애플리케이션이 데브옵스와 클라우드 친화적이 방법으로 생성되었다, 서블릿 컨테이너가 내장되고, 몇 가지의 변화와 함께. 스프링 프레임워크 5로서, 웹플럭스 애플리케이션은 서블릿 API를 직접적으로 사용하지않으며, 서블릿 컨테이너가 아닌 서버(Netty와 같은)에서 동작한다.
스프링은 계속해서 혁신하고 진화한다. 스프링 프레임워크를 넘어, 많은 프로젝트들이 있다, 예를 들어 스프링 부트, 스프링 시큐리티, 스프링 데이터, 스프링 클라우드, 스프링 배치, 많은 것들 중에. 이런 각각의 프로젝트들을 기억하는 것은 중요하다, 그것은 각각의 소스 코드 레포지토리를 가지며, 이슈 트래커, 배포 케이던스(?)를 가진다. 스프링 프로젝트들의 리스트를 모두 보고 싶다면, spring.io/projects 를 참조하라
3. 디자인 철학
당신이 한 프레임워크에 대해 공부한다면, 그 프레임워크 뿐만 아니라, 그것을 따르는 철학들을 아는 것은 중요하다. 다음은 스프링 프레임워크를 이끄는 철학들이다.
- 모든 수준에서 선택을 제공한다. 스프링은 당신이 가능하면 늦게 디자인을 결정할 수 있게 도와준다. 예를 들어, 당신은 영속성 제공자를 교체할 수 있다, 당신의 코드를 수정하지 않고, 설정을 바꿈으로. 많은 인프라 문제와 서드파티 API들과의 통합도 마찬가지이다.
- 다양한 관점을 수용한다. 스프링은 유연성을 포용하며, 일을 어떻게 해야하는 지에 대해 의견을 제시하지 않는다. 다양한 관점에서의 애플리케이션 요구 사항을 지원한다.
- 강력한 하위 호환성을 지원한다. 스프링의 진화는 주요 변경 사항이 거의 없도록 주의깊게 관리되었다. 스프링은 애플리케이션 및 라이브러리의 유지보수를 용이하게 하기위해 신중하게 선택된 범위의 JDK 버전 및 서드 파티 라이브러리를 지원한다.
- API 디자인을 고려하라. 스프링 팀은 직관적이고, 수 버전과 수년이 넘게 유지되는 API를 위해 수많은 생각과 시간을 넣었다(이거 보고 공부하라는 뜻?)
- 코드 품질에 대한 높은 기준을 설정한다. 스프링 프레임워크는 의미 있고 최신이며 정확한 Javadoc에 중점을 둔다. 클린 코드 스트럭쳐에 대한 클레임이 거의 없는 프로젝트이다, 패키지간의 순환참조가 없다
4. 피드백과 컨트리뷰션
stack overflow에 피드백하는 것을 추천한다. 당신의 문제가 확실하고, 새로운 기능을 제안하려면 깃헙 이슈를 사용하라. 당신에게 솔루션이 있거나, 제안하는 픽스가 있다면 깃헙에 풀 리퀘스트를 올려라. 그러나 명심해야할 것은, 엄청 사소한 문제가 아니면, 그에 대한 논의가 진행되고, 이슈 트래커에 티켓이 제출될 것이다.
컨트리뷰팅에 대한 더 상세한 디테일은, 최상단의 프로젝트 페이지에 존재한다.
5. 시작하기
스프링과 함께 시작한다면, 스프링 부트 기반의 스프링 프레임워크로 시작할 수 있다. 스프링 부트는 준비된 제품의 스프링 기반 애플리케이션을 빠르게 생성할 수 있게 한다. 최대한 빠르게 스프링 프레임워크의 설정들을 컨벤션으로 덮어서 가능하면 빠르게 시작하고 실행할 수 있게 디자인되어있다.
'공부기록 > Spring' 카테고리의 다른 글
토비의 스프링 13장 - 스프링 웹 기술과 스프링 MVC (0) | 2021.11.07 |
---|---|
토비 스프링 5장 - 서비스 추상화 (0) | 2021.10.27 |
토비의 스프링 4장 - 예외 (0) | 2021.10.18 |
토비의 스프링 3장- 템플릿 (0) | 2021.10.16 |
토비의 스프링 1장 (0) | 2021.10.09 |