본문 바로가기

backend/Spring

스프링 소개(introduction)-정리

스프링 doc을 보면 introduction부분의 개념을 정리해보았다.

1. 스프링 프레임워크 소개

스프링 프레임워크는 자바 애플리케이션 개발을 위한 포괄적인 인프라스트럭쳐를 제공하는 자바 플랫폼이다. 스프링은 당신이 애플리케이션에 집중할 수 있도록 인프라스트럭쳐를 다룬다.

스프링을 사용하면 “plain old Java objects”(POJOs)로 어플리케이션을 만들고 엔터프라이즈 서비스를 비침투적으로 POJO에 적용할 수 있다. 이 능력은 Java SE 프로그래밍에 적용되고 전제 혹은 부분적으로 Java EE에 적용된다.

Spring Framework 특징

  • 크기와 부하의 측면에서 경량
  • 제어 역행(IoC)를 통하여 어플리케이션의 느슨한 결합을 도모
  • 관점지향(AOP) 프로그래밍을 위한 풍부한 지원을 함.
  • 어플리케이션 객체의 생명주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 할 수 있음.
  • 간단한 컴포넌트로 복잡한 어플리케이션을 구성하고 설정할 수 있음.

properties

  • Plain Object Java Object : 기본적으로 사용자가 만들어낸 객체를 의미함. 스프링은 사용자가 만들 객체들에 대해서도 라이프사이클 관리를 위임해서 수행하며, 이들의 조합으로 어플리케이션을 만들 수 있음.
  • AOP : 관점지향형 프로그램으로 사용자들이 트랜젝션 처리/로깅/예외 처리들의 로직을 공통으로 처리할 수 있는 기능을 지원함. 해당 기능을 잘 사용하면 비지니스로직와 기타 공통모듈이 섞이는 것을 방지하여 비지니스 로직에 집중할 수 있도록 합니다.
  • PSA(Portable Service Abstraction) : 스프링은 다른 여러 모듈을 사용함에 있어서 별도의 추상화 레이어를 제공합니다. 예를 들어 JPA를 사용할 때에서 Spring JPA를 사용하여 추상화 하므로 실제 구현에 있어서 Hibernate를 사용하든 EclipseLink를 사용하든 사용자는 이 모듈의 의존 없이 프로그램에 집중할 수 있습니다.

https://opentutorials.org/course/2428/13594

1.1 의존성 주입(Dependency Injection)과 제어의 역전(Inversion of Control)

The Spring Framework Inversion of Control (IoC) component addresses this concern by providing a formalized means of composing disparate components into a fully working application ready for use. The Spring Framework codifies formalized design patterns as first-class objects that you can integrate into your own application(s). Numerous organizations and institutions use the Spring Framework in this manner to engineer robust, maintainable applications.

번역

스프링 프레임워크 제어의 역전 (IoC) 컴포넌트는 이러한 관심사에 접근한다. 즉, 서로 다른 컴포넌트들을 사용할 준비가 된 완전히 동작하는 애플리케이션을 구성하는 형식적인 의미를 제공한다.스프링 프레임워크는 자신의 어플리케이션으로 통합할 수 있는 퍼스트 클래스 객체를 형식화된 디자인 패턴으로 만들었다.수많은 조직과 협회는 신뢰할 수 있고 유지보수 가능한 어플리케이션을 만들려고 이 방법으로 스프링 프레임워크를 사용한다.

properties

IOC==DI??

  • Ioc 개념 “제어의 어떤 관점이 역전되었는가?” 마틴 파울러(Martin Fowler)는 2004년 자신의 사이트에서 제어의 역전(IoC)에 대한 의견을 말했다. 파울러는 원리가 더 명확하게 드러나도록 이름을 의존성 주입(Dependency Injection)으로 바꾸어야 한다고 제한했다.

IoC와 DI를 더 알고 싶다면 http://martinfowler.com/articles/injection.html에 올라온 파울러의 글을 참고해라.

->As a result I think we need a more specific name for this pattern. Inversion of Control is too generic a term, and thus people find it confusing. As a result with a lot of discussion with various IoC advocates we settled on the name Dependency Injection. 

->결과적으로이 패턴에 대해 좀 더 구체적인 이름이 필요하다고 생각합니다. Inversion of Control은 너무 일반적인 용어이므로 사람들은 혼란 스럽습니다. 다양한 IoC 옹호자들과 많은 토론을 한 결과 Dependency Injection 이라는 이름을 정했습니다 .

Ioc == DI 이름이 다르지만 같은 개념을 의미한다.

참고: spring 3.x documents
https://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/overview.html#overview-dependency-injection(원문)
https://blog.outsider.ne.kr/729(한글번역)