스프링 MVC2
MVC2는 전통적인 MVC 패턴을 웹 애플리케이션에 맞게 확장한 디자인 패턴이다.
주로 스프링 프레임워크에서 사용되며, 웹 애플리케이션의 요청 처리와 뷰 관리를 체계적으로 처리할 수 있다.
스프링 MVC2 주요 구성 요소
1. Browser (Client)
Browser은 사용자가 웹 애플리케이션에 접근하는 인터페이스다.
사용자는 브라우저를 통해 웹 애플리케이션에 요청을 보내고, 서버로부터 응답을 받아 화면에 표시한다.
- 역할 1 : 사용자가 URL을 입력하거나 링크를 클릭하여 HTTP 요청을 서버로 전송한다.
- 역할 2 : 서버로부터 응답을 받아 사용자에게 최종 결과를 표시한다.
- 관련 기술 : 웹 브라우저 (Google Chrome, Safari, Mozilla Firefox 등)
2. Web Server
Web Server은 브라우저에게 받은 HTTP 요청을 처리한다.
동적 요청은 웹 애플리케이션 서버(WAS)로 전달하고, 정적 콘텐츠는 웹 서버가 직접 처리한다.
- 역할 1 : HTTP 요청을 수신하고, 정적 파일을 직접 반환한다.
- 역할 2 : 동적 요청을 웹 애플리케이션 서버로 전달한다.
- 관련 기술 : Apache HTTP Server, Nginx 등
3. Front Controller
Front Controller은 모든 웹 요청을 중앙에서 처리한다.
클라이언트로부터 들어오는 모든 요청은 먼저 DispatcherServlet에 의해 수신된 후 다른 처리기로 요청이 전달된다.
- 역할 1 : 요청을 받아들이고, 어떤 컨트롤러가 요청을 처리할지 결정한다.
- 역할 2 : 요청 처리 후, 결과를 뷰로 전달하여 사용자에게 응답을 반환한다.
- 관련 클래스 : DispatcherServlet
4. Handdler Mapper
Handdler Mapper은 요청된 URL을 해석하여 어떤 컨트롤러와 메서드를 호출할지 결정한다.
- 역할 1 : URL을 분석하여 적절한 컨트롤러와 메서드를 매핑한다.
- 역할 2 : 프론트 컨트롤러가 요청을 적절한 컨트롤러로 전달할 수 있도록 매핑 정보를 제공한다.
- 관련 클래스 : HandlerMapping
5. Controller
Controller은 사용자의 요청을 처리하는 비즈니스 로직을 처리한다.
사용자의 요청을 기반으로 데이터를 생성하거나 처리하며, 그 결과를 모델에 담아 Front Controller에게 반환한다.
- 역할 1 : 사용자 입력을 받고, 해당 입력에 따라 비즈니스 로직을 실행한다.
- 역할 2 : 서비스 레이어를 호출하여 비즈니스 로직을 처리하고, 그 결과를 모델에 담아 반환한다.
- 관련 어노테이션 : @Controller
6. Service
Service는 애플리케이션의 핵심 비즈니스 로직을 처리한다.
데이터 처리, 검증, 계산 등을 수행하여 비즈니스 요구사항을 충족한다.
- 역할 1 : 비즈니스 로직을 처리하고, 필요한 경우 DAO를 호출하여 데이터베이스와 상호작용한다.
- 역할 2 : 컨트롤러에 결과를 반환한다.
- 관련 어노테이션 : @Service
7. DAO (Data Access Object)
DAO는 데이터베이스와 직접 상호작용하여 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
- 역할 1 : 데이터베이스와 상호작용하여 데이터를 조회하거나 저장, 수정, 삭제한다.
- 역할 2 : 서비스에 데이터의 결과를 반환한다.
8. DB (Database)
DB는 애플리케이션에서 사용하는 데이터를 저장한다.
- 역할 1 : 데이터를 저장한다.
- 역할 2 : DAO를 통해 데이터에 접근하고 필요한 데이터를 제공하거나 수정한다.
- 관련 기술 : MySQL, Oracle 등
9. View Template
View Template는 모델 데이터를 사용하여 사용자에게 실제로 표시될 UI를 정의한다.
- 역할 1 : 모델에서 전달된 데이터를 사용하여 응답을 생성한다.
- 역할 2 : 사용자에게 최종 HTML 페이지를 생성하여 제공한다.
- 관련 기술 : JSP
10. View Resolver
View Reslover은 논리적인 뷰 이름을 실제 뷰 템플릿으로 변환한다.
이를 통해 컨트롤러가 반환한 뷰 이름을 기반으로 적절한 뷰 템플릿을 찾아 HTML 페이지를 생성한다.
- 역할 1 : 컨트롤러에서 반환된 뷰 이름을 바탕으로 적절한 뷰 템플릿을 찾는다.
- 역할 2 : 선택된 뷰 템플릿을 사용하여 최종 HTML 페이지를 생성한다.
스프링 MVC2 처리 흐름
1. 사용자의 요청 전송
사용자가 브라우저에 URL을 입력하거나 링크를 클릭하면, 브라우저는 사용자 요청을 HTTP 요청 형태로 생성한다.
생성된 HTTP 요청은 네트워크를 통해 웹 서버로 전달된다.
2. 웹 서버 요청 처리
웹 서버는 수신된 HTTP 요청을 분석한다.
요청이 CSS, JavaScript, 이미지 같은 정적 콘텐츠인 경우, 웹 서버가 직접 해당 리소스를 처리하고 응답을 생성한다.
그러나, 로그인과 같은 동적 콘텐츠인 경우, 이 요청을 웹 애플리케이션 서버(WAS)의 프론트 컨트롤러로 전달한다.
3. 요청 분배
프론트 컨트롤러는 수신한 요청의 URL과 HTTP 메서드 등을 기준으로 핸들러 매퍼에 요청을 전달한다.
핸들러 매퍼는 이 정보를 바탕으로 요청을 처리할 적절한 컨트롤러와 메서드를 결정한다.
예를 들어, 요청 URL이 '/user/login'인 경우, 이 요청을 처리할 UserController와 login() 메서드를 매핑한다.
4. 요청 매핑
URL 매핑 정보를 바탕으로 결정된 컨트로러와 메서드 정보를 프론트 컨트롤러에게 반환한다.
이 과정에서 요청을 처리할 정확한 경로와 동작이 결정된다.
5. 적절한 컨트롤러 호출
프론트 컨트롤러는 핸들러매퍼로부터 받은 정보를 사용하여 적절한 컨트롤러를 호출한다.
컨트롤러는 사용자의 요청을 구체적으로 처리할 준비를 한다.
6. 서비스 레이어 호출
컨트롤러가 비즈니스 로직 처리를 위해 서비스 레이어를 호출한다.
이 과정에서 요청을 처리하기 위한 핵심 로직이 실행된다.
예를 들어, 로그인 요청의 경우, 서비스 레이어가 사용자 인증 로직을 처리한다.
7. DAO 호출
서비스 레이어는 비즈니스 로직을 처리하는 과정에서 데이터베이스 접근이 필요한 경우 DAO를 호출한다.
8. SQL 쿼리 실행
DAO는 SQL 쿼리를 실행하여 데이터를 조회하거나 수정한다.
예를 들어, 로그인 요청 시 사용자 ID와 비밀번호를 확인하기 위해 데이터베이스에 접근한다.
9. SQL 쿼리 결과 반환
데이터베이스의 쿼리 결과를 DAO에 반환한다.
10. DAO 결과 반환
DAO는 데이터베이스로부터 받은 결과를 서비스 레이어에 반환한다.
서비스 레이어는 이 데이터를 바탕으로 비즈니스 로직을 계속해서 처리한다.
11. 비즈니스 로직 처리 결과 반환
서비스 레이어는 비즈니스 로직 처리 결과를 컨트롤러에 반환한다.
예를 들어, 로그인 성공 여부나 사용자 정보를 반환하여 컨트롤러가 후속 작업을 할 수 있도록 한다.
12. 컨트롤러 결과 반환
컨트롤러에서 처리된 결과를 프론트 컨트롤러에 반환한다.
프론트 컨트롤러는 이 정보를 바탕으로 사용자에게 어떤 화면을 보여줄지 결정한다.
13. 뷰 결정 요청
프론트 컨트롤러는 요청 처리 결과를 바탕으로 어떤 뷰를 렌더링할지 결정하기 위해 뷰 리졸버에 요청한다.
뷰 리졸버는 요청에 대한 응답으로 JSP와 같은 사용자에게 표시할 화면을 정의하는 템플릿을 찾는다.
14. 템플릿 경로 반환
뷰 리졸버는 요청에 적합한 뷰 템플릿의 경로를 찾아 프론트 컨트롤러에 반환한다.
이 정보를 바탕으로 프론트 컨트롤러는 적절한 뷰 템플릿을 호출할 준비를 한다.
15. 뷰 템플릿 호출
프론트 컨트롤러는 뷰 템플릿을 호출한다.
이 과정에서 비즈니스 로직 처리 결과와 필요한 데이터 모델을 뷰 템플릿에 전달하여 최종 페이지를 요청한다.
16. HTML 반환
뷰 템플릿에서 생성된 최종 HTML 페이지는 다시 프론트 컨트롤러에 반환된다.
17. HTML 전달
프론트 컨트롤러는 렌더링된 HTML 페이지를 웹 서버로 전달한다.
이 페이지는 사용자에게 표시될 준비가 된 상태이다.
18. HTML 전달
웹 서버는 최종적으로 생성된 HTML 페이지를 브라우저로 전달한다.
사용자는 이 과정을 통해 요청한 페이지를 볼 수 있다.
※ 서비스 레이어 (Service Layer)
서비스 레이어는 애플리케이션의 핵심 비즈니스 로직을 처리하는 중간 계층이다.
이 레이어는 데이터 접근 계층(DAO) 사이에서 작동하며 다음과 같은 역할을 수행한다.
1. 비즈니스 로직 처리 : 사용자의 요청에 따라 특정 비즈니스 규칙이나 로직을 수행한다.
2. 데이터 접근 관리 : 데이터베이스와의 직접적인 상호작용을 DAO에게 위임한다.
3. 트랜잭션 처리 : 여러 데이터베이스 작업을 하나의 트랜잭션으로 묶어 실행하고, 오류 발생 시 롤백한다.
'Framework > Spring' 카테고리의 다른 글
[Spring] 09. 컨트롤러(Controller) (0) | 2024.09.02 |
---|---|
[Spring] 08. 빈(Bean) 설정하기 (0) | 2024.09.02 |
[Spring] 06. 스프링(Spring) MVC (0) | 2024.08.21 |
[Spring] 05. 스프링(Spring) 개발 환경 구축 - 라이브러리 설정 (0) | 2024.08.21 |
[Spring] 04. 스프링(Spring) 개발 환경 구축 - 프로젝트 생성 및 실행 (0) | 2024.08.21 |