Here, Edward 👨🏻‍💻

About안녕하세요

PHP에서 Codeigniter 옮겨타기 1

먼저 다음 중 자신에게 해당되는 부분이 있다면 Codeigniter로 옮겨 탈 가치가 충분하다.

  • 반복적인 작업에 자신이 만든 라이브러리(라고 스스로 칭하는 스파게티 소스코드)가 있는 사람
  • 개발 로직과 마크업 요소가 뒤엉켜 있어 뭔가 수정할 일이 있을 때 멍해지는 사람
  • SQL injection 등 각종 보안 문제로 골머리를 썩혔던 사람
  • PHP로 개발하는 사람
  • 관심있게 이 글을 읽고 있는 당신
개인적으로 안봤으면 하는 사람은 아래와 같다.
  • 객체지향 프로그래밍에 대해 관심이 없는 사람
  • PHP를 아직 잘 모르는데 Codeigniter로 배우기 시작하려는 사람

PHP Framework는 사실 뭔가 엄청나고 대단한 것이 아니다. 이미 수많은 개발 언어와 이론들의 방향을 살펴보면 오히려 자연스러운 전개다. PHP Framework는 필연적으로 나타날 요소였지만 이렇게 오랜 시간이 걸렸던 이유는 배우기 쉬운 개발언어라는 오명 하에 고급 언어를 롤 모델로 생산성을 향상 시키는 것에 게을리 해왔던 탓이 아닐까.

기존의 PHP 개발 방식은 하나의 파일에 모든 처리과정이 들어있는 방식이다. 비록 파일을 분리해서 include나 require로 불러오긴 하지만 데이터를 페이지로 가져오는 부분이나 가져온 데이터를 수정, 가공하는 부분, 화면에 출력하는 부분까지 모두 하나의 페이지에서 if나 switch와 같은 구문을 통해 처리를 한다. 이 개발 방식의 단점은 화면과 로직과 데이터를 분리할 수 없어 쉽게 비빔밥이 될 수 있다는 것이다.

이를 보완하기 위해 많은 개발 패턴이 등장하는데 Codeigniter에서 사용하는 패턴은 MVC 패턴이다. 앞서 말한 기존의 개발 방식은 비빔밥이라 예를 들었는데 MVC는 김밥과도 같다고 볼 수 있다.김밥은 나름 분해가 가능하니까! 뭐 꽉꽉 말아버린 김밥이면 분해했을 때 비빔밥처럼 될 수도 있으니 그리 적절하지 못한 비유긴 하지만;

MVC는 모델, 뷰, 컨트롤러의 머릿글자를 모아 만든 조어인데 각각 담당하는 역할이 다르다. 모델은 자료를 찾는 용도, 뷰는 화면에 보여주는 용도, 컨트롤러는 필요한 데이터를 모델에 요청하고 화면에 뿌릴 데이터를 뷰에 보내주는 역할을 한다.

간단하게 메모장을 만든다고 가정을 해보자. 모델에서는, 뷰에서는, 그리고 컨트롤러에서는 무엇이 필요할까? 답은 이 글의 끝에 붙여놓을테니 계속 읽으면서 생각해보자.

물론 말은 간단한데 처음 보는 접할 때는 뜬금없이 나온 이 세 녀석의 용도가 참 모호하다. 특히 내 경우는 그럼 모델과 컨트롤러는 무슨 차이를 가지는 것인가, 왜 분리하는 것인가, 어떤 경계를 가지고 돌아가는 것인가에 대해 상당한 의문을 품었던 기억이 난다. 깊게 생각하지 말고 컨트롤러는 전체를 총괄하고 모델은 데이터베이스 부분을 담당한다고 생각하면 쉽다. (막상 적다보니 왜 분리하는지에 대한 정확한 이유가 떠오르질 않는다;; 말리고 있어!!)

모델은 DB, 뷰는 Front-end, 컨트롤러는 총괄. 반복해서 탁하면 억하고 튀어나올 정도는 되어야 쓰면서 헷갈리지 않는다.

Codeigniter는 약한 MVC 패턴을 채택하고 있어서 사실 모델과 컨트롤러를 혼합해서 써도 되고 컨트롤러를 뷰처럼 써버려도 상관이 없다. 그래도 기왕 MVC 패턴으로 넘어오기로 했으면 MVC 답게 써야 하는 것이 좋지 않을까? (협박..;;)

컨트롤러

  • 메모입력
  • 메모수정
  • 메모삭제
  • 메모목록

모델

  • 메모 입력하기
  • 메모목록 불러오기
  • 메모 삭제하기
  • 메모 수정하기

  • 메모입력/수정
  • 메모목록
  • 메모보기
  • 메모삭제 확인

왜 이런 구조가 나올까? 고민을 하며 다음 글로ㅎㅎ;

이 글은 https://www.haruair.com/blog/1293 에서 옮겨온 글입니다.
Posted by
김용균
사소한 이야기를 많이 나누고 싶어하는 해커. 티끌 같은 기술들이 세상을 바꾼다고 믿습니다.
목록으로
© 2011-2018 Edward Kim Some Rights Reserved.?