티스토리 뷰

Chapter01. 스프링과 스프링 MVC

 

 

 

 

 

1-1. 스프링

스프링은 표준 및 엔터프라이즈 자바 응용 프로그램을 신속하게 개발하는데 널리 사용되는 오픈 소스 프레임워크이다.

정확한 표현은 '스프링 프레임워크'이다.

스프링은 특정 클래스에 대한 수평적 처리가 가능하다. 또한, 의존성 주입이나 관점 지향 프로그래밍 기능뿐만 아니라 웹을 개발할 수 있는 웹 MVC 프레임워크도 함께 제공한다.

 

 

 

스프링의 특징

 

  • 일반적인 자바 객체를 위한 POJO 지원

스프링은 별도의 API를 이용하여 애플리케이션 코드를 따로 작성하지 않는다.

또한 스프링에서는 자바 서블릿 코드를 작성할 때처럼 인터페이스를 반드시 구현해야 한다거나 HttpServlet 클래스(=컨트롤러)를 상속하지 않아도 된다.

 

스프링은 일반적인 자바 언어와 꼭 필요한 API 외에는 특정 구현 기술에 종속되지 않으며 특정 데이터베이스나 서버에 의존하지 않는 자바 클래스만으로 구성해도 프로그래밍이 가능하다. 이것을 POJO라고 한다.

POJO를 지우너하면서 특정 환경이나 구현 기술에 종속적인 코드를 비즈니스 로직에서 분리하므로 코드가 훨씬 단순하다. 또한 POJO는 객체 지향적 설계가 자유롭다.

 

 

 

비즈니스 로직이란?

비즈니스 로직이란 업무에 필요한 데이터를 처리하는 애플리케이션의 일부를 의미한다.
이것은 데이터 입력, 수정, 조회, 보고서 처리 등을 수행하는 루틴, 보이지 않는 곳에서 일어나는 각종 처리를 의미한다.
보통 클라이언트 프로그램은 사용자 인터페이스와 비즈니스 로직으로 구성되며 서버 프로그램은 대부분 비즈니스 로직으로 구성된다.

* CRUD → 비즈니스 로직
* 요청을 내릴 수 잇는 도구 (url 발생시키는 것)
ex) 자동차 방향 인터페이스는 핸들이다.
<a> → html (주소를 발생시키기 때문에 도구는 a태그)

 

 

 

 

 

  • 객체 간 결합도를 줄이는 의존성 주입 지원

스프링이 POJO에 힘을 불어넣는 방법 중 하나는 의존성 주입을 활용한 객체 간 조립이다. (=참조변수에 객체 대입 방법)

의존성 주입이란 객체 간 관계를 관리할 때 사용하는 기법이다. 객체 또는 구성 요소 사이의 의존 관계를 직접 생성(=new / 싱글턴) 하거나 제어하는 것이 아니라 외부의 빈(bean) 설정(=scope(사용기한)) 파일을 활용하여 스프링 컨테이너가 자동으로 연결하는 방식이다.

의존성 주입의 장점은 두 객체 간 의존 관계를 줄이는 느슨한 결합도이다.

느슨한 결합도라는 말은 언제든지 객체를 바꿀 수 있다는 뜻으로 유연성이 있다는 말이다.

객체 간 의존 관계를 유연하게 처리하려면 인터페이스를 활용해야하는데 이 뜻은 인터페이스를 사용하면 의존 객체를 바꾸지 않고도 인터페이스를 구현한 클래스로 변경하여 사용할 수 있다. (다형성을 이용한다)

 

 

 

 

  • 공통 모듈을 재사용하는 AOP 지원

애플리케이션 대부분은 특정 기능을 책임지는 모듈 여러 개로 구성되지만 각 모듈은 대체로 자신의 기능 외에도 로깅이나 트랜잭션 관리, 보안 등 시스템 서비스를 수행한다. ( 필요시 사이 사이에서 실행함)

이런 시스템 서비스는 시스템의 여러 컴포넌트와 관련되므로 이를 공통 관심사라고 한다.

애플리케이션 내부에서 공통 관심사를 비즈니스 로직으로 분리하고, 이 공통 관심사를 효과적으로 애플리케이션에 삽입하는 기술이 관점 지향 프로그램이다.

 

의존성 주입이 애플리케이션의 객체 간 결합도를 낮춘다면(=언제든지 바꿀 수 있다. 다형성 사용) AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 애스팩트에 담아 재사용할 수 있게 한다. (=중간에 삽입 가능함)

핵심 관점 코드에 비즈니스 기능만 구현하면 되기 때문에 개발 과정이 간소해졌다.

또한, 공통 모듈을 각 도긻된 모듈로 중복 없이 작성한다. 

적합한 위치인 XML 설정 파일에 설정해서 핵심 관점 코드와 결합하여 서로 독립된 다차원의 모듈로 만들 수 있다. (=위치만 설정)

 

* 공통 관심사 = 공통으로 실행해야하는 코드

 

 

 

  • 일관성 있는 모듈의 트랜잭션 지원

