
보기에 간단하게 이해 할 수 있습니다. 저도 면접가면 딱 이대로 말해요.
view에서 입력 또는 우리가 흔히 하는 "클릭"을 하면 controller에서 그 클릭에 대한 서비스 처리라든가 logic 처리를 하는데 필요한 데이터 흐름이라던가 요청을 model에 요청한다 그것을 "가공"해서 다시 view에 보여준다.
이게 내가 아는 MVC 이다.
라고 하니 한 팀장님이 음 갸웃 (살짝 아쉽다는 듯) 생각 하시는 거 같아서..!
다시 정리를 하려고 포스팅을 합니다.
디자인 패턴 중 하나이다. MVC 패턴.
어떤 앱(웹) 을 만들 때 유지보수를 하고 또 다른 이들과 공유를 하면서 만들어야 할 떄 좀 더 쉽고 깔끔하게 만들 수 있는 방법을 우리는 고안했습니다. 다양한 디자인패턴이 있죠 싱글톤, solid원칙, 브릿지, 인터프리터, 팩토리 등 (일단 내가 써보거나 들어본것만 ㅋㅋㅋ)
이것들을 MVC안에 잘 녹여드는것이 중요합니다. (서비스 로직 이해와 성능 개선 및 유지보수에 중요하다 생각합니다.)
결국 왜 이런것을 쓰냐!? 걍 더 쉽고 편리하게 사용하려고 입니다.
Spring MVC는 좀 다르다!?
저도 요번에 다시 공부를 하면서 확인했는데 MVC에는 두 가지 그림이 있었나 봅니다.
MVC1과 MVC2라는데.. 솔직히 이것까지 왜 알아야 하나요..? 그냥 요즘 쓰는 것이 뭔지 봅시다.
(몰라도 괜찮아서 넘어가는 겁니다, 찾아보면 아시겠지만 개념은 비슷해여 회사에서 이건 안물어봅니다.)

렌더링은 대강 처리, 가공 이라는 말 입니다.
모델 : 모델에는 애플리케이션의 데이터가 포함됩니다. 단일 개체 또는 개체 모음일 수 있습니다.
컨트롤러 : 비즈니스 로직을 포함합니다. 예를 들면 조회하기를 누르면 조회하는 기능이 있는 클래스에서 움직입니다.
보기 : 보여주는 곳에 데이터를 쏴줍니다 model에 가공된 데이터들이 있죠? 얘네들을 view에 보내주는 역할입니다.
근데 이런거 있죠. 앞단을 뭐로 만드는지는 다 다를겁니다. React, jsp, 타임리프 등등 뭐 다 다를탠데 이런 애들을 그냥 보기라 생각하면 됩니다. 어떻게 연결해요? 어떻게 연결이 되요? 이런거 ? 다 찾아보면 방법이 있습니다.
안되는건? 없다~ 왜 그렇게 안해요를 찾아보는게 실력 같습니다.
전면 컨트롤러 : Spring Web MVC에서 DispatcherServlet 클래스는 전면 컨트롤러로 작동합니다.
여기서 디스패치 서블릿이 머야~, 서블릿이 머야~ 이러시는 분들을 위해 간단히!.
차이점 : 기존에 모든 Servlet에 대해 URL 매핑을 활용하기 위해서 Web.xml에 모두 등록을 해줘야만 했다. Dispatcher Servlet이 해당 웹서버에 들어오는 모든 요청을 직접 다뤄주면서 작업의 효율을 높였다.
- Servlet : 예전에 20-30년 전부터 썻던 자바의 웹을 위한 프로그래밍 기술입니다. 동적으로 처리 해주는게 목적이죠.( 얘는 서버에서 작동 했습니다 In WAS) - HttpServlet이라는 Class of JAVA에서 상속 받습니다.
- DispatcherServlet : 제일 앞에 서버로 들어오는 모든 클릭? 의 요청을 처리하는 것을 Front Controller라고 Spring에서 정의했습니다.
클릭을 하면 일어나는 일들은?
DB에서 CRUD가 일어날 것 입니다. 저장, 조회, 삭제, 업데이트 이런 것들을 DispatcherServlet 에서 정리해서 각각 행동에 맞는 데이터들을 각각 데이터를 사용하는 컨트롤러로 전달합니다.
(옷을 산다 -> 구매한다 -> 카드 조회 -> 카드 번호 확인 DB, API 작업 -> 확인 되면 그에 따른 반응(핸들러) -> 이것을 다음 단계로 진행 하게끔 넘어가기) 뭐 이런 식이에여
- DispatcherServlet은 XML 파일에서 핸들러 매핑 항목을 가져와 요청을 컨트롤러로 전달합니다.
- 컨트롤러는 ModelAndView의 개체를 반환합니다.
- DispatcherServlet은 XML 파일에서 뷰 확인자의 항목을 확인하고 지정된 뷰 구성 요소를 호출합니다.
장점으론 (중요한 건 색깔 넣습니다, 나머진 알아두시면 좋지만 색깔은 외우는게 좋져)
- 별도의 역할 - Spring MVC는 모델 개체, 컨트롤러, 명령 개체, 뷰 리졸버, DispatcherServlet, 유효성 검사기 등이 특수 개체에 의해 수행될 수 있는 각 역할을 구분합니다.
- 경량 - 경량 서블릿 컨테이너를 사용하여 애플리케이션을 개발하고 배포합니다.
- 강력한 구성 - 웹 컨트롤러에서 비즈니스 개체 및 유효성 검사기와 같은 컨텍스트 전체에서 쉽게 참조할 수 있는 프레임워크 및 애플리케이션 클래스 모두에 대한 강력한 구성을 제공합니다.
- 신속한 개발 - Spring MVC는 빠르고 병렬적인 개발을 촉진합니다.
- 재사용 가능한 비즈니스 코드 - 새 개체를 만드는 대신 기존 비즈니스 개체를 사용할 수 있습니다.
- 쉬운 테스트 - Spring에서는 일반적으로 setter 메서드를 사용하여 테스트 데이터를 주입할 수 있는 JavaBeans 클래스를 만듭니다.
- 유연한 매핑 - 페이지를 쉽게 리디렉션하는 특정 주석을 제공합니다.
예제와 위 설명은 https://www.javatpoint.com/spring-mvc-tutorial 여기에 있습니다.
처음 제가 말한 MVC랑 다르다면 조금 다른 구조가 있네요.
DispatchercServlet 의 역할을 제대로 이해하고 간단하게 웹 하나를 띄워보시면 HTTP요청에 대한 정리가 어떻게 되는지 더 쉽게 알 수 있을 것 같네요.
이것을 자신만의 예시로 만들고 면접에서 말하세요.
면접관들이 좋아할 것 입니다.
혼자 개발 할 때도 이런 틀을 알고 개발을 하면 눈에 보이는게 많습니다.
'BE,FE(개발) > Java,Python (server)' 카테고리의 다른 글
| 파이썬에서 SQL 쿼리 관리: .py 파일 vs YAML 파일 (0) | 2024.07.30 |
|---|---|
| Minimal APIs vs. Controllers: 무엇이 더 나을까요? (0) | 2024.07.29 |
| 면접 공부를 하다 DI를 공부하다.(Spring) (0) | 2023.01.14 |
| Spring 에서 알아야 할 기본적인 Annotation 개념 및 예제 (0) | 2023.01.05 |
| Lombok을 제대로 eclipse에 적용하는 방법. (0) | 2022.12.31 |