CI 묻고 답하기

제목 ci관련 질문과 조언을 구하고자 합니다.
글쓴이 짱큰형 작성시각 2012/10/11 22:05:46
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 14596   RSS
 현재 프로젝트 하나를 들어가는데요.
ci를 사용하려고 합니다.

모델 / 뷰 / 콘트롤러 중

모델과 콘트롤러의 역할 분담에 고민이 생기더라고요.

문서의 량을 최소화 하자!! 이러고는 있는데. 기준이 모호해서 그런지 마구마구 문서만 늘어나고 있네요.

질문1
1안 db 출력은 모델에서 전담을 하며, 입력/수정/삭제의 경우엔 콘트롤러에서 처리후 모델에서 가져옵니다.
2안 모델에서 출력 입력 수정 삭제를 전부 다 한다.
3안 모델에서 출력만 담당 콘트롤러에서는 중계적인 운영만, 연산은 라이브러리를 만들어서 모든걸 처리(입력 수정 삭제 회원 가입 처리 등).

프로젝트의 특성이 비슷한 출력이 많지만 약간씩 다릅니다. 
예를 들어 
-콘텐츠 를 출력한다.
 1.콘텐츠-코멘트-유저정보-좋아요-뷰어수(일반 출력물)
 2.콘텐츠-유저정보-유저의 활동로그(a가 좋아요했습니다. a가 코멘트를 달았습니다. a가 클립했습니다 등)

이런 소셜서비스 같은 출력이 많습니다.

최초 로드시 출력은 기본 출력 나머지 더 불러오기는 ajax를 사용 합니다.

 11개의 기본문서(뼈대)와 인클루드문서 50개(ci적용 전 순수 뷰문서 수) 
뷰같은 경우엔 부분적으로 페이지 전환이 (중앙 콘텐츠 출력부분과 메뉴 네이게이션 바) 많으며, 출력 콘텐츠도 달라집니다.
출력 부분의 디자인의 경우엔 4가지정도 입니다. 이미지를 많이 불러옵니다. 출력물 마다 이미지가 한장 이상이며, 다수의 장이 가능합니다. 

질문2
ci이 실행시 초기화를 하는데.. 제가 문서에 사용한 라이브러리만 불러 오는건가요? 아니면 ci 전체 내장된 모든 기능이 초기실행시 다 불러오는건가요?

처음 실행시 셋팅되는 것이?

질문3
콘트롤러 하에 있는 문서에서 다른 문서를 호출하는게 많아지던데 문제가 없나요?
헬퍼 라이브러리를 문서마다 선언해 줬더니.. 엄청 느려지더라고요..

질문4
모델역할을 어디까지 하는것이 좋은지 조언좀..

질문5
validation 폼검증.. 어디까지 ci를 사용하는것이 좋은지? ajax로 중복값 처리를 하는것이 좋을까요? 아니면 그냥 콜백함수를 사용하여 하는것이?

자바스크립트로 클라이언트 영역에서 검증하는게 좋은지? 아니면 ci form validation를 사용하는게 좋을까요?
아니면 제이쿼리 벨리데이션을 사용하는것이 좋을까요?

질문6
한 문서가 길어지는게 문서가 많아지는것 보다 낫나요?

질문7
redirect 함수 사용시 값을 같이 보낼순 없나요?

기타
반복되는 페이지 불러오는 곳이 있습니다. 폼으로 전송되는 값에 따라 뷰를 뿌려주는데 케이스문을 사용하여 뿌려 줍니다.
4개 정도의 뷰를 케이스문으로 하였습니다. 괜찮은지와..

반복되는 페이지 이지만. 모델에서 db에 접속하여 검증을 하여 다시 뷰를 부릅니다. 이때 오류 메시지를 뿌려줘여 하는데.
이것이 엄청 꼬였어요.. 질문 5번과 같은 질문입니다. 검증부분을 어떻게 처리해야 깔끔하게 오류 메시지까지 뿌려줄수 있을런지.. 조언 부탁드립니다.

마지막으로 날씨가 많이 추워 졌습니다.
다들 건강하시길 바랍니다. 꾸벅.




 다음글 파라미터를 쿼리스트링으로 받으려고 합니다. (2)
 이전글 CI cache 사용중 특정 부분만 제외 시킬수는 없나... (2)

댓글

변종원(웅파) / 2012/10/11 22:48:31 / 추천 0
모델에서는 데이터 입출력(crud) 모두 담당합니다.

폼전송으로 받은 데이터 보안처리 후 모델로 넘기고 넘어온 데이터 가공(또는 원쿼리로 처리)하여 뷰에 전달하는 것은 컨트롤러의 역할입니다.

