자유게시판

제목 얼럿창 표시에 대한 고민
글쓴이 risa 작성시각 2013/03/11 12:37:23
댓글 : 11 추천 : 0 스크랩 : 0 조회수 : 19263   RSS
 질문이라기 보단 소소한 고민 입니다

사실 정석으로 보면 모든 스크립트는 전부 뷰 에서 처리 하는게 맞습니다

문제는 달랑 얼럿 하나 보여 주고 페이지 이동을 하는 경우가 생기게 됩니다.


예를 들면 게시물 등록 완료의 로직일 경우에 말이죠.

컨트롤러에서 모델로 데이터를 넘겨주고 얼럿을 표시합니다.

<게시물 등록 완료! > 

문제는... 정석이라면 뷰 에다가 스크립트 넣어다가 쓰는데 맞습니다만...

성능을 생각 하면 그냥 컨트롤러 에서 echo "<script>alert('게시물 등록 완료'); </script>";

이렇게 가져가는것이 더 좋긴 합니다.

뷰 파일 하나 안불러 오는 것 만큼의 차이가 나니 깐말이죠.


하지만 MVC패턴의 정석인 JSP의 MVC 패턴을 보면 컨트롤러에 스크립트 라인이 들어가면 당장 에러는 안나도 문제가 생길수 있습니다.

[뭐 JSP와 CI 차이  보단 JAVA와 PHP의 구조적 차이가 나는 부분이긴 하다만...]



요약 하자면...

달랑 스크립트의 얼럿 하나 표시에 뷰 로드해서 파일을 불러와야 하는것인가?

정석을 위배하는 컨트롤러에서 에코문을 찍어서 처리 하느냐? 의 소소한 고민 입니다.


이런 고민을 안하게 자주 사용되는 기능을 redirect 문처럼 아예 CI 에서 제공해주는 얼럿 함수 하나 제공 해줫음 하네요.



여러분들은 어떻게 생각 하시나요?

달랑 스크립트 한줄 때문에 뷰를 불러오느냐? 그냥 컨트롤러에서 에코를 찍느냐?


CI에선 각각 어떻게 처리 하는지 정확히 모르기 때문에 무엇이 더 좋은지는 판단이 안서네요.

[솔직히 그냥 에코 찍어도 전혀 지장 없다면 에코로 가고 싶은게 개발자의 심보!!]

 다음글 모바일웹앱 개발관련 회원분들의 도움의손길 요청합니다! (9)
 이전글 3월 정모는 않하나요?^^ (ps) (5)

댓글

양승현 / 2013/03/11 12:48:08 / 추천 0
말씀하신대로 컨트롤러 딴에서 알럿처리시 어떻게 할지 고민이 되지요..
전 알럿후 이동(이동url을 받음), 알럿후 백(히스토리백), 그냥 알럿만.. 이렇게 핼퍼로 만들어서 쓰고 있네요.
변종원(웅파) / 2013/03/11 13:29:13 / 추천 0
양승현/ 고거 ci세상님이 공개한거임. ㅋ
한대승(불의회상) / 2013/03/11 18:14:43 / 추천 0
마음 가는데로 하세요.

느슨한(?) MVC 이니 이게 더 효율적이고 편하다 싶으면 그렇게 하시면 됩니다.
milosz / 2013/03/12 08:22:28 / 추천 0
 이게 개인 취향 반영하는게 얼럿 쓰면 소리나서 싫더라구요. 그냥 메시지를 페이지에 남기는 쪽으로 ㅎㅎ
양승현 / 2013/03/12 16:28:47 / 추천 0
웅파 // ㅋㅋ 그렇군요. 제가 만들어 쓰는줄 알았네용..

<? if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// 경고메세지를 경고창으로
function alert($msg='', $url='') {
 $CI =& get_instance();

 if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';

 echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=".$CI->config->item('charset')."\">";
 echo "<script type='text/javascript'>alert('".$msg."');";
    if ($url)
        echo "location.replace('".$url."');";
 else
  echo "history.go(-1);";
 echo "</script>";
 exit;
}

// 경고메세지 출력후 창을 닫음
function alert_close($msg) {
 $CI =& get_instance();

 echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=".$CI->config->item('charset')."\">";
 echo "<script type='text/javascript'> alert('".$msg."'); window.close(); </script>";
 exit;
}

// 경고메세지만 출력
function alert_only($msg) {
 $CI =& get_instance();

 echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=".$CI->config->item('charset')."\">";
 echo "<script type='text/javascript'> alert('".$msg."'); </script>";
 exit;
}

