CI 묻고 답하기

제목 다중 게시판 생성에 따른 uri 규칙을 어떻게 하는게 좋을까요?
글쓴이 으아아 작성시각 2012/11/30 10:49:20
댓글 : 19 추천 : 0 스크랩 : 0 조회수 : 19253   RSS
질문 이라기 보단 일종에 고민입니다.

자유게시판에 쓰기에도 조금 뭐해서 말이죠.



CI의 URI 규칙은 기본적으로 

1차 / 2차/  를 기본으로 하고  추가로 3차를 받습니다.

1차는 클래스 / 2차는 함수 / 3차는 받는값 [흔히 페이지 넘버]

자! 게시판을 생성 하려고 합니다.


1차는 그냥 파일명 아무렇게 지어봅니다.

예를 들면 ci_bbs



그리고 나면 그 뒤는 비디오 처럼 나옵니다.

ci_bbs / bbs_insert / 
ci_bbs / member_insert / 
ci_bbs / list / 1 


즉 1차는 사실상 주제를 의미하고

2차는 행동할 액션 을 의미 하게 됩니다.

3차부터는 받고 싶은 값을 넣게 되죠.
안넣어도 상관없습니다.


처음엔 간단히 생각 했는데 문제가 생겼습니다!!

똑같은 구조의 게시판... 마치 파일 복사로 생성 되는데 구분이 되는 게시판을 만들고 싶었습니다.


아예 구분을 짓기 위해 이번엔 1차를 구분 지었습니다.

new_bbs / list / 1

뭐 이런식으로 말이죠.

그랬더니...

데이터베이스야 설정으로 새로 만들고 설정하고 테이블 이름도 동일 하게 만들었습니다.

그런데 문제가 생기네요.


네. 

ci_bbs  와 new_bbs 는 아무리 동일 하게 해도 똑같을 수가 없었습니다.

이는 단순 복사가 아니라 다른 기능이 조금이라도 들어가면 동일성을 강조 할수도 없구요.

링크 라는 부분이라든가... 확실히 지명된 하드코드된 링크가 박히다 보니 결국 다 찾아다니며 수정 하니

이건 복사가 아니라 하나 만드는 작업이 되었습니다.


더 많은 복사된 게시판 생성? 아.. 싫어요. 그런거 아니아니 안돼요. 
[솔직히 일일이 찾아다니며 테스트 하기도 귀찮습니다]



그래서 이번엔 CI 포럼을 연구 했습니다.

1차                 /  2차    / 3차
액션의 주제  / 액션   / 받는 값
/ qna              /  write / 0

이렇게 말이죠.



그런데 저는 복사된 게시판만 아니라 다른 기능도 넣고 싶었습니다.

예를들어 게시판만 아니라 이미지 검색 업로드 라든지. 채팅 이라든지.

예 ] /chat / login




하아... 점점 요구가 스스로 생각 해도 복잡하네요.

요약해 봅니다.

1. uri 규칙을 사전에 정해서 어떤 대상이 무엇을 할건지 분명히 한다.

2. 1차 2차 를 규정 하고 3차 는 있든 없든 자유로워야 한다.

3. 게시판을 테이블만 늘리면 동일한 쿼리 내에서 처리 하게 하여 아주 간략화 한다. [즉 소스를 늘리지 않는다]
[공동으로 처리되는 모델을 만들거나 아니면 똑같이 복사 붙여서 파일 이름만 바꾸면 기능 하도록 만든다.]


그래서 컨트롤러에 앞에 폴더별로 구분 하는건 어떨까?! 1차는 폴더 명으로 하고 2차는 클래스 명으로!

하지만 이것도 흔퀘한 해답이라고는 하기 어렵더군요.


그래서 내린 저의 결론입니다.


1차 대주제
bbs [게시판. 모든 게시판은 bbs로 통일 하는 것입니다!]

2차 테이블 네임
네. function 을 테이블 네임으로 정합니다.
그럼 타겟은 언제나 테이블 네임으로 됩니다.

테이블 생성에는
ci_bbs
new_bbs
ci_bbs_replay
new_bbs_replay

이렇게 생성하고 함수도 같게 만들어야 겠지요?

3차 행동 주체... 액션! [가변]
무엇을 할지를 정합니다.

bbs / ci_bbs / insert

ci_bbs 테이블에 게시물을 넣을 속셈인가 봅니다.


4차. 추가로 넣을 파라메터. page 넘버등

bbs / ci_bbs/ list / 1

ci_bbs 의 리스트물중 1 번을 보여 달라는 이야기 인것 같네요.




한마디로 ... 2차 에서 3차 파라메터를 보고 조건 분기를 하겠다는 이야기 입니다.



잠시만요?! 저~기 시작에 bbs 로 시작 하는거... 뭔가 의미없지 않나요?

의미는 있다고 봅니다.

1. 눈으로 딱 보기에 이건 게시판을 위한 클래스다.

