CI 묻고 답하기

제목 (초보입니다)헬퍼와 플러그인의 사이에서..
글쓴이 tigerbi 작성시각 2010/04/12 11:32:05
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 30681   RSS

헤매고 있습니다..


매뉴얼에서는

         플러그인은 함수가 1개이면서 배포용이고
         다른 헬퍼에 의존적이지 않으면서 함수가 여러개인 것(그런데 xml helper는 함수가 하나입니다.ㅠㅠ)

이 글(http://codeigniter-kr.org/tip/view/57/page/2/q/플러그인)에서는

         코드 분량으로 구분하기도 하고,
         사용빈도로 구분하기도 하고

이 글(http://www.askaboutphp.com/51/codeigniter-helpers-plugins-and-libraries.html)에서는

          1. Plugins – I put all 3rd party codes I’m using in my application as Plugins. I would, as best as I can, try to use classes rather than straight function calls. 
          2. Helpers – Any standalone straight functions calls, which are repetitive in nature, I classify them as Helpers. For example, sorting functions, my own calculation functions, etc 
          3. Libraries – I classify my own classes as ‘Libraries’. Normally, if I’m already writing a class in my application, it would then to be the core logic of the application, as such, I group them all in the Library folder. 
 
          (간략해석)
          1. 플러그인은 다른사람이 만든 코드(링크 예제에서는 함수가 아닌 클래스라 할지라도 남이 만든 것은 플러그인으로 간주하는 것 같습니다.)
          2. 헬퍼는 독립적으로 실행되며 반복적으로 사용되는 내가만든 함수,
          3. 라이브러리는 내가만든 객체

라고 합니다.

도대체 도무지 개념이 잡히지 않습니다.

내가 만든 함수는 도대체 어디에 두어야 하는 것인가요?

제발 개념을 탑재할 수 있게 도와주세요...ㅠㅠ

 다음글 수강신청 프로그램 제작시 (2)
 이전글 session 경로? (2)

댓글

변종원(웅파) / 2010/04/12 11:51:56 / 추천 0
상당히 애매한 부분이긴 합니다.

http://codeigniter-kr.org/tip/view/57/page/3/q/헬퍼
tigerbi / 2010/04/12 11:53:43 / 추천 0
제가 글을 수정하는 사이에 웅파님께서 답변을 주셨군요..
수정할 때 같은 링크를 본문에 적어두었습니다..ㅠㅠ
그래도 답변은 감사합니다^^

그런데...웅파님의 링크에 아래와 같은 답변을 직접 달아놓으셨던데..
두가지 의문이 있습니다.

하나는
"라이브러리, 헬퍼는 ci core이고 플러그인은 core가 아니다. "
라고 하신것의 의미가 system디렉토리 안에 파일이 있으면 코어라는 말씀이신가요?
(만약 그렇다면 1.7.2버전에서는 capcha 플러그인이 시스템 디렉토리 안에 들어있으니 플러그인도 코어라는 말이 되는 것 때문에 혼란이됩니다.)

두번째는
"라이브러리나 헬퍼는 $this->라이브러리명->함수()로 사용"

라고 하셨는데, helper를 "$this->헬퍼명->함수()"로 사용할 방법이 있나요?
"$this->헬퍼명->함수()" 형식으로 테스트해보니 없는 메소드라는 에러가 납니다.
메뉴얼에는 플러그인처럼 php내장함수 호출하듯이 사용하는것만 설명되어 있더군요

부디 쉽게 설명을 부탁드립니다. ㅜㅜ
변종원(웅파) / 2010/04/12 13:05:37 / 추천 0

1. 어디선가 얼핏 본 기억이 나는데 다른 프레임워크는 플러그인의 구분이 명확한데 ci의 경우에는 공식적으로 딱 무엇이다라고 정의한 것은 본 적이 없는 것 같습니다. core다 아니다의 차이는 목적의 차이라고 생각을 합니다. ci의 목적은 어떤 결과물(사이트겠죠)을 구조적으로, 관리하기 편하게, 재사용이 용이하게 개발하는데 있다고 본다면 ci의 플러그인은 사이트를 개발하는데 도움을 주기는 하나(헬퍼와 같이) 전체적인 사이트개발 방법론(?)으로 봤을때 일부분의 한정된 역할을 하는 것이라고 생각이 됩니다. (그말이 그말이기는 하지만.. ^^;)

매뉴얼에 플러그인은 헬퍼와 거의 동일하고 하나의 역할을 하는 함수이고 헬퍼는 그런 역할을 하는 함수의 집합이다라고 되어있습니다.  그정도선에서 이해하시면 될 것같습니다. 제가 ci를 보는 입장에서는 플러그인이냐 헬퍼냐는 사실 중요하지 않습니다. 헬퍼에 한개짜리 함수를 넣어 쓸수도 있는 것이고 플러그인에 여러개의 함수를 넣어 사용할 수도 있는 부분입니다. 그리고 ci의 loader를 봐도 플러그인과 헬퍼 부분이 99% 동일합니다.

2. 제가 잘못 기술한 부분입니다. 수정하겠습니다. 헬퍼와 플러그인의 구현방식은 일반함수를 쓰는 것과 같이 동일합니다.


결론을 좀 내려드리자면 플러그인과 헬퍼 구별하느라 너무 많은 에너지를 쓰지 마시라는 것입니다. ^^
(유연하면서도 어딘가 모르게 살짝 이해가 안가는 어설픈 부분이라고나 할까요?)

그리고 사용빈도수에 따라 구분했을 수도 있습니다. 그리고 헬퍼 목록을 보시면 class와 상당히 유사합니다. 라이브러리를 사용하면서 도움을 주는 역할 정도.. 플러그인은 라이브러리와 직접적 연관은 없는..
(원래는 저랬으리라 생각이 되는데 tank auth를 보면 tank 라이브러리에서 captcha를 기본으로 사용하고 있습니다. ^^;)
그리고 저 자신도 웹메이커3라는 CMS를 개발하면서 사이트를 구성해주는 아주 중요한 부분을 plugin으로 사용을 했습니다. ^^;

결국 구분 짓는 자체가 무의미하다는 거죠. ^^

tigerbi / 2010/04/12 13:19:23 / 추천 0
답변과 의견 감사합니다.
난해한 질문에 결론을 내려주셔서 더욱 감사합니다.

답변을 달아주시는 사이에 cakePHP를 훑어보았는데
그곳에서는 helper는 view를 위해 사용하는 함수들이었고,
plugin은 남이 만든 함수나 객체를 넣어두는 것 같습니다.
그리고 library의 모음인 component란 디렉토리도 있었습니다.
이점 참고하시어 도움이 되면 좋겠습니다.
케이든 / 2010/04/12 13:22:49 / 추천 0
라이브러리 = 클래스
헬퍼 = 펑션

참고로 웅파님 말씀대로
헬퍼, 플러그인 둘다 파일을 인클루드만 시킬뿐입니다

그래서인지 2.0에서는 captcha가 헬퍼로 들어가게 되고
플러그인개념이 사라집니다
tigerbi / 2010/04/12 15:33:51 / 추천 0

케이든님. 감사합니다.
그렇네요 얼마전에 케이든님이 쓰신 글(http://codeigniter-kr.org/free/view/3100/page/1/q/2.0)과 검색(http://www.haughin.com/2010/03/11/codeigniter-2-critical-changes-implications/)해 보니 plugin 사라진다고 되 있군요.

그럼 지금부터는 플러그인에 함수 만들어 넣어두면 안되겠네요
플러그인에 있는 함수들 헬퍼로 옮겨놓고
플러그인 load 하는 구문을 헬퍼를 로드하도록 해야 겠습니다. 고맙습니다.

ps. 이 사항은 2.0으로 버전업 되었을 때 기존코드를 사용하는데 문제 없도록, 지금까지 만들어 놨던 플러그인을 헬퍼로 차근차근 옮기고, 지금부터 만드는 프로그램들은 헬퍼만 사용하자는 공지를 하는게 어떨까요?