"Spring"이란 무엇인가??

이도원·2022년 10월 4일
5
post-thumbnail

🍃 Spring이란??

초기의 기업들은 JAVA의 표준 기술로 EJB(Enterprise Java Bean)을 사용했다. EJB는 트랜잭션, 분산기술, Entity Bean(ORM)등의 기술을 지원하여 많은 기업들이 사용했다. 하지만 EJB는 비싸고, 어렵고, 복잡하고, 느린 단점이 있었기 때문에 단점이 너무 심하다고 느끼게 되어 초기의 순수자바(POJO)를 사용하자는 이야기 까지 나오게 됬다.

2002년 Rod Johnson은 EJB의 문제점을 지적한 책을 출간했다.

▲Rod Johnson
그 책에는 EJB 없이도 고품질의 애플리케이션을 개발할 수 있다는 내용과 예제 코드를 선보였고, 그 코드에 Spring의 핵심이 되는 개념이 있었다. (POJO, IoC, DI 등.)
이 책이 유명해지자 개발자들이 책의 예제코드를 프로젝트에 사용하기 시작했고, Juergen Hoeller와 Yann Caroff가 Road Johnson에게 오픈 소스 프로젝트를 제안했다.
여기서 J2EE(EJB)를 겨울로 빗대어 Spring이란 이름의 프레임워크가 탄생했다.

✔️ Spring Release

버전공개일주요 특징
1.x2004.03. ~DlxAOP 컨테이너의 시작, Bean 정의 파일 시대의 개막
1.1 ~ 1.2에 거쳐 Bean 정의 파일의 간략화
2.x2006.10. ~Bean 정의 파일이 DTD에서 XML 스키마 형식으로 변경(독자 스키마 사용 가능)
어노테이션의 등장
JPA와 스크립트 언어 지원과 다기능화에 돌입
2.5에서 JAVA 1.4와 JUnit 4 지원, 어노테이션 강화
3.x2009.12. ~어노테이션은 거듭 강화됬지만, 여전히 SI를 중심으로 Bean 정의 파일이 선호됨
클라우드 시대에 대응, Spring 캐시 기능 등장
JAVA 7 대응(JAVA 1.5 이상, JUnit 4.7), Hibernate 4, Servlet 3
4.x2014.04. ~JAVA 8 지원, JAVA 6이상 웹 컴포넌트(Web Component)의 강화(RestController, WebSocet 등)
Spring Boot의 등장
5.x2017.09. ~JAVA 9 대응
리엑티브 프로그래밍(WebFlux) 제공

🔳 프레임워크란??

프레임워크는 뼈대나 기반구조를 뜻하고, 제어의 역전 개념이 적용된 대표적인 기술이다.  
소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있으며, 완성된 애플리케이션이 아닌 프로그래머가 완성시키는 작업을 해야한다. 
객체 지향 개발을 하게 되면서 통합성, 일관성의 부족이 발생되는 문제를 해결할 방법중 하나라고 할 수 있다.

✨ 프레임워크의 특징

  • 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되어 있습니다.
    - 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의합니다.
  • 컴포넌트들은 재사용이 가능합니다.  
  • 높은 수준에서 패턴들을 조작화 할 수 있습니다.

📖 라이브러리란??

라이브러리는 단순 활용 가능한 도구들의 집합을 말한다.
즉, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있다.

여기서 프레임워크와 라이브러리의 차이점은 이렇게 볼 수 있다.
프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣는다. 반면에 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있다.
다시 말해, 라이브러리는 라이브러리를 가져다가 사용하고 호출하는 측에 전적으로 주도성이 있으며 프레임워크는 그 틀안에 이미 제어 흐름에 대한 주도성이 내재(내포)하고 있습니다.

👐 Spring의 특징

