Spring은 뭘까?

홍산의·2022년 9월 22일
0

기초지식

목록 보기
2/2

스프링의 탄생 배경

: 스프링이 탄생하기 전에는 EJB(Enterprise Java Bean)을 사용하였다.
EJB는 기업 환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다
-> 애플리케이션의 업무 로직을 가지고있는 서버 애플리케이션
근데 너무 무겁고... 복잡하다...
더..간결하고...가볍게 어떻게 안되나...? 퇴근하고싶다...

그래서 웹 개발자들의 봄이 왔다는 슬로건으로 Spring이 등장하게 됬다!

Spring은 뭘까?

: 자바의 웹 프레임 워크로 자바 언어를 기반으로 사용한다. 자바로 다양한 어플리케이션을 만들기위한 프로그래밍 틀 이라고 할 수 있다.
: 옛날과 비교했을 때 자바의 활용도가 높아졌고 따라서 프로젝트의 규모 또한 커졌다. 자바를 이용한 기술은 JSP, MyBatis, JPA 등등 여러가지가 있는데 이 기술들을 더 편하게 사용하기 위해서 Spring 이 만들어진 것 이다.

Spring의 사용목적

: 프로젝트를 진행하다보면 아무리 분업을 해도 결국 중복되는 코드가 있다. Spring은 이런 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해 준다.
: 스프링을 사용하다보면 다른 사람의 코드를 참조하기 편하다. 이 말은 오픈소스를 더 효율적으로 가져다 쓰기 좋은 구조라는 것이다.

=> 스프링이란 자바기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다!

프레임워크(Framework)는 뭐야?

: 프레임워크는 간단히 말해서 '자주쓰일만한 기능들을 한데 모아놓은 유틸(클래스)의 모음' 이다.

: 설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 수정, 확장하는데 필요한 라이브러리 이 두가지 요소가 통합되어 제공되는 형태이다.

: 사용자가 이 기반 코드를 이용해 일정 수준 이상의 품질을 보장받는 코드를, 비교적 빠른 시간에 완성 및 유지 보수할 수 있는 환경을 제공해주는 솔루션이다.

=> 프레임 워크는 기본적인 설계나 필요한 라이브러리는 알아서 제공해줄꺼니깐 개발자는 만들고 싶은 기능을 구현하는데 집중해라는 취지에서 만들어진 것이다.

: 개발자가 구현하고자 하는 기능을 쉽게 제공해줄수 있다는 점에서 프레임 워크는 라이브러리와 비슷한 면이 있다.

프레임 워크와 라이브러리의 차이점

  • 라이브러리는 개발자가 프로그램을 짜다가 라이브러리가 필요한 순간에 인지하고 라이브러리를 직접 추가해야겠다는 생각이 들었을때 가져다 쓰는 것이다. 라이브러리는 프로그램 기능 구현에만 도움을 줄 수 있다.

  • 하지만 프레임 워크는 필요한 라이브러리와 기능 구현에 필요한 설계도 틀을 함께 제공해준다.

  • 설계도 틀이란 확장 가능한 기반코드, 재사용 가능한 형태의 협업화된 클래스와 같은 뜻이다. 사용자가 세세하게 신경쓰지 않아도 수비고 빠르게 기능을 확장하거나 유지보수할 수 있게 해주는 구조에 대한 가이드라인이라 할 수 있다. 즉, 기반이 되는 부모 클래스라 생각하면된다.

  • 개발자가 동일한 라이브러리를 쓰는 동일한 기능의 프로그램을 사용할때, 프레임 워크를 사용하면 클래스 관계 구조나, 데이터를 처리하는 절차, 프로그램이 화면에 그려지는 방식 등 일부 틀을 함께 제공 받을 수 있다. 즉, 프레임 워크는 라이브러리+설계도가 함께 온다.

Spring의 특징

1. IoC(Inversion of Control, 제어 반전)

  • 개발자는 JAVA 코딩시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.

  • IoC란 인스턴스 (객체)의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스피링(컨테이너)가 대신 해주는 것을 말한다.

  • 다들 겪어봤겠지만 자신을 믿어선 안된다ㅋㅋ.. 분명 틀린 코드가 없다고 생각했는데 알고보면 항상 오타라던가 이상한 곳에 코드가 있더라.. IoC는 개발자가 실수할 수 있는 생명주기 관리를 대신 해준다.

  • 프로젝트의 규모가 커질수록 객체와 자원을 이용하는 방법이 더 복잡해지고 어디서 코드가 꼬일지 모르는 것을 Spring의 IoC는 자동으로 관리해준다.

  • 즉, 제어권이 개발자가 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어하는 것이다.

2. DI(Dependency Injection, 의존성 주입)

  • 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식이다.

  • 코드 재사용을 높여 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다.

  • 쉽게 말하자면 게임 캐릭터라는 하나의 객체가 존재하는데, 그 객체를 더 잘 이용하기 위해서 무기, 방패 등 아이템을 가져와 결합시키는 것이다. 이 객체는 무기와 방패를 뺐다 꼈다 자유자재로 할 수 있으며 아이템을 갈아끼우는데 어떤 상황에 구애받지도 않는다.

  • JAVA에서 데이터를 저장하고 가져오는 기능을 외부의 Oracle Database를 사용할 수도 있고, JDBC, iBatis, JPA 등 다른 프레임 워크를 이용해 짤 수도 있다. 이때 Spring을 이용하면 그때마다 필요한 부분을 뺐다 꼈다 하면서 적절한 상황에 필요한 기능을 해낼 수 있다.

3. AOP(Aspect Object Programming, 관점 지향 프로그래밍)

  • 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리 할 수 있다.

  • 각각의 클래스가 있다고 가정하자. 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많다. 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않다. 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋다.

  • 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.

4. POJO(Plain Old Java Object) 방식

  • POJO는 Java EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.

  • 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.

  • 즉, getter/setter를 가진 단순한 자바 오브젝트를 말한다.

그럼 스프링 프레임워크랑 스프링 부트랑 뭐가달라?

첫번째 차이점, 톰캣의 구성

스프링프레임워크는 톰캣을 따로 설치하고 관리해주어야하지만 스프링부트는 내장 톰캣을 사용한다!

두번째 차이점, dependency

스프링 프레임워크는 각각의 dependency들의 호환되는 버전을 일일히 맞춰주어야 하고, 하나의 버전을 바꾸면 다른 dependenc에 영향을 미칠 수 있어 버젼관리에 어려움이 많았다.
스프링부트는 starter가 대부분의 dependency를 관리하기 때문에 번거로움이 줄어들었다.

세번째 차이점, 손쉬운 배포

스프링 부트의 경우 jar 파일을 이용해 자바 옵션만으로 손쉬운 배포를 할 수 있다!

네번째 차이점, configuration

스프링 프레임워크는 XML설정을 해야하고 그 양이 굉장히 많았다.
스프링 부트는 프로퍼티, YML파일로 설정하고 굉장히 간단하게 설정이 가능하다!

Reperence:
Spring이란?
스프링프레임워크와 스프링부트의 차이점
Spring 과 Spring Boot 의 차이점은?

profile
백엔드 개발자 지망생!

0개의 댓글