들어가기 전에 우선 Spring이란 뭔지, 어떤 기능들이 있는지 먼저 알아보고 가자.
간단히 말해서 "개발을 편하고 안정적으로 하기위해 만든 틀"이다.
예를 들어, 우리가 일체 스프링을 사용할 수 없다고 하자.
그럼 무슨 일이 일어날까?
여전히 비효율적인 서블릿 객체를 작성해야 할 것이고,
복잡한 기능을 구현하기 위해 이런저런 코드를 갖다써서,
나중에는 어디에 뭘 썼는지 몰라 꼬이게 될 것이다.
여기서 프레임워크는 안정적인 하나의 틀을 제공한다.
필요한건 여기 다 있어!라며 라이브러리를 제공하고,
복잡하게 할거 없이 이거만 해!라며 향상된 API도 제공한다.
즉, 직접 이것저것 찾아가며 사용하는 것이 아닌,
사용자가 내부에서 모든 걸 해결할 수 있도록 제공하는 틀,
그것이 프레임워크라는 것이다
프레임워크란,
내부에서 모든 걸 해결할 수 있도록 제공하는 틀!
스프링도 프레임워크이기에, 개발하기 좋은 틀을 제공한다.
다만 스프링 프레임워크는 가벼우면서도, 대규모 개발을 지원하는 엄청난 프레임워크라고 할 수 있다.
(가벼운데 기업급 개발을 할 수 있다는건 정말 대단한 것이다 ㅇㅁㅇ!)
(가볍다는 건 아래에도 나오지만, EJB에서 POJO로 바뀌면서 사용하는 클래스가 구조적으로 간결해졌다는 것을 의미한다!!)
또한 스프링도 프레임워크인 만큼, 다양한 라이브러리(모듈)을 제공한다.
그 구조는 다음과 같다.
(출처 : spring.io)
정말 어마어마한 구조다...ㅇㅁㅇ
솔직히 스프링의 장점이라하면, 저 하나하나가 모두 장점이다.
따라서 이 1편에 모두 담는 것은 불가능하다.
일단 대표적인 3가지만 알아보자. 나머지는 차근차근 알아볼 것이다 : )
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로 개발할 수 있도록 적극 지원한다.
스프링하면 누구나 들어봤을 대표격인 특징이다.
각각 제어의 역전, 의존성 주입이라는 뜻인데, 대표격인 만큼 우리가 가장 많이 쓰는 기능이다.
다음 편에서 자세히 알아볼 것이다.
Aspect Oriented Programming의 약자로, 관점 지향 프로그래밍을 말한다.
우리가 늘 객체지향 객체지향 하지만, 실상 프로그램은 그렇지 않다.
프로그램은 늘 기능별로 돌아간다.
인터넷을 예로 들면 블로그 기능, 카페 기능, 쇼핑 기능 등의 기능들로 돌아간다.
다만 객체지향으로 개발하는 것이 편하기 때문이다.
하지만 프로그램을 개발할 때 기능의 관점에서 본다면,
좀 더 편하게 개발을 할 수 있다.
기능의 관점에서 핵심적인 것과 부가적인 것을 나눠서 생각해보는 것, 그것이 AOP이다.
이것도 추후 Aspect와 함께 알아보도록 하겠다.
이외에도 JDBC, ORM, Web, Servlet 등 수 없이 많은 기능들이 있다.
모두 다 다뤄보기엔 필자가 모르는 것들도 있다.
(JMS라던가, OXM이라던가, Portlet은 아직 뭔지 모른다.)
하지만 대규모 시리즈로, 나머지는 한번 차근차근 글을 작성해 보려고 한다.
이제 JDBC를 작성중인데 과연 언제 끝날지 모르겠다;;
다음 편에서는 IoC/DI에 대해 간단히 알아보도록 하자!