CodeIgniter

MVC 디자인 패턴

수업 소개

이미 CodeIgniter의 기본적인 골격인 Controller, Model, View를 살펴봤다. 이것들을 모아서 MVC라고 하는데 이번 시간에는 MVC에 대한 일반적인 정의를 간단히 알아보고, CodeIgniter에서는 MVC 패턴을 어떻게 구현하고 있는가를 알아보자. 복습의 성격도 있는 수업이다. 

디자인 패턴

디자인 패턴은 건축으로치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것이다. 소수의 뛰어난 엔지니어가 해결한 문제를 다수의 엔지니어들이 처리 할 수 있도록 한 규칙이면서, 구현자들 간의 커뮤니케이션의 효율성을 높이는 기법이다. (위키피디아 참고)

MVC

MVC란 Model View Controller의 약자로 에플리케이션을 세가지의 역할로 구분한 개발 방법론이다. 아래의 그림처럼 사용자가 Controller를 조작하면 Controller는 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다. 

Web과 MVC

위의 개념을 웹에 적용해보자. 

  1. 사용자가 웹사이트에 접속한다. (Uses)
  2. Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출한다. (Manipulates)
  3. 모델은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
  4. Controller는 Model이 리턴한 결과를 View에 반영한다. (Updates)
  5. 데이터가 반영된 VIew는 사용자에게 보여진다. (Sees)

CodeIgniter와 MVC

Controller

사용자가 접근 한 URL에 따라서 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model에 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다. 

Model

일반적으로 CI의 모델은 데이터베이스 테이블에 대응된다. 이를테면 Topic이라는 테이블은 topic_model이라는 Model을 만든다. 그런데 이 관계가 강제적이지 않기 때문에 규칙을 일관성 있게 정의하는 것이 필요하다.

View

View는 클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너이다. 

CI의 MVC 규칙

아래는 CI에서 Controller과 Model과 View 간의 관계를 시각화한 것이다. 

댓글

댓글 본문
  1. 존레논아부지
    2022-10-25 완
  2. dueto park
    2022.06.25. MVC 디자인 패턴 수강 완.
  3. 헤이영
    다른 프레임워크를 익히면서 모호했던 MVC 패턴에 대한 이해가 코드이그나이터를 통해서 제대로 이해하게 되었네요 좋은 강의 감사합니다. PHP랑 코드이그나이터 너무 재밌네요^^
  4. jeisyoon
    2021.08.16 MVC Design Pattern - OK
  5. nurunzii
    개발한 프로그램을 웹에 올려서 효과적으로 공유하고 싶을 뿐인데 어디까지 공부해야 하는 걸까요
    컴퓨터의 세계는 너무 넓고 방대하고 무엇을 먼저 배워야 할지 모르겠고 그래서 무섭네요
  6. 웹짱
    2020.10.27 완료
  7. 방탄승
    손의 움직임으로 표현한다면 제가 위 내용을 보기에는 손과 손가락 등 눈으로 보이는 부분이 view이며, 엄지손가락 검지손가락등의 신경에 해당하는것이 Model이 될것 같고, 사람의 두뇌가 Controller이 아닌가 생각드네요.

    그래서 두뇌(Controller)에서 원하는 손가락(Model)을 호출하면 그 위치의 손가락의 신경들이 움직일 것이고(리턴) 그 손가락 신경들로 인해 펴지게 되어 내 눈에 보이게 되는 손가락이 View에 해당하지 않을까 하는 생각이 드네요.

    맞는 비유인지는 모르겠네요 ㅋ
    대화보기
    • wwssp
      정말 감사합니다
    • ys kim
      TABLE Join 시 모델명을 어떻게 지정하는지 궁금합니다
    • kang
      이곳에 질문에 하면 답글을 달아주시나요?
      MVC 패턴을 사람과 비교 했을때 어떻게 말 할 수 있을까요?
    • 혹시 어디서 공부하셨는지?
    • Lee JongYoung
      좋은 강좌 입니다.
      이 강좌를 통해서 도움이 많이 됬습니다.
    • Deuklyoung Ko
      음 좋은 강좌네요. 항상 헤갈렸는데..
    • Kun-Woo Lee
      좋은 강좌 감사합니다
    • Yosi Gom
      모델은 주로 데이터~! 데이터 베이스~!
    • 감사요
      중요한 개념을 항상 쉽게 설명해주시네요 감사합니다
    • 빠끄형
      아 진짜... 대박입니다.
      너무 설명 잘해주시네요 정말 ㅜㅜ 감동입니다 ㅜㅜㅜ
    • 일처리 완전못함
      MVC가 한방에 이해되었습니다.

      이렇게 친절한 강좌 처음이에요

      너무 감사합니다.
    • 김세창
      저도 조금 어렵네요 ㅎㅎ ^^ ㅎ
    • 데이비드리
      흠...저는 왜 이해가 잘안가는지..ㅠㅠ 조금 속상하기까지하네요
    • 맞아요 잘못된것 같네요.
      대화보기
      • 엄모닝
        정말 핵심만 집어주시는 좋은강의에요^^
        정말 감사합니다!!!!
      • 보보
        맞아요 잘못된것 같아요.
        대화보기
        • desty
          "CI의 MVC 규칙"에서

          $this->topic_model->get($id); 의 get이 Model 파일에 get 함수로 가야하는데 view의 array로 잘못 연결된 것 같습니다.
        • JustStudy
          고맙습니다
        • ttylbj
          정말 좋은설명이네요
        • 짱짱맨
          와~ 설명 진짜 잘하심~짱짱맨이심돠!
        • thoth
          감사합니다 :)
        • CreeJee
          https://github.com......mvc
          이걸로 한번 해보시는게 컼
          살려줘여
        • 샤핀
          한가지 질문이 생겼습니다.
          MVC모델에 대해서 찾아보니 모델1 , 모델2, 모델3!? 까지 있는 거 같고 이건 기존 모델들을 발전시킨 형태라고 들었는데요. 설명하신 MVC는 1번째 모델 설명인가요..?
          그리고 mvp 모델 패턴도 있고 , mvvm 모델패턴이 있다고 하는데, 이런 패턴들에 대한 설명 부탁 드려도 될까요? ^^;; 구글링에서 글로 찾은 것들이 잘 이해가 안가서요.
          혹은 잘 설명된 곳이 있다면 링크 좀 부탁 드립니다.
        • jio1122
          정말 감사합니다
        • 김승갑
          좋은 강의 감사합니다. 많이 배워가네요 :D
        • mocowood
          다 topic이라고 되있으니까 어려운것 같습니다. 연결을 a,b,c,로 나누면 이해가 않을까요.
        • egoing
          수정했습니다 ^^
          대화보기
          • boanuge
            "Web과 MVC" 부분에서 "Manupluates" -> "Manipulates" 오타요. :)
          • 보수
            controller에서 model의 get함수를 호출하는것 같은데 화살표가 잘못되있는거 아닌가요?
          • 불꽃
            좋은 강의 감사합니다^^