2. 해당 파일 클래스 내에서 한번에 모든 게시판을 컨트롤 한다.

즉 대명제를 둠으로서 구분을 하고 한곳에서 해결 하려는 속셈입니다.


이러면 생기는 문제는 그것이죠.

네. 컨트롤러가 약간 복잡해질 분위기 입니다?


즉 조건분기에 의해서 뷰를 불러올지 안불러 올지 구분을 정해 줘야 되는 상태가 되었는데...


시뮬레이션을 해보죠.




예1 ] /bbs/ci_bbs_replay / insert
예2 ] /bbs/ci_bbs/list/1


이경우...

예1은 인서트인 만큼 post 체크를 해야 합니다.
기타 세션여부 체크와 어디서 날라왔는지도 한번 체크해볼 필요성이 느껴집니다.

이상태로 

예2로 돌입...

해당 게시물을 뿌려라!

즉  uri 3번째 파라메터를 조건문으로 무엇을 할지 결정 하게 됩니다.



아 좋아요! 그럼 이걸 복사! 한다면... 신경써야 할건?

네 . ci_bbs_replay   이냐 new_bbs_replay 이냐. 맨 처음 네임 차이와

별 필요성 없으면 해당 테이블을 똑같이 만들고 테이블 네임만 바꾸면 된다는 이야기가 됩니다.


그러면 하나의 데이터베이스에서 여러개의 구분된 게시판 테이블을 주르륵 만들고

한번에 컨트롤 하겠다! 라는 속셈입니다.

단점은 하나 변경 하면 전부 변경 된다.

장점은 전부 바꾸고 싶으면 한번에 전부 바꿀수 있다.


.... 잠시만요?!

uri 2차를 기준으로 쿼리를 직접 따오겠다고?!

그거 위험하지 않을까요?

라는 걱정에 일단 설정은  노 쿼리스트링 을 설정 했고


애초에 2차 uri 는 틀리면 해당 페이지가 없다는 메세지가 먼저 뜹니다.

없는 페이지에 접근 해서 뭐할 건가요 ( ..)


이게 테이블 네임을 2차에 넣은 목적 이었습니다.



마지막 요약 합니다.


1차 대 주제 및 클래스 파일
2차 해당 테이블 
3차 액션의 주체
4차 추가 파라메터

bbs/ [target table name] / [action methode] / [parameter]

이렇게 uri 규칙을 정해놓고 게시판을 만들면 앞으로 여러개의 게시판을 동시에 쉽게 관리 할것 같다는 저의 얄팍한 수...

어디 지적 당할 부분은 없을까요?


혹은 여러개의 동일 한 게시판을 아주 쉽게 만들어 내는 별다른 방법은 없을까요?

조언을 구합니다.

 다음글 PHP(no 프레임워크) 날코딩으로 작업하다가 CI로 ... (9)
 이전글 CI로 작성된 서버를 서비스 중인데 자꾸 먹통이 되네요... (1)

댓글

꾸숑 / 2013/02/04 00:18:17 / 추천 0
웅파//
세그먼트 활용 성공했습니다.^^
몇칠 고민과 고생 스트레스 끝에...
다중게시판을 만들었니다.
/id/board/ 이것이 테이블명 입니다. 테이블명만 바꿔주면 1소스 멀티 게시판이 됩니다.

게시판 첫 주소를 http://localhost/ci/board/index/id/board/page/1/ 이렇게 했습니다.
페이지값을 기본으로 1 을 주어서 링크 깨짐을 방지 했고요...

글읽기  http://localhost/ci//board/read/id/board/page/1/num/135 이렇게 접속되고요..

답글이나 수정 삭제시에도 아래처럼 id, page,  num 값을 달고? 다닙니다.
http://localhost/ci//board/comment_form/id/board/page/1/num/135

여러모로 CI활용 고비를 넘긴뜻합니다.

다중게시판은 되었고 이제 설치형게시판, 회원연동, 관리자모드 보강 하면 두고 두고 활용할수 있는 CI소스가 될뜻합니다.

특히 웅파님의 가르침이 많은 도움이 됐습니다.

감사합니다.

열공!
한대승(불의회상) / 2013/02/04 10:23:26 / 추천 0
꾸숑// 축하드립니다. ^^
변종원(웅파) / 2013/02/04 11:01:15 / 추천 0
꾸숑/ 축하드려요. 이제 포럼에 답변 좀 달아주세요. ^^
꾸숑 / 2013/02/04 14:28:15 / 추천 0
불의화상// 감사합니다.
모두 선배님들 덕분입니다. 이곳 포럼이 없었으면 불가능했을겁니다.

웅파// 감사합니다.
php입문은 작년9월에 독학으로 시작했고요 CI알게된지는 3주 되었습니다.
아직 부족한것이 많습니다. 더욱 열심히 학습해서 답글을 많이 많이 달고 싶습니다.

열공!