2013년 4월 8일 월요일

[Spring] 스프링 프레임 워크

2주간 프로젝트를 마치고 이어서 스프링 프레임 워크에 대해 알아보자. 처음 공부하기는 상당히 어려운 부분이 많고 특히 혼자서 이해하기가 난해한 부분이 없지 않다. 그렇지만 스프링의 핵심기술 DI, AOP, MVC를 꼭 이해하도록 하자. 이를위해 우선 스프링에 대해 전반적으로 살펴보도록 하겠다. 그리고 조금씩 심화시켜나가면서 스프링에 대해 알아갈 것이다.

기존에는 JSP를 활용한 모델 1방식으로 프로젝트를 진행해보았다. 모델 1방식은 JSP와 Java Bean을 이용하여 웹 어플리케이션을 개발하는 방법을 말한다.
모델 1방식으로 개발하면 배우기가 쉬워 누구가 쉽게 만들 수 있고 때문에 개발 속도가 향상되는 장점이 있지만 큰 문제점은 JSP에서 너무 많은 코드들이 혼재되어 있고 따라서 JSP가 처리해야하는 일이 많아진다. 따라서 개발자는 유지보수의 어려움을 겪게되는 문제가 있다.

한번 만들어진 프로젝트는 오랜시간동안 서비스를 하기위해 유지보수가 필수이다. 이 유지보수를 어렵게 만든다는 점에서 개발을 위한 새로운 방법이 필요했다.

이러한 문제점 때문에 웹 어플리케이션이 복잡해지고 사용자 요구가 증가함에 따라 새로운 개발방식을 요구하게 되는데 그것이 현재 모델 2방식이다.


모델 2방식
어플리케이션을 Model - View - Controller로 분리하여 개발하는 방식을 말한다.
Model : 비즈니스 로직을 담당하며 Java Bean과의 연동을 통해 로직을 처리한다.
View : JSP로 Client에게 응답을 처리한다. 즉, 모델 1방식에서 가장 많은 역할을 해야했던 JSP는 오로지 요청에 대한 응답 페이지의 출력을 목적으로만 사용한다.
Controller : 서블릿을 이용하여 클라이언트의 요청을 받아 Model과 View사이에서 일의 흐름을 조정한다.

모델 2방식에서는 컨트롤러의 역할이 중요하다. 때문에 컨트롤러의 역할을 살펴보자면
1. 클라이언트의 요청을 받아 클라이언트가 보낸 데이터를 읽고 검사한다.
2. 모델에게 비즈니즈 로직을 처리해달라고 요청한다.
3. 모델의 처리 결과에 맞는 뷰에게 응답을 요청한다.

그렇다면 모델 2방식의 장단점에 대해 알아보자.
장점 : 비즈니스 로직과 프레젠테이션의 분리로 인해 어플리케이션이 명료해지며 유지보수와 확장이 용이하다. 따라서 디자이너와 개발자의 작업을 분리해 줄 수 있다.
단점 : 개발을 위한 설계로 인해 개발 기간이 늘어나고 MVC 구조에 대한 이해가 동반된다.

자 이제 왜 모델 2방식을 이용한 웹 어플리케이션이 필요한지 어느정도 감이 올 것이다. 스프링은 모델 2방식인 MVC구조에 대한 프레임워크를 제공하고 있으며 나아가 다양한 프레임워크와 연동을 지원하기 때문에 많은 개발자들이 배우고 있는 프레임워크이다.

그렇다면 프레임워크는 무엇이며 라이브러리와는 어떤 차이가 있을까?

라이브러리는 개발자가 원하는 목적을 위해 사용되는 API들의 묶음으로 개발자가 자신에게 필요한 것을 스스로 설정하면서 프로그램을 구현해나갈 수 있는 유용한 자료이다. 프레임 워크는 개발에 있어서 어느정도의 틀을 미리 제공하고 있다. 따라서 개발자가 처음부터 모든 것을 구현할 필요가 없다. 어느정도의 프로세스가 이미 정해져있다는 것이다.

개발자에게 있어서 프레임워크는 어떤 존재인지 생각해보자. 지금처럼 대규모의 프로젝트가 산적해있는 상황에서는 개발의 속도가 필요하다. 그렇기 때문에 하나하나씩 모든 것을 구현해 나가며 단독으로 프로젝트를 진행하는 것은 의미가 없다. 빠르게 많은 코드를 제작해 나가야 함에 있어서 프레임워크가 필수적이고 개발자마다 다른 코드 스타일을 적응해가면서 개발하는 것도 쉽지 않다. 하지만 이렇게 정해진 틀이 제공된다면 대규모 프로젝트를 진행하는데 도움이 될 것이라는 것은 당연하다.

현재 웹 어플리케이션 제작에 있어서 가장 많이 사용되는 프레임워크가 스프링이다.

스프링이란 오픈 소스 프레임워크로써 엔터프라이즈 어플리케이션 개발의 복잡성을 줄여주고 필요한 기능을 제공하기 위한 목적으로 만들어졌다. 특히 과거에 많이 사용되던 EJB의 복잡성과 느린 속도를 대처하기 위해 등장하였다.

스프링 장점
- 경향 컨테이너로써 객체의 라이프 사이클을 관리, JEE구현을 위한 다양한 API제공
- DI 지원, 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정
- AOP지원, 트랜잭션이나 로깅, 보안과 같은 공통으로 필요한 기능들을 분리해서 원하는 모듈에 적용
- POJO지원, 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아 기존에 작성한 코드를 그대로 사용
- JDBC를 위한 다양한 API지원
- Transaction 처리를 위한 일관된 방법제공
- 다양한 API와의 연동 지원

장점을 보면 DI나 AOP 등등 처음 보는 개념을 많을텐데 하나씩 알아가도록하자. 개발자를 위해서 제공되는 아주 좋은 기술이다!

댓글 없음:

댓글 쓰기