Spring 프레임워크는 대략적으로 6가지의 특성이 있는데 이를 살펴보겠다.

  • 경량 컨테이너
    • 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 Spring으로부터 필요한 객체를 얻어올 수 있다.
  • POJO(Plain Old Java Object)
    • 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.
    • gettet/setter를 가진 단순 자바 오브젝트로 정의를 하고 있다.
  • AOP(Aspect Oriented Programming)
    • 관점 지향 프로그램을 뜻한다. 비즈니스 로직은 아니지만 보안, 로그, 트랜잭션과 같이 반드시 처리가 필요한 부분을 횡단 관심사라고 한다. 스프링에서는 이러한 관심사를 비즈니스 로직과 분리하여 중복된 코드를 줄이고 개발자가 비즈니스 로직에 집중하도록 만들어 준다.
  • IoC(Inversion of Control)
    • Spring은 그 자체가 구조를 설계할 수 있어서 개발자가 부품을 만들어 조립하는 형태의 개발이 가능하다. 이렇게 조립된 코드의 최종 호출은 개발자가 결정하는 것이 아니라 Spring 프레임워크 내부에서 이루어지는데, 이것을 제어의 역행(IoC)라고 한다.
  • DI(Dependency Injection)
    • 프로그램에서 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의 되는 방식이다.
    • 코드 간의 재사용을 높이고, 소스코드를 다양한 곳에 사용하며 모듈 간의 결합도를 낮출 수 있다.
  • WAS(Web Application Server)에 독립적인 개발환경
    • EJB가 동작하려면 고가의 느리고 무거운 자바 서버가 필요했으나, Spring은 동작하기 위해서는 단순한 Tomcat, Jetty에서도 완벽하게 동작한다.

🪢 Spring 프레임워크의 구조

▲Spring 프레임워크의 구조

Spring Core

Spring Container을 의미한다. core라는 말 그대로 Container는 Spring Framework의 핵심이며 그중 핵심은 Bean Factory Container이다. 그 이유는 바로 Bean Factory는 IoC패턴을 적용하여 객체 구성 부터 의존성 처리까지 모든 일을 처리하는 역할을 하고 있기 때문이다.

Spring Context

Spring context는 Spring Framework의 context 정보들을 제공하는 설정 파일이다. Spring Context에는 JNDI, EJB, Validation, Scheduiling, Internaliztaion 등 엔터프라이즈 서비스들을 포함하고 있다.

Spring AOP

이 부분은 위에서 설명했기 때문에 넘어가도록 하겠다.

Spring DAO

DAO란 Data Access Object의 약자로 Database Data에 접근하는 객체이다. Spring JDBC DAO는 추상 레이어를 지원함으로써 코딩이나 예외처리 하는 부분을 간편화 시켜 일관된 방법으로 코드를 작성할 수 있게 도와준다.

Spring ORM

ORM이란 Object Relational Mapping의 약자로 간단하게 객체와의 관계 설정을 하는 것이다. Spring에서는 Ibatis, Hibernate, JDO, MyBatis 등 인기있는 객체 관계형 도구를 사용 할 수 있도록 지원한다.

Spring Web

Spirng에서 Web context module은 Application module에 내장되어 있고 Web기반의 응용프로그램에 대한 Context를 제공하여 일반적인 Web Application 개발에 필요한 기본적인 기능을 지원한다. 그로인해 Jakarta Structs 와의 통합을 지원하고 있다.

Spring MVC

Spring에서는 MVC에서는 Model2 구조로 Apllication을 만들 수 있도록 지원한다. MVC (Model-View-Controller) 프레임 워크는 웹 응용 프로그램을 작성하기위한 완전한 기능을 갖춘 MVC를 구현한다. MVC 프레임 워크는 전략 인터페이스를 통해 고급 구성 가능하며 JSP, Velocity, Tiles, iText 및 POI를 포함한 수많은 뷰 기술을 지원하고 있다.

여기까지 Spring에 대한 개념 정리를 하고 마무리하고자 한다.

참고 사이트

https://en.wikipedia.org/wiki/Rod_Johnson_(programmer)
▲Rod Johnson

https://webclub.tistory.com/458
▲프레임워크

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=youngchanmmm&logNo=220676023621
▲Spring 프레임워크 구조

profile
자바 풀스택 3년차 개발자 입니다. 부족한 부분은 많이 채워나가도록 하겠습니다.

1개의 댓글

comment-user-thumbnail
2022년 10월 13일

Thanks for sharing that...

UnitedHealthcare Login

답글 달기