스프링은 데이터베이스 연동 기술과 트랜잭션 서비스 사이의 종속성을 제거하고 트랜잭션을 처리하는 일관된 방법을 제공한다.

트랜잭션 관리 방법은 크게 프로그래밍적 트랜잭션과 선언적 트랜잭션으로 구분할 수 있다.

프로그래밍적 트랜잭션처리는 코드에서 트랜잭션을 정교하게 정의할 수 있지만 트랜잭션이 스프링의 종속적인 코드가 될 가능성이 크다.

선언적 트랜잭션 처리는 코드를 수정하지 않고도 트랜잭션을 적용하거나 변경할 수 있다. 또한 간편하게 XML 설정 파일이나 애너테이션을 이용하여 트랜잭션의 범위와 규칙을 정의할 수 있어 트랜잭션을 쉽게 관리할 수 있다.

두가지 중 선언적 트랜잭션 관리를 권고한다.

 

 

* 종속적 → 코드에 표기하지 않음, XML에 명령한다(유연함)

* 비종속적 → 명확하다 (변경이 어려움)

 

 

 

 

 

 

트랜잭션이란?

최소 단위의 작업이다. 애플리케이션을 개발할 때 데이터 무결성과 일관성을 보장하는 기법이다.

어떤 작업 프로세스를 하나로 묶어 실행하다 작업이 하나라도 실패하면 모두 실패 처리하고 전체 작업이 성공하면 성공으로 처리하는 논리적인 작업 묶음이다.

 

 

 

 

 

 

 

 

 

1-2. 스프링 MVC

스프링 MVC는 스프링이 제공하는 웹 애플리케이션 개발 전용 프레임워크로 MVC(모델(Model)-뷰(View)-컨트롤러(Controller)) 패턴을 사용한다. 

 

 

스프링 MVC의 구성 요소

스프링 MVC는 웹 브라우저에서 서버로 들어오는 모든 웹 요청을 받아 처리하고 결과를 되돌려주기까지 디스패처 서블릿의 도움을 받는다.

디스패처 서블릿은 웹 애플리케이션으로 들어오는 모든 요청을 제어하고 모델-뷰-컨트롤러를 조합하여 웹 브라우저에 출력하는 클래스이다.

 

 

구성 요소 (=클래스) 설명
디스패처 서블릿
(Dispatcher Servlet)
웹에서 요청을 전달받는다. 전달받은 요청을 컨트롤러에 전달하고 컨트롤러가 반환한 결과 값을 뷰에 전달해 알맞은 응답을 생성한다. (컨트롤러 앞에서 실행
핸들러 매핑
(Handler Mapping)
클라이언트가 요청한 URL 을 어떤 컨트롤러가 처리할지 결정한다.
(조작 X, 알아서 함)
컨트롤러
(Controller)
클라이언트의 요청을 처리한 후 결과를 반환한다.
응답 결과에서 보여 줄 데이터를 모델에 담아 전달한다.
모델 앤 뷰
(Model And View)
컨트롤러가 처리한 결과 정보와 뷰 선택에 필요한 정보를 담는다.
(2번 스코프함)
뷰 리졸버
(View Resolver)
컨트롤러의 처리 결과를 보여 줄 뷰를 결정한다.

(View)
컨트롤러의 처리 결과 화면을 생성한다.
주로  JSP 파일로 클라이언트에 응답 결과를 전송한다.

 

 

 

 

 

 

스프링 MVC의 흐름도

 

 

1. 웹 브라우저에서 URL을 요청하면 먼저 디스패처 서블렛으로 전달한다.

2. 핸들러 매핑은 해당 URL에 매핑된 컨트롤러가 있는지 검사한 후 컨트롤러에 전달한다.

3. 핸들러 매핑은 요청할 컨트롤러를 결정하여 디스패처 서블렛에 반환한다.

4. 컨트롤러는 해당 클라이언트 요청을 전달받는다. get또는 post 방식을 기반으로 적합한 메서드를 호출한다.

5. 호출된 메서드는 정의된 비즈니스 로직으로 모델 데이터를 설정하고 뷰 이름을 디스패처 서블렛에 반환한다.
( Model And View 객체 생성 후 로직의 결과를 담아 디스패처 서블렛에 전달한다. )

6. 디스패처 서블렛은 웹 브라우저에서 들어온 요청을 처리한 결과를 보여주기 위해 뷰 리졸버에 도움을 요청해 응답 결과를 생성할 뷰 객체를 검색한다. 

7. 뷰 리졸버는 적잘한 뷰를 결정해 디스패처 서블렛에 뷰를 반환한다.

8. 디스패처 서블렛은 데이터가 담긴 모델을 뷰로 보내면 클라이언트 요청에 대한응답 작업을 완료한다.

9. 뷰는 클라이언트 요청에 대한 응답 작업을 완료해 처리 결과를 디스패처 서블렛에 반환한다.

10. 마지막으로 클라이언트 화면에 응답 결과를 출력한다. 사용자는 웹 브라우저 화면에서 그 결과를 볼 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday