0. Spring-스프링 프레임워크란?

Dev StoryTeller·2020년 12월 19일
0

들어가기 전에 우선 Spring이란 뭔지, 어떤 기능들이 있는지 먼저 알아보고 가자.


1. 프레임워크란?

간단히 말해서 "개발을 편하고 안정적으로 하기위해 만든 틀"이다.

예를 들어, 우리가 일체 스프링을 사용할 수 없다고 하자.
그럼 무슨 일이 일어날까?

여전히 비효율적인 서블릿 객체를 작성해야 할 것이고,
복잡한 기능을 구현하기 위해 이런저런 코드를 갖다써서,
나중에는 어디에 뭘 썼는지 몰라 꼬이게 될 것이다.

여기서 프레임워크는 안정적인 하나의 틀을 제공한다.
필요한건 여기 다 있어!라며 라이브러리를 제공하고,
복잡하게 할거 없이 이거만 해!라며 향상된 API도 제공한다.

즉, 직접 이것저것 찾아가며 사용하는 것이 아닌,
사용자가 내부에서 모든 걸 해결할 수 있도록 제공하는 틀,
그것이 프레임워크라는 것이다

프레임워크란,
내부에서 모든 걸 해결할 수 있도록 제공하는 틀!


2. 스프링 프레임워크

스프링도 프레임워크이기에, 개발하기 좋은 틀을 제공한다.
다만 스프링 프레임워크는 가벼우면서도, 대규모 개발을 지원하는 엄청난 프레임워크라고 할 수 있다.
(가벼운데 기업급 개발을 할 수 있다는건 정말 대단한 것이다 ㅇㅁㅇ!)
(가볍다는 건 아래에도 나오지만, EJB에서 POJO로 바뀌면서 사용하는 클래스가 구조적으로 간결해졌다는 것을 의미한다!!)

또한 스프링도 프레임워크인 만큼, 다양한 라이브러리(모듈)을 제공한다.
그 구조는 다음과 같다.
(출처 : spring.io)

정말 어마어마한 구조다...ㅇㅁㅇ
솔직히 스프링의 장점이라하면, 저 하나하나가 모두 장점이다.
따라서 이 1편에 모두 담는 것은 불가능하다.
일단 대표적인 3가지만 알아보자. 나머지는 차근차근 알아볼 것이다 : )


3. 특징 1 - POJO

Plain Old Java Object의 약자로 "순수한 자바 객체"를 말하며,
어떠한 상속이나 구현도 없는 속성과 기능만 있는 객체를 말한다.

class POJO {
   // 속성들
   private int id;
   private String name;
   private String description;
   
   // 기능들
   setId()/getId();
   setName()/getName();
   setDescription()/getDescription();
   . . .
   }

(물론 현대엔 워낙 기능이 복잡해져서 POJO의 의미가 조금 변하긴 했다. 위와 동일하진 않다.)

이전의 자바는 EJB를 거치면서 그 본질을 잃고 점점 조잡해졌다.
무겁기도 하고 특정 환경에 종속되는 등 자바다움을 잃어가기 시작했다.

그래서 "원래의 자바는 이렇지 않았어! 초심을 잃지마!"라며,
기존의 자바 객체에 간드러지게 이름을 붙였는데, 그것이 바로 POJO인 것이다!!

(정말이다ㅋㅋㅋ 용어를 만든 마틴 파울러는 다음과 같이 말했다고 한다.)

“ 우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고. ”
— 마틴 파울러

무튼 스프링은 이러한 POJO를 지원하는 프레임워크이다.
최대한 POJO로 개발할 수 있도록 적극 지원한다.


3. 특징 2 - IoC/DI 컨테이너

스프링하면 누구나 들어봤을 대표격인 특징이다.
각각 제어의 역전, 의존성 주입이라는 뜻인데, 대표격인 만큼 우리가 가장 많이 쓰는 기능이다.
다음 편에서 자세히 알아볼 것이다.


3. 특징 3 - AOP

Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍을 말한다.

우리가 늘 객체지향 객체지향 하지만, 실상 프로그램은 그렇지 않다.
프로그램은 늘 기능별로 돌아간다.

인터넷을 예로 들면 블로그 기능, 카페 기능, 쇼핑 기능 등의 기능들로 돌아간다.
다만 객체지향으로 개발하는 것이 편하기 때문이다.

하지만 프로그램을 개발할 때 기능의 관점에서 본다면,
좀 더 편하게 개발을 할 수 있다.

기능의 관점에서 핵심적인 것과 부가적인 것을 나눠서 생각해보는 것, 그것이 AOP이다.

이것도 추후 Aspect와 함께 알아보도록 하겠다.


4. 결론

이외에도 JDBC, ORM, Web, Servlet 등 수 없이 많은 기능들이 있다.
모두 다 다뤄보기엔 필자가 모르는 것들도 있다.
(JMS라던가, OXM이라던가, Portlet은 아직 뭔지 모른다.)

하지만 대규모 시리즈로, 나머지는 한번 차근차근 글을 작성해 보려고 한다.
이제 JDBC를 작성중인데 과연 언제 끝날지 모르겠다;;

다음 편에서는 IoC/DI에 대해 간단히 알아보도록 하자!

profile
개발을 이야기하는 개발자입니다.

0개의 댓글