[Spring] 스프링 프레임워크 이해하기
스프링 프레임워크 및 MVC 패턴에 대해서 간단히 알아보겠습니다.
스프링 프레임워크란?
웹 애플리케이션 개발을 위한 다양한 프레임워크가 존재하지만 가장 많이 사용되고 있는 프레임워크를 하나 꼽자면 스프링 MVC 프레임워크를 들 수 있습니다. 스프링 프레임워크는 일반적인 사용자를 위한 웹 애플리케이션부터 기업 환경의 애플리케이션까지 다양한 범위에서 사용되는 프레임워크입니다. 또한 우리나라에서는 전자 정부 표준 프레임워크로 채택되면서 자바 개발자들이 알아야 할 사실상 표준이 되었습니다.
| 프로젝트 이름 | 설명 |
| 스프링 프레임워크 | 현대 자바 기반의 애플리케이션을 개발하는 데 기반이 되는 프레임워크. 스프링의 핵심은 애플리케이션의 기반을 제공함으로써 개발자들은 애플리케이션의 비즈니스 로직 개발에만 집중할 수 있게 하는 데 있습니다. |
| 스프링 부트 | 스프링 프레임워크를 기반으로 바로 실행가능한 애플리케이션을 쉽게 만들도록 도와줍니다. 대부분의 복잡한 스프링 관련 설정을 자동으로 처리하고 개발자는 최소한의 설정만 진행하면 됩니다. |
| 스프링 데이터 | 스프링 애플리케이션에서 다양한 데이터베이스, JPA 등의 데이터 접근 기술을 쉽게 사용할 수 있도록 도와준다. 스프링 데이터는 하나의 상위 프로젝트로 세부적으로는 데이터베이스 종류에 따라서 수많은 하위 프로젝트가 존재합니다. |
| 스프링 시큐리티 | 자바 애플리케이션에 인증 및 권한에 특화된 프레임워크. |
| 스프링 소셜 | 페이스북, 트위터, 링크드인과 같은 소셜 서비스 API와 쉽게 연동할 수 있게 도와줍니다. |
이 표는 스프링의 주요 프로제그를 보여 줍니다. 이 외에도 스프링 클라우드, 스프링 배치, 스프링 모바일 등 다양한 프로젝트가 있습니다. 스프링 홈페이지의 프로젝트 목록 페이지에서 살펴볼 수 있으니 한번쯤 둘러보기 바랍니다. 목록에 있는 스프링 프로젝트를 한번에 모두 알아야 할 필요는 없습니다. 스프링의 프로젝트는 하나의 모듈과 같기 때문에 애플리케이션에 필요한 것부터 시작해서 상황에 따라 하나씩 추가하면 됩니다.
MVC 패턴 및 스프림 MVC 알아보기
웹 애플리케이션의 아키텍처, 즉 구조를 이야기하면 빠지지 않는 것이 MVC 패턴입니다. MVC는 Model, View, Controller의 약자로 소프트웨어 디자인 패턴의 하나입니다. MVC패턴도 모델 1, 모델 2가 있지만 최근 웹 개발은 대부분 모델2를 사용합니다. 따라서 MVC라고 이야기하면 모델 2를 의미합니다. MVC 패턴을 사용하면 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있습니다. 서로 영향을 최소화하여 개발 및 변경이 쉬운 애플리케이션을 만들 수 있습니다. 즉, 화면과 데이터 처리를 분리해서 재사용이 가능하게 합니다.
MVC의 Model, View, Controller는 각각 다음과 같은 역할을 합니다.
| MVC | 역할 |
| Model | 애플리케이션의 정보, 즉 데이터를 의미합니다. |
| View | 사용자 인터페이스, 즉 사용자가 보고 사용하는 화면 등을 의마힙니다. |
| Controller | 모델과 뷰의 중계 역할을 합니다. 사용자의 요청을 파악하고 그에 맞는 결과를 사용자에게 돌려줍니다. |
스프링 웹 MVC의 구조
MVC 패턴으로 개발자와 디자이너의 분업이 가능해졌지만 각 컨트롤러에는 요청을 처리하기 위해 항상 필요한 코드도 포함되기 때문에 어쩔 수 없이 일부 코드가 중복되는 등의 문제가 있습니다. 이런 문제를 해결하기 위한 방식이 프론트 컨트롤러 방식입니다. 프론트 컨트롤러는 컨트롤러 앞에 존재하는 컨트롤러로 모든 흐름의 제어를 담당합니다. 스프링 역시 다른 웹 프레임워크와 마찬가지로 프론트 컨트롤러 패턴을 가집니다.
스프링 웹 MVC의 디스패처 서블릿은 다음과 같습니다. 스프링 공식 홈페이지에서 참조한 이미지입니다.

스프링 MVC에서는 디스패치 서블릿이 프론트 컨트롤러의 역할을 수행합니다. 여기서 중요한 단어 하나가 나오는데, delegate(위임)입니다. 전체 로직 중 일부를 컨트롤러에 위임하고 앞의 프론트 컨트롤러는 흐름의 제어를 담당합니다. 또한 컨트롤러에서는 결괏값의 반환을 프론트 컨트롤러에 위임합니다. 이 경우 사용자 요청을 처리할 수 있는 컨트롤러의 호출은 프론트 컨트롤러가 담당하고 개발자는 요청에 대한 적절한 처리만 하면 되므로 작성할 코드가 적어집니다.
일반적으로 사용하는 스프링 MVC의 구조
다음으로 일반적으로 사용하는 스프링 MVC 구조에 대해서 알아보겠습니다.

각 영역은 다음과 같은 역할을 수행합니다.
| 영역 | 역할 |
| View | 사용자가 보는 화면 또는 결과를 의미합니다. |
| Controller | 사용자가 웹브라우저를 통해서 어떠한 요청을 하면 그 요청을 처리할 컨트롤러를 호출하게 됩니다. 컨트롤러는 사용자의 요청을 처리하기 위한 비즈니스 로직을 호출하고 그 결괏값을 사용자에게 전달해 주는 역할을 합니다. |
| Service | 사용자의 요청을 처리하기 위한 비즈니스 로직이 수행됩니다. 일반적으로 서비스 영역은 서비스 인터페이스와 이 인터페이스의 구현체로 나뉩니다. |
| DAO | Data Access Object의 약자로 데이터베이스에 접속해서 비즈니스 로직 실행에 필요한 쿼리를 호출합니다. |
| DB | 데이터베이스를 의미합니다. 데이터베이스에는 애플리케이션에서 발생한 모든 정보가 저장되어 있습니다. |
이론적인 내용만 가지고 MVC 구조가 어떻게 적용되고 어떤 역할을 수행하는지 한번에 이해하기는 쉽지 않습니다. MVC구조는 직접 애플리케이션을 개발해 봐야 이해할 수 있습니다.