아주 기본 라이브러리 빼고는 사용자가 로딩을 해야 실행시 메모리에 적재됩니다. 매뉴얼 찬찬히 보시면 input, output, uri 등 주소와 입출력에 관련된 것은 자동로딩입니다.

자바스크립트로 또는 ajax로 처리하더라도 프로그램단에서 한번 더 체크해야 합니다. ci 폼검증을 이용하면 한번의 액션으로 끝납니다.

파일이 많아지는 것도 길어지는 것도 개인적인 성향일 수 있습니다. 제 경우엔 사이트 레이아웃을 최소한의 파일로 구성하고 하나의 파일로 처리하는 편입니다.

리다이렉트시 변수 보내고 싶다면 주소에 붙여서 넘기세요. 주소 만드는 것은 누구?

케이스문이던지 if문이던지 상관없습니다만 다른 사람이 유지보수 한다고 생각을 하고 다른 사람이 봤을 때 유지보수를 편하게 할 수 있는지 없는지 생각을 해보세요.

꼬일 정도라면 분리 하시는 것이 좋습니다. 
한대승(불의회상) / 2012/10/11 22:54:53 / 추천 0
모든 질문에 답해드리기 참 난감 하네요 ^^;;

질문4 모델 역할은 어디까지 하는것이 좋은가?

- Select, Insert, Update, Delete 에 관련된 역할을 수행 하도록 하는게 좋습니다.
- Select 에는 Join, Union, Sub Query  등이 포함 됩니다.
- Select 문을 여러개 기술하여 최종 데이터 모델을 조합하는 경우도 포함 합니다.

다른 질문들은 떠오르는대로 답해 드릴께요.. ^^


한대승(불의회상) / 2012/10/11 22:58:44 / 추천 0
 질문7 redirect 함수 사용시 값을 같이 보낼순 없나요?

- 2가지 방법이 있습니다.
- http://도메인/컨트롤러/메소드/값1/값2/값3....
- http://도메인/컨트롤러/메소드/?a=값1&b=값2..... 

한대승(불의회상) / 2012/10/11 23:01:03 / 추천 0
기타 질문중 의문 사항

모델에서 뷰를 직접 호출 하나요?

만약 그렇다면 구조를 다시 파악 하신 후 컨트롤러에 작업 하시는 것이 좋겠습니다.
짱큰형 / 2012/10/11 23:30:11 / 추천 0
모델에서 뷰를 호출하지는 않습니다. 
짱큰형 / 2012/10/11 23:53:11 / 추천 0
 @웅파 @불의회상 님 답변 감사합니다. 꾸벅 꾸벅..  조언 감사합니다.

다시 열심히 해본후.. 질문을 계속~ 하하

콘트롤러를 최대한 깨긋하고 라이트하게 만들려고 합니다.(딱 중계자 역할)

모델에 비중이 많아 지기에 라이브러리를 사용하려고 했습니다.(아직도 생각중)(폼검증 소켓등)(사실 입력 수정 삭제도 라이브러리를 이용하려고 했습니다. ㅋ)


지지고 / 2012/10/12 00:44:08 / 추천 0
아... 이럴 경우 hmvc 모듈화 플러그인으로... 좋아요 처리모듈을 만들면 되는군요...

컨트롤러에서느 간단하게 보여주고 좋아요 클릭했을 때는 좋아요 처리모듈에서 처리 후 반환..

컨트롤러에서 좋아요 처리모듈까지 담을 경우 코드가 길어지니..

음....

CI 에서라면... third_party 폴더에 패키지(모델,뷰,컨트롤러 모두 포함)를 만들어서 필요한 뷰 부분에서 특정 패키지에 컨트롤러를 호출해서 사용하는 것도 좋을 것 같아요.

한 페이지 컨트롤러에 모든걸 담아서 로드 크기를 늘릴 필요도 없고 필요한 기능 클릭 할 때 외부 패키지에 컨트롤러에서 처리하니.. 심플한걸 원한다면 괜찮을 듯도 싶습니다.
한대승(불의회상) / 2012/10/12 09:07:51 / 추천 0
질문2 ci 실행 초기화를  할 때 문서에 사용한 라이브러리만 불러 오는건가요? 아니면 ci 전체 내장된 모든 기능이 초기실행시 다 불러오는건가요?

config.php의 autoload에 기술 하지 않으면 프레임워크 유지를 위한 기본 라이브러리(input, output, uri ...)만 로드 합니다.
자주 사용하는 session, db 라이브러리를 autoload에 기술하는 이유이기도 합니다.

autoload에 너무 많은 패키지나 라이브러리를 기술하게 되면 CI의 장점인 가벼움이 사라집니다.
2.X 로 넘어 오면서 1.X 보다 무거워지고 속도도 좀 느려졌다는 느낌도 듭니다.
3.X 는 뭔가 좀 바뀌길 기대 해 보네요 ^^