Backend
home

[Spring 공식문서 읽기] Spring Framework Overview 2

생성 일시
2025/10/10 12:25
태그
SpringBoot
게시일
2025/10/10
최종 편집 일시
2025/10/12 08:36

참고 링크

원문 1

Spring came into being in 2003 as a response to the complexity of the early J2EE specifications. While some consider Java EE and its modern-day successor Jakarta EE to be in competition with Spring, they are in fact complementary. The Spring programming model does not embrace the Jakarta EE platform specification; rather, it integrates with carefully selected individual specifications from the traditional EE umbrella:

번역

Spring은 2003년에 등장했으며, 이는 당시 J2EE(Java 2 Enterprise Edition)가 지나치게 복잡했던 것에 대한 해결책으로 만들어졌다. 일부 사람들은 Java EE(현재의 Jakarta EE)가 Spring과 경쟁 관계라고 생각하지만, 실제로는 상호 보완적인 관계에 가깝다.
Spring의 프로그래밍 모델은 Jakarta EE 전체 플랫폼을 포괄적으로 수용하지 않는다. 대신, 그중에서 필요하고 유용한 일부 명세(specification)만을 선택적으로 통합한다.

이어지는 내용

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.
Spring은 아래와 같은 전통적인 EE 사양들을 필요에 따라 통합한다:
Servlet API (JSR 340) → HTTP 요청/응답 기반 웹 애플리케이션 지원
WebSocket API (JSR 356) → 실시간 양방향 통신
Concurrency Utilities (JSR 236) → 병렬 처리 및 스레드 관리
JSON Binding API (JSR 367) → JSON 직렬화/역직렬화
Bean Validation (JSR 303) → 유효성 검증 (예: @NotNull, @Email)
JPA (JSR 338) → ORM 기반 데이터 영속성
JMS (JSR 914) → 메시지 큐 통신 (예: ActiveMQ, RabbitMQ 등)
JTA / JCA → 트랜잭션 조정, 리소스 연결
즉, Spring은 EE 전체를 대체하려는 것이 아니라, 실용적인 부분만 통합하여 개발 생산성을 극대화한다.

원문 2

The Spring Framework also supports the Dependency Injection (JSR 330) and Common Annotations (JSR 250) specifications, which application developers may choose to use instead of the Spring-specific mechanisms provided by the Spring Framework. Originally, those were based on common javax packages.

번역

Spring Framework는 또한 의존성 주입(Dependency Injection, JSR 330) 및 공통 어노테이션(Common Annotations, JSR 250) 명세도 지원한다.
개발자는 Spring이 제공하는 고유 기능 대신, 이런 표준 명세 기반의 어노테이션을 사용할 수도 있다. (예: @Inject, @Resource 같은 표준 javax 기반 어노테이션들)
과거에는 이러한 명세들이 javax 패키지를 기반으로 제공되었다.

원문 3

As of Spring Framework 6.0, Spring has been upgraded to the Jakarta EE 9 level (for example, Servlet 5.0+, JPA 3.0+), based on the jakarta namespace instead of the traditional javax packages. With EE 9 as the minimum and EE 10 supported already, Spring is prepared to provide out-of-the-box support for the further evolution of the Jakarta EE APIs. Spring Framework 6.0 is fully compatible with Tomcat 10.1, Jetty 11 and Undertow 2.3 as web servers, and also with Hibernate ORM 6.1.

번역

Spring Framework 6.0부터는 Jakarta EE 9 수준으로 업그레이드 되었다.
즉, 기존의 javax.* 패키지 대신 jakarta.* 네임스페이스를 사용한다.
예를 들어,
Servlet 5.0+
JPA 3.0+
이상이 기본 적용된다.
또한 Spring은 Jakarta EE 10까지 이미 지원하고 있으며, 앞으로의 EE 발전에 맞춰 즉시 대응 가능한 구조(out-of-the-box support)를 갖추고 있다.
현재 Spring 6.0은 다음 서버 및 ORM과 완벽히 호환된다.
Tomcat 10.1
Jetty 11
Undertow 2.3
Hibernate ORM 6.1

원문 3

Over time, the role of Java/Jakarta EE in application development has evolved. In the early days of J2EE and Spring, applications were created to be deployed to an application server. Today, with the help of Spring Boot, applications are created in a devops- and cloud-friendly way, with the Servlet container embedded and trivial to change. As of Spring Framework 5, a WebFlux application does not even use the Servlet API directly and can run on servers (such as Netty) that are not Servlet containers.

번역

