Spring/Spring 이야기

프레임워크에 대한 이야기

seungdols 2015. 8. 14. 01:25


먼저 이 이야기를 해보자. Spring Framework에서 프레임워크라는 것은 뭘까?


인터넷에서 프레임워크가 뭔지 검색하면 이런 말을 볼 수 있다.


"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔

일련의 협엽화된 형태로 클래스들을 제공하는 것"

- 랄프 존슨


라이브러리는 무엇인가?

내가 이해하는 라이브러리는 '사람들이 자주 사용하고자 하는 함수(기능) 또는

특수한 기능을 편리하게 사용하고자 만든 코드 집합"이라고 할 수 있을 것 같다.


그럼 프레임워크는 도대체 무엇인가?


"라이브러리와 달리 어플리케이션(프로그램)의 틀(Frame)과 구조와

함께 개발자가 작성한 코드를 제어하는 것이 프레임워크다."라고 말 할 수 있다고 한다.




위의 말은 다시 그래서 뭐가 다른데? 라고 할 수 있다.


라이브러리와 프레임워크의 차이점'설계'의 개념이 포함되느냐 아니냐의 견해로 볼 수 있다.


우선 라이브러리는 '설계'의 개념이 전혀 없다. 그저 코드만 가득하다.


프레임워크의 경우 '설계'의 개념이 들어가 있다. 내포하고 있다는 말은 프레임워크를 개발자 그룹에서


'이러한 방향으로 개발하는 것이 좋을 겁니다.' 왜냐하면~ '그걸 위해서 이렇게 설계를 해두었거든요.'라고 말이다.


어찌하든지 코드가 들어가 있는 것은 같으나, 추구하는 방향성이 완전 다르다.


라이브러리는 이 코드를 통해 생산성의 목표를 누리는것이다.


프레임워크는 이 코드 집합을 통해 네가 확장해서 다른 무언가를 만들 수 있게 '환경'을 제시해주는 것이다.


즉, 프레임워크는 '너는 우리가 기초로 한 이것 위에서 동작 할 어플리케이션 기능을 구현하렴!'과 같다.


여기서 말하는 '이것'이 바로 프레임워크다.


스프링에 입문하고자 하면 위 사진과 같은 컨테이너를 이해해야 한다.


컨테이너 무엇인가?


현실에서는 ?사람이 살기도? 아니...그 저...


물건을 저장하는 용도이다.


그럼 스프링에서는? 똑같다.


저장한다. 그런데 무엇을? ??? ?


그리고 추가적으로 기능을 가지고 있다.


어떤 기능?





하나하나 설명 하자면 진도를 나갈 수 없다.


그러나, 난 천천히 내가 이해한 대로...(이해한 만큼) 설명 하고자 한다.


담는 용도 + 특수한 기능 = 컨테이너라고 생각해보자.


사실, 이제부터 컨테이너에 대해 설명 할 예정이다.


컨테이너는 개발자가 작성한 코드에 대한 권한을 위임 받는 존재이다.


이 말을 IoC라고 한다.


뭐라고?


Ioc(Inversion of Control)라고..


정신이 혼미하니 넘어가자.


즉, 컨테이너는 '권한'을 지니고 있다.


권한이 있으면, 어떤한가? 기능이 있지 않은가?


많은 기능 중 기본은 바로 객체의 생성과 소멸을 관리한다.


여기서 잠깐 과거이야기..





사실 Spring의 역사는 EJB 시절로 가야한다.

그 당시 웹 엔터프라이즈 개발은 EJB 객체와 EJB container로 개발 되었다.


그러나 숨 막히는 상속 구조, 거대한 EJB 객체 심지어 개발 하기 힘듬 힘듬 사태..

(전 모르는 시절 - 정신적으로 태어난 시기)


그 당시 Non-EJB의 목소리가 생긴다.


그래서 Non-EJB를 해보았으나, 컨테이너의 기능을 개발자 스스로 다 작성하자니..등이 휘더란다...


그래서 선배 개발자 형 누나들이 고심을 한다.


그때 혜성처럼 등장한 한 사람.


로드 존슨


늬 아부지 뭐하시노?


사실 로드 존슨이 바로 Spring Framework의 아버지이다.

'J2EE Development without EJB'의 창시자

2002년경 Expert One-on-One J2EE Design and Developement의 저서를 출판하며

책에 요런 것도 함 생각 해볼 수 있지 않겠니? 라며 작성한 Code

그 코드가 Spring 프레임워크의 시초이다.


다시 현실로 돌아와서 자 복습. 

(복습을 잘해야 A+ 받는다.........) 난 아냐..


  • EJB 아키텍쳐 기반인 경우 개발 과정이 복잡하며, 테스트의 어려움이 존재했으나, EJB Container에서 제공하는 기능이 강력한 장점.

  • Non EJB 아키텍쳐 기반인 경우 개발 속도가 빠르고 테스트가 용이하지만, 개발자가 직접 EJB Container 기능을 만들어야 하는 단점.

  • Spring의 경우에는 EJB Non EJB의 장점만을 취하여 POJO 객체를 개발자가 작성 하고, Spring Container에서 POJO 객체의 Life Cycle 관리를 하게 되어 LightWeight Container를 구현함.