function alert_continue($msg){
 $CI =& get_instance();

 echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=".$CI->config->item('charset')."\">";
 echo "<script type='text/javascript'> alert('".$msg."'); </script>"; 
}
?>

변종원(웅파) / 2013/03/12 16:31:14 / 추천 0
 양승현/ 나도 애용하는.... ㅋㅋ
입문서에서도 사용. ^^
한대승(불의회상) / 2013/03/12 22:57:11 / 추천 0
ㅎㅎㅎㅎ 이제는 나도 애용 할 것 같은.. ^^
pithecus / 2013/03/13 10:08:26 / 추천 0
프레임워크를 사용하는 이유는 여러가지가 있을수 있겠으나 
가장 큰 이점은 큰 틀에서 유지보수의 용이성이라고 생각합니다.
서비스가 커질수록 기능 확장에 따른 소스 유지보수, 관리 등의 비용이 엄청나게 발생하기 때문에
성능 측면에서 보자면 복잡한 코드를 관리하는 것 보다 서버 몇대 추가하는것이 훨씬 저렴할겁니다.
또한 성능 최적화는 국지적인 코드 최적화 보다 서비스의 구조적인 최적화를 하는 것이 순서일거고요.

그래서 프레임워크를 사용한다면 프레임워크의 룰에 충실히 따라야 한다고 생각합니다.
MVC 구조라면 MVC 원칙을 따라야 할 거고요. 이 원칙을 어기기 시작하면 프레임워크의 이점이 상당히 줄어듭니다.

저는 controller 에서는 로직 외의 처리는 하지 말고
아무리 간단한 view 코드라도 view 에서 처리해야 한다고 봅니다.

위와 같은 코드의 경우 view 를 분리해서 처리하고 있습니다.
// FILE: APPPATH/controller/test.php
class Test extends Controller {
  function index(){
    //로직 처리
    if($success){
      $this->load->view("block/common/alert");
      return;
    }
  }
}

// FILE: APPPATH/view/block/common/alert.php
<html>
<script>
  alert('XXXX');
</script>
</html>


변종원(웅파) / 2013/03/13 12:03:59 / 추천 0
저는 지금은 이론을 100% 충실히 따르지 않습니다. 
이렇게도 해보고 저렇게도 해보고 나름대로의 원칙을 가지고 유지보수를 염두에 두고
작업을 합니다. (비용, 시간)
MVC패턴을 충실히 따르면서 데이터 하나하나 까지 철저히 분리하여 처리할 수 있지만
실무에서 그렇게 하기란 쉽지 않습니다. (이론에 충실하게 100% 구현한 소스도 유지보수 해봤습니다.
너무 얽매이면 유지보수할때 욕 나옵니다. ^^)
 
codeigniter가 느슨하듯이 되도록이면 지키지만 alert 같은 경우는 헬퍼처리로 하는 것이
제 경우엔 로직상 맞다고 생각됩니다. mvc패턴을 지키기 위해 굳이 그렇게까지 할 필요가
있나 하는게 제 생각이구요. (alert를 헬퍼에서 사용했다고 mvc패턴을 지키지 않기 때문에
프레임워크의 이점이 줄어들 것이라는 것은 비약이라고 봅니다)

패턴을 모르고 그렇게 사용하면 전체적인 구조에 대한 문제가 될 수도 있지만 
알고 변형하여 사용하는 것은 다른 것입니다.

동일한 문구도 개인의 해석에 따라 달라지듯이 원칙에 대해 어느 선까지 지킬 것인지는
개인의 판단문제일 것 같습니다. 100%, 80%, 60% 등등..

전 70%쯤 되는 것 같네요.  
한대승(불의회상) / 2013/03/13 12:16:08 / 추천 0
모두 맞습니다. ^^
milosz / 2013/03/13 13:24:58 / 추천 0
 단순히 유지보수의 용이성을 고려하자면 view를 만들어 불러오는 것보다 helper나 library로 alert 메소드를 만드는게 좋습니다.
 
alert도 결국 추가적으로 에러 메시지나 여러가지 값을 전달해 처리해야 하는 경우가 발생하는데 (가령 얼럿에 들어가는 텍스트나 얼럿 이후 이동해야 하는 경로 등) pithecus님이 작성하신 코드와 같이 넣는다면 유지보수에서 view를 분리한 이점이 크지 않거든요.
 
위 승현님 작성하신 코드처럼 helper나 library에서 구현하되 echo로 처리된 부분은 view로 불러온다면 가장 이상적인 구현이 아닌가 합니다. 이러면 나름 유지보수에 대한 타협도 되고 MVC 패턴을 지키는 형태가 되지 않을까요? :D