Spring MVC Project의 흐름
안녕하세요……
오늘따라 기운이 없어보이죠?….사실 기운이 없는게 아니에요.
드디어….드디어 제가!!!!!! 이제 백엔드 다운 영역에 도달했다는거에요ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
되게 먼길로만 느껴졌던 백엔드 과정에 드디어 제대로 된 첫 발을 들인거죠…
Spring Framework 을 처음 써본 저는 바로바로…
멘붕…
하지만 ^^ 이대로 물러서지 않죠. 당연히!
저는 애초에 프로그래밍 하면서 제일 재밌게 느끼는 부분이 제가 몰랐던 무언가를 배우는게
되게 재밌고 …그냥 재밌어요 허헣 너무 변태같나요 ^^
아무튼!!! 저번에!!! 다뤘던 servlet하나로 컨트롤러의 역할을 만들어 구현했던 MVC패턴을
이제는 Spring Framework 를 사용하여 좀 더 쉽고, 간단하게, 여러 단점들을 보완하여 서버를 구현할 수 있게되었는데,
사실 이 흐름도가 생각보다 복잡하더라고요….수업을 들으면서 일단 따라갈정도의 이해는 했지만, 제가 이걸 과연
정확히 알고 쓰는걸까? 파일들을 안보고 과연 흐름을 남에게 설명할 수 있을까?… 라는 생각이 너무 많이 드는 하루였습니다…
그래서!
흐름도를 이해는 했지만 그래도 한번 더 정확하게!
누군가에게 명료하게 설명할 수 있게 정리를 해보고, 계속해서 공부해보고자
이렇게 글을 쓰게 되었습니다 🙂
바로 가보도록 하죠!!!!!!!!!!
흐름도를 표현하는 많은 참고 이미지들이 많았지만, 저는 개인적으로 이게 간단명료 하게 잘 나와 있는거 같습니다!
위에 표기되있는 순서들로 한번 1~8번까지 각각 네모 안에 그려져 있는것들이 어떠한 역할을 하는지 살펴 보겠습니다 🙂
1. DispatcherServlet
사진을 보면 아시겠지만, 제일 먼저 클라이언트의 요청을 처리하는 곳입니다! 그래서 Front Controller 라고도 부릅니다 🙂
클라이언트가 보내는 모든 요청을 받고 제어합니다.
즉 DispatcherServlet은 사용자의 요청(url)을 받아 Handler Mapping에 보내 요청과 일치하는 컨트롤러를 검색하고
그 결과를 받습니다. web.xml 파일에 정의되어 있으며, 설정값은 servlet-context.xml에서 설정 할 수 있습니다!
2. Handler Mapping
위에 앞서 설명했지만, 간단하게 요청 URL에 매핑되있는 Controller를 찾아서
DispatcherServlet에 반환을 해줍니다 !
3. Handler Apdater
Handler Mapping을 통해 디스패처가 받은 Controller에 맞는 메서드를 탐색합니다!
4. Controller
클라이언트의 요청을 처리한 후에 비지니스 로직과 Service를 처리하여 View에 전달할
데이터를 Model, ModelAndView와 같은 객체에 저장(Attribute) 혹은 전달할 데이터가 없다면, 그냥 VIew파일 경로만 return 합니다.
여기서 이제 로직을 사용하고 결과를 보내주는 과정이 발생하는데, 자세하게 설명하자면 끝도 없지만
지금은 저도 머리가 아프고, 제 손도 아픈 그런 슬픈 상황이니 큰 그림만 이해하고 가도록 하기위에 추후에,
좀더 자세하게 Controller 동작방식에 대해 정리를 해보겠습니다 ㅠ
여기서부터 흐름이 한방향으로 순차적으로 가는게 아니라 갈리게 됩니다.
그렇기에 숫자에 큰 의미를 두지 마시고 그림을 보면서 이해하면 좋을거 같습니다.
5. View Name
Controller가 요청을 처리 후, View에 해당되는 View name을 반환해줍니다.
6. Model
Controller에서 요청을 처리하고 나온 결과 데이터값을 View에게 전달해줘야 하는데
Model이라는게 바로 그 데이터를 저장하는 공간입니다.
7. View Resolver
Controller가 리턴한 View name을 기반으로 맞는 View를 찾아서 디스패처에게 전달해줍니다
쉽게 말해서 컨트롤러의 결과에 따라 그에 맞는 jsp(뷰페이지) 를 전달한다! 라고 생각하면 됩니다.
8. View
디스패처가 전달된 View를 호출하고 전달 받은 모델 객체에서 필요한 객체를 (데이터) 가져와 클라이언트에게 보내줍니다.
큰그림을 생각하면서…
프로그램은 작게작게 쪼개는것도 중요합니다. 하지만 저는 처음에 배울때는 무조건 큰그림을 보고
크게크게 동작구현 방식을 이해한 다음에, 제가 큰 틀을 기반으로 프로그래밍 할 수 있게되면, 그때부터
무언가를 쪼개는게 되게 좋다고 생각이듭니다. 하나하나 처음부터 모든걸 꿰뚫으면서 가기에는 시간도 시간이지만
무엇보다 프로그래밍의 큰 흐름을 이해하기 힘들거 같습니다…..아무튼!!! 서론과 후론이 길었는데, 이렇게 큰 흐름을
한번 정리해보았습니다. 다음번에는 실제로 Controller에서 어떻게 Service, DAO, DB, SQL Mapper라는게 구현이 되있고
작동하는지 알아보도록 하겠습니다 🙂
Spring……너라는 녀석 뭔가 간단하면서 복잡하구나……….