부제: 나는 MVC 패턴이 이해가 가질 않아서...
이 글은 제가 이해가 갈 때까지 모든 자료를 총동원해 정리할 예정입니다
생각의 흐름을 자유롭게 기술하고 이건 맞는 표현이었구나 이건 틀린 표현이었구나 첨언할 예정이기에 날것 그대로입니다!
지나가다 보면서 이건 틀렸어요~ 하는 게 있다면 자유롭게 남겨 주세요
MVC 패턴은 지금껏 스프링 프로젝트를 진행하며 매번 도입했었지만 막상 또 설명을 하고 분리를 하려니 어렵네요
원래라면 웹을 만들 때 API를 죄다 컨트롤러에 넣고는 했는데 이번에 다른 공부를 하게 되며 API가 없는 구조에서는 도대체 컨트롤러에는 어떤 코드를 넣는 건지 이해가 가질 않기 시작했습니다
그리고 깨달은 점이 바로... 나는 지금껏 비슷하게 정리된 걸 응용했을 뿐 주체적으로 분리를 하려는 노력은 하지 않은 것 같다는 생각이 들었습니다
사실 웹의 구조는 비슷하니까 적당히 다른 사람 코드를 참고하지 않았나...
그래서 시작하는 MVC 패턴 이해할 때까지 공부하는 지옥 시간 START
구글링해서 가장 대표적인 그림을 갖고 왔지만 아직 궁금증이 남아있습니다
유저의 입력을 뷰가 받아서 컨트롤러에 넘기는 게 아닌가?
그런데 생각해 보면 뷰와 클라이언트를 혼동하고 있는 것 같은...
뷰와 모델은 어느정도 수립이 가능한데 사실 컨트롤러 개념이 명확하지 않아 글을 썼습니다
뷰와 모델을 중재하는 컨트롤러... 도대체 뭐지?
(출처: 우아한 테크 유튜브)
(출처: 우아한 테크 유튜브)
(출처: 우아한 테크 유튜브, 얄팍한 코딩 사전)
값과 기능을 가지고 있는 객체
식료품 창고를 관리하고 음식을 요리하는 주방장! 즉 재료를 관리하고 요리?
모델에 포함된 데이터의 시각화
주방장이 만든 음식을 플레이팅 하는 직원
모델 객체로의 데이터 흐름을 제어
뷰와 모델의 역할을 분리
분리를 어떤식으로 하는지 감이 안 온다 ㅠㅠ
데이터 흐름을 제어...? 어떤 식으로 하는 거죠?
가능한 가볍게 구현하라!
연결 역할만 하게 하라!
그럼 뷰에서 모델을 바로 갖고 오면 안 되는 것일까?
좀 더 명확한 이해가 필요해...
주문도 받고 서빙도 하는 매니저?
즉 사용자의 요청이 진입하는 지점
요청에 따라 어떤 처리를 할지 결정을 Service에 넘긴다
그후 Service에서 실질적으로 처리한 내용을 View에 넘겨준다
그럼 Service는 MVC 패턴 중 어디에 해당할까?
서비스는 MVC 패턴에서 모델(Model)과 컨트롤러(Controller) 사이의 중간 역할을 하는데
네? ㅠㅠ
그러면 구조가
뷰 - 컨트롤러 - 서비스 - 모델 정도일까?
이렇다고 합니다~ 확실히 조금 더 이해가 되는 부분이 있네요
하지만 API를 처리하지 않는 컨트롤러는 어떤 역할을 하는지 다시 궁금해졌다
비웹 애플리케이션의 컨트롤러 역할:
비웹 애플리케이션에서도 컨트롤러의 역할은 비슷하지만
웹 애플리케이션과는 다른 환경에서 동작합니다.
예를 들어, 데스크톱 애플리케이션, 명령행 도구 또는 서버 애플리케이션의 경우에는
다음과 같은 작업을 수행할 수 있습니다:
명령 처리: 사용자 또는 다른 시스템으로부터 받은 명령을 처리하고 그에 따른 작업을 수행합니다.
예를 들어, 파일 처리, 데이터 동기화, 알림 전송 등의 작업을 수행할 수 있습니다.
데이터 처리: 데이터를 가져오고 수정하며, 데이터베이스 또는 외부 서비스와 상호작용하여
데이터를 저장하거나 검색합니다.
비즈니스 로직 처리: 비즈니스 규칙 및 프로세스를 수행하며,
모델을 조작하거나 데이터의 가공을 처리합니다.
응답 생성: 최종적으로 사용자 또는 다른 시스템에 대한 응답을 생성하고 반환합니다.
이 응답은 파일, 메시지, 상태 업데이트 또는 다른 형식일 수 있습니다.
컨트롤러는 MVC 패턴에서 중요한 부분으로,
입력 처리 및 비즈니스 로직 처리를 담당하며 모델과 뷰 간의 중재 역할을 합니다.
그러므로 애플리케이션의 사용 사례와 환경에 따라 컨트롤러의 역할이 다양하게 변화할 수 있습니다.
챗 지피티와 토론을 해 보았습니다
답변을 들어서 조금 이해도 가는 것 같지만? 아직도 어려운 부분이 존재하네요
그래! 나는 각 구조의 명확한 차이점을 알고 싶었던 거구나!
빨리 설명해 줘
그러니까 각 객체가 될 수 있는 것들은 전부다 모델이 되는 게 아닐까?
예를 들어 사람 -> 키 몸무게 먹기 달리기 등은 모두 객체가 갖고 있어야 하는 정보인 것이다
컨트롤러는 입력을 받고...
이번에는 사람에게 과자를 먹이라는 지시를 받았으면 사람의 과자 먹이기 함수를 꺼내서 이행하는 역할을 해 주는 것 같다
이때 과자를 먹였으면 체중 증가가 이루어져야 하니 체중 증가 함수를 또 모델에서 갖고 오고 이런 식인 듯함
그렇다면 뷰는?
체중 증가한 사람이 살이 더 붙은 모습을 보여준다!
어느정도 이해가 된 듯함~
그럼 이제 다시 하던 코드 분석을 마저 하러 가보겠습니다
다시 이해가 안 되면 추가하러 올 수도