시간이 지나면서 Java/Jakarta EE의 역할도 함께 진화해왔다. 초기의 J2EE 및 Spring 시대에는, 애플리케이션을 애플리케이션 서버에 배포(deploy) 하는 형태가 일반적이었다.
그러나 오늘날에는 Spring Boot의 등장 덕분에, DevOps 및 클라우드 환경에 최적화된 방식으로 애플리케이션을 개발한다. 즉, 내장된 서블릿 컨테이너(embedded container)로 실행되며, 서버 교체도 매우 쉽다.
또한 Spring Framework 5부터는 Spring WebFlux를 통해 Servlet API에 의존하지 않고, Netty와 같은 비서블릿 서버에서도 동작하는 리액티브 애플리케이션을 만들 수 있다.

원문 4

Spring continues to innovate and to evolve. Beyond the Spring Framework, there are other projects, such as Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch, among others. It’s important to remember that each project has its own source code repository, issue tracker, and release cadence. See spring.io/projects for the complete list of Spring projects.

번역

Spring은 지속적으로 혁신하고 진화하고 있다.
이제는 단순히 “Spring Framework”만이 아니라, 그 위에 다양한 독립 프로젝트들이 함께 발전하고 있다.
대표적인 예로는 다음과 같다.
Spring Boot → 설정 자동화 및 실행 환경 단순화
Spring Security → 인증, 인가 보안 처리
Spring Data → JPA, MongoDB 등 데이터 접근 통합
Spring Cloud → 마이크로서비스 및 분산 환경 지원
Spring Batch → 대규모 배치 처리
이 외에도 많은 프로젝트들이 존재하며, 각 프로젝트는 별도의 소스 저장소, 이슈 트래커, 릴리스 주기를 가진다.
전체 목록은 spring.io/projects 에서 확인할 수 있다.

원문 5 - Design Philosophy

When you learn about a framework, it’s important to know not only what it does but what principles it follows. Here are the guiding principles of the Spring Framework:
프레임워크를 배울 때는, 무엇을 할 수 있는지에 대한 것뿐만 아니라 어떤 철학으로 설계되었는지를 이해하는 것이 중요하다. 아래는 Spring Framework를 이끄는 핵심 설계 원칙들(guiding principles)이다.
Provide choice at every level. Spring lets you defer design decisions as late as possible. For example, you can switch persistence providers through configuration without changing your code. The same is true for many other infrastructure concerns and integration with third-party APIs.
모든 수준에서 선택의 자유를 제공한다. Spring은 개발자가 가능한 한 늦은 시점까지 설계 결정을 미룰 수 있도록 해준다. 예를 들어, 영속성 계층에서 사용하는 기술을 Hibernate에서 다른 JPA 구현체로 변경할 때 코드를 수정하지 않고도 설정만 바꿔서 손쉽게 교체할 수 있다. 이러한 접근 방식은 다른 인프라 구성 요소나 외부 API 통합에도 동일하게 적용된다.
⇒ Spring은 기술 선택의 유연성을 극대화하여, 개발자가 코드보다는 설계를 중심으로 자유롭게 결정할 수 있도록 한다.
Accommodate diverse perspectives. Spring embraces flexibility and is not opinionated about how things should be done. It supports a wide range of application needs with different perspectives.
다양한 관점과 접근 방식을 수용한다. Spring은 유연함을 중시하며, 특정한 방식으로 개발해야 한다는 고정된 관점을 강요하지 않는다. 즉, 하나의 정답을 제시하기보다는 다양한 방식으로 애플리케이션을 설계하고 구현할 수 있도록 지원한다. 그 결과, Spring은 서로 다른 요구사항과 철학을 가진 다양한 애플리케이션 개발 방식을 폭넓게 포용한다.
⇒ Spring은 의견을 강요하지 않고, 개발자가 자신에게 맞는 방식으로 설계할 수 있는 자유를 준다.
Maintain strong backward compatibility. Spring’s evolution has been carefully managed to force few breaking changes between versions. Spring supports a carefully chosen range of JDK versions and third-party libraries to facilitate maintenance of applications and libraries that depend on Spring.
강력한 하위 호환성을 유지한다. Spring은 버전이 진화하는 과정에서도 호환성을 깨뜨리는 변경 사항(breaking changes)이 거의 발생하지 않도록 매우 신중하게 관리되어 왔다. 또한 Spring은 선별된 JDK 버전과 주요 서드파티 라이브러리들을 지원함으로써, Spring에 의존하는 애플리케이션이나 외부 라이브러리가 오랜 기간 안정적으로 유지, 관리될 수 있도록 돕는다.
⇒ 새 버전이 나와도 나의 Spring 프로젝트는 여전히 돌아간다.
Care about API design. The Spring team puts a lot of thought and time into making APIs that are intuitive and that hold up across many versions and many years.
API 설계에 깊은 주의를 기울인다. Spring 팀은 직관적이고 일관성 있는 API를 만들기 위해 많은 시간과 고민을 투자한다. 그 결과, Spring의 API들은 오랜 세월과 여러 버전을 거쳐도 안정적으로 유지될 수 있는 구조를 가지고 있으며, 개발자가 쉽게 이해하고 사용할 수 있도록 직관적인 설계 철학을 반영한다.
Set high standards for code quality. The Spring Framework puts a strong emphasis on meaningful, current, and accurate javadoc. It is one of very few projects that can claim clean code structure with no circular dependencies between packages.
코드 품질에 대한 높은 기준을 유지한다. Spring Framework는 의미 있고, 최신이며, 정확한 Javadoc 문서화를 매우 중요하게 여긴다. 또한 패키지 간 순환 의존성이 전혀 없는(clean) 코드 구조를 갖춘, 아주 드문 수준의 프로젝트 중 하나로 평가된다. 이처럼 Spring은 코드의 구조적 완성도와 문서의 정확성을 모두 철저히 관리함으로써, 장기간에 걸쳐 안정적이고 신뢰할 수 있는 프레임워크 품질을 유지하고 있다.