자 스프링은 왜 나왔냐면 !!


일단 J2EE 개발 아 현기증 날거 같으니... 그냥


웹 엔터프라이즈 개발이라고 하자. 개발 할 때 , EJB로 하자니 어렵고..(난 못한다. 구조만 봐도 이슬3병 마신 것...같..)


그렇다고 EJB 기반을 버리자니 Container 기능이 너무 막강함...


EJB 구조는..핵심적으로 겁나게 무거워...


이 트레이드 오프 하기도 어려운 상황에서 스프링의 아부지 '로드 존슨'의 활약으로

가볍게!

순수하게!

컨테이너는 포함하게!?(포함하고)

조심스레 건넨 코드가 바로


모든 개발자가



하는 상황을 만들었다.

그랬다.


그래서 스프링이 여기까지 왔다.


그리고 EJB 객체를 왜 쓰냐 이 못난 것들아 꾸짖으며 로드 형아가  순수 자바 객체 써 자슥들아!


하며 POJO라 명명하셨다.


JOJO 아니다. 조조는 이미 죽.


POJO란 Plane Old Java Object라고 한다. 뭐지? 하겠지만, 별거 없다.


초기에 특정 Framework에 종속된 EJB Interface를 상속 받지 않은 경량의 Java Object를 지칭한다.


POJO의 대표적인 예로 JavaBean을 들 수 있으며, JavaBean은 기본 생성자/get&set 메소드를


가진 Serializable한 객체를 말한다.


최근에는 종속 되지 않는 Java Object를 통칭한다.


즉, 어느편에도 속하지 않은 깍두기 같은 순수한 결정체 객체를 말한다.




어느 정도 공부를 했다. 그러니 스프링을 공부해보자!


자 이제 스프링은 뭐 하는 놈인가? 뱃속부터 열어보자.

(윽)


뭔가 하고 읽어 보기만 하자.


Spring Core

- 스프링의 핵심으로 기능과 설정을 분리하기 위한 IoC 기능이 구현 된 BeanFactory(IoC를 담당하는 컨테이너)를 제공한다. BeanFactory를 기반으로 Bean 클래스들을 제어 할 수 있다.

Spring Context

- Core 패키지와 마찬가지로 스프링의 기본 기능이다. 스프링 기반에서 구현 된 기능 객체(Bean)들에 대한 접근 방법을 제공한다. 또한 JNDI, EJB등을 위한 Adaptor들을 포함 하고 있다.

Spring DAO

- DAO 패키지는 JDBC에 대한 추상화 계층으로 복잡한 JDBC 코딩이나 예외 처리를 없애준다. 추가적으로 Spring DAO를 이용할 경우 보다 적은 코드와 쉬운 접근법으로 DAO 개발이 가능하다. 또한 트랜잭션 관리 기능도 제공한다.

Spring ORM

- 객체/관계 맵핑을 위한 JPA, Hibernate, MyBatis등과 통합을 위한 패키지이다. Spring ORM을 이용 할 경우 Persistence-framework와 쉽게 통합이 가능하다.

Spring AOP

- Spring Framework관점 지향 프로그래밍을 지원하도록 하는 패키지 이며, AOP 툴과 호환도 지원한다.

Spring Web

- 일반적인 웹 어플리케이션 개발에 필요한 Web Application Context Multipart Request등의 기능을 지원한다. 웹워크, 스트럿츠와 같은 프레임워크와 통합하기 위한 기능도 포함 된다.


아무튼 Web 개발에 필요한 잡동사니가 있다는 뜻

Spring Web MVC

- 기본적으로 MVC를 지원하기 위한 기능이며, 스트럿츠와 같은 일반적인 Web Application Framework의 기능을 스프링 버전으로 구현하고 있는 패키지이다. 독립적으로 Web UI Layer Model-View-Controller를 지원하기 위한 기능이다.


MVC? 뭐하는 자..ㅅ..

아니.. 뭐 하는 분이시니...?

일단, 나중에 찾아 뵙자


그냥 뭔가 하고, 읽어보기만 하자.

Bean Factory

  • IoC를 담당하는 컨테이너

ApplicationContext

  • BeanFoctory Enterprise application 개발에 필요한 여러 container기능을 를 추가 한 것.

  • Spring application은 하나 이상의 Application context를 가짐.



왜냐하면, 내가 설명 해줄 수 없다....;;;


스프링 프레임워크는 오픈 소스다. 즉, 소스를 까볼 수 있다.


어디에 있는 고 하니.


https://github.com/spring-projects/spring-framework


그런데 아직 Java 실력도 쪼렙인지라 스프링 기능도 아직 잘 모른다. 천천히 가보자!


오늘은 여기까지만...


반응형