원문 6 - Feedback and Contributions

For how-to questions or diagnosing or debugging issues, we suggest using Stack Overflow.
Click here for a list of the suggested tags to use on Stack Overflow.
If you’re fairly certain that there is a problem in the Spring Framework or would like to suggest a feature, please use the GitHub Issues.
If you have a solution in mind or a suggested fix, you can submit a pull request on Github. However, please keep in mind that, for all but the most trivial issues, we expect a ticket to be filed in the issue tracker, where discussions take place and leave a record for future reference.
For more details see the guidelines at the CONTRIBUTING, top-level project page.
사용 방법에 대한 질문이나 문제를 진단하고 디버깅하고자 할 때는 Stack Overflow를 이용하는 것을 권장한다.
Stack Overflow에서 사용할 수 있는 추천 태그 목록은 공식 문서의 링크를 통해 확인할 수 있다.
만약 Spring Framework 자체에 문제가 있다고 확신하거나, 새로운 기능을 제안하고 싶다면
GitHub Issues를 이용해야 한다.
또한, 문제에 대한 해결방안이나 수정 제안이 이미 있다면, GitHub를 통해 Pull Request를 제출할 수도 있다.
다만, 단순한 사소한 이슈를 제외하고는, Pull Request를 올리기 전에 반드시 Issue Tracker에 티켓을 먼저
등록해야 한다.
이곳에서 개발자들 간의 논의가 이루어지고, 그 내용이 향후 참고할 수 있는 기록으로 남겨지기 때문이다.
자세한 내용은 프로젝트 상위 페이지의 CONTRIBUTING 가이드라인을 참고하면 된다.

원문 7 - Getting Started

If you are just getting started with Spring, you may want to begin using the Spring Framework by creating a Spring Boot-based application. Spring Boot provides a quick (and opinionated) way to create a production-ready Spring-based application. It is based on the Spring Framework, favors convention over configuration, and is designed to get you up and running as quickly as possible.
You can use start.spring.io to generate a basic project or follow one of the "Getting Started" guides, such as Getting Started Building a RESTful Web Service. As well as being easier to digest, these guides are very task focused, and most of them are based on Spring Boot. They also cover other projects from the Spring portfolio that you might want to consider when solving a particular problem.

번역

Spring을 처음 시작하는 사람이라면,
Spring Framework를 활용한 Spring Boot 기반 애플리케이션을 만드는 것부터 시작하는 것이 좋다.
Spring Boot는 생산 환경 수준의(Spring-Based) 애플리케이션을 빠르고 간편하게 만들 수 있는
방법을 제공한다.
이는 Spring Framework를 기반으로 하며,
“설정보다 관례(Convention over Configuration)”의 원칙을 따르고,
개발자가 가능한 한 빠르게 애플리케이션을 실행할 수 있도록 설계되어 있다.
start.spring.io 를 이용하면 기본적인 프로젝트 구조를 자동으로 생성할 수 있고,
또는 “Getting Started Building a RESTful Web Service” 같은 ‘Getting Started’ 가이드를
따라가도 된다.
이 가이드들은 이해하기 쉽고, 특정 작업(Task)에 초점을 맞춘 실습형 문서로 구성되어 있으며,
대부분 Spring Boot를 기반으로 작성되어 있다.
또한 이 가이드들은 Spring 생태계 내의 다른 프로젝트들, 예를 들어 Spring Data, Spring Security,
Spring Cloud 등을 활용해 특정 문제를 해결할 때 고려할 수 있는 다양한 접근 방식을 함께 소개한다.