블로그 프로필 이미지

SMALL





☞ CI의 URL 방식과 기본적인 URL 방식 


많은 사람들이 웹개발도구로 공개된 프레임워크를 사용한다. 물론 프레임워크 없이 코딩을 하거나 자신들만의 프레임워크를 사용하는 곳도 있지만, 그렇지 않을 경우, 공개된 프레임워크중 하나를 사용하기 마련이다. 그중에서 사람들이 가장 쉽게 접근할 수 있는 프레임워크중 하나로 CI 를 예로 들 수 있다.


CI같은 경우 PHP를 잘몰라도, 다른 프로그래밍 언어를 잘 배웠다면, 쉽게 접근할 수 있다. 하지만, 다른 프로그래밍 언어를 잘 다루더라도 웹의 기본적인 지식이 없는 경우, CI를 통해 웹을 만들더라도, 이해할 수 없는 부분이 많을 것이다.


그이유는 CI 자체가 프레임워크중 하나일뿐 웹의 구성 방식은 크게 설명하지는 않기 때문이다. 이말이 무슨말인지 처음에는 이해하기 힘들것이다. 일단 아래같은 경우를 생각해보자. 아래는 웹의 기본적인 URL 구성방식이다.


http://test.com/search.php?subject=코드이그나이터


위의 구성방식은 가장 기본적인 URL형식으로 웹에 조금만 관심이 있어도 쉽게 해석할 수 있다. 만약 위의 URL 형식이 이해가 되지 않는다면, CI를 당장 배우기엔 다소 무리가 있지 않을까 생각해본다.


아래는 위에서 기본적인 URL 방식을 CI로 구성된 URL 방식으로 작성한 URL 이다.


http://test.com/index.php/search/subject/코드이그나이터


물론 CI 에서도 GET 메소드를 사용할 수 지만, 여기서는 비교를 위해 기본적인 URL 규칙을 보여주었다. 그렇다면 한층 더 깊게 들어가서, 위의 URL 방식들을 어떤 형식으로 처리하는지 아래의 예제를 통해 살펴보도록 하자


search.php (기본적인 URL 구성방식 사용시)


<?php
if(!isset($_GET['subject']))
{
    echo "에러";
    exit();

}
else
{
        $value=$_GET['subject'];
        
        if($value=='코드이그나이터')
        {
            echo "코드이그나이터란....";
        }
        else if($value=='그외')
        {
            echo "그밖에..";
        }
        else
        {
            echo "찾을 수 없습니다.";
        }
}
?>


위의 코드를 살펴보면 정말 쉬운 형식으로 구성되었다는걸 알 수 있다. 또한 URL 에서 값들을 제어 할때 GET 메소드를 사용한다는 것을 알 수 있다. 


아래는 CI 로 구성되어진 URL 구성 방식이다. 중요한점은 프레임워크에서는 index.php 를제외한 서브 메인페이지를 컨트롤러라고 한다.


controller/Search.php (CI 의 URL 방식을 사용시)


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

class Search extends CI_Controller {

    public function subject($value)
    {
        
        if($value=='코드이그나이터')
        {
            echo "코드이그나이터란....";
        }
        else if($value=='그외')
        {
            echo "그밖에..";
        }
        else
        {
            echo "찾을 수 없습니다.";
        }
        
    }
    
}
?>


CI에서는 부모클래스인 CI_Controller 를 상속받아 모든 URL 값들을 해당되는 컨트롤러에서 처리하게 된다. 위의 소스코드를 보면 CI_Controller 를 상속받은 Search 라는 클래스가 있고, 실행되는 함수는 subject 이며, subject 함수에는 값을 받는 파라미터값이 존재한다. 


그렇다면 CI는 어떤 방식으로 URL 등을 처리할까라는 의문이 생기는데, 어려운건 없다. 우리가 PHP를 기반으로 웹서버를 처음 만들게 되면 index.php 하나만 존재하게 된다. 또한 아래의 URL 처럼 '슬래시(/)' 를 구분으로 아무리 많은 세그먼트 값을 넣어도, index.php 의 페이지가 가 뜬다는 것을 알 수 있다. 


http://test.com/index.php/test/page/1


CI 에서는 이런방식을 이용하여 '슬래시(/)' 뒤에 붙은 URL 값들을 CI 의 시스템을 이용하여 해석하고 처리하기 때문에, 어떠한 페이지를 요청하더라도 index.php 를 거쳐서 처리하게 된다.


다시한번 설명하자면 위의 주소를 입력할 시 CI 처럼 프레임워크나 구성방식이 적용이 안되었다면, '슬래시(/)' 뒤에 아무리 많은 세그먼트 값들을 넣어도 index.php 의 내용이 뜨게 된다.




 컨트롤러, 모델, 뷰 는 어떤역활을 하는가?


컨트롤러(Controller), 모델(Model), 뷰(View) 는 프레임워크에서 가장 중요한 부분일 지 모른다. 이러한 방식들을 줄여서 MVC 방식이라고 한다. 나같은 경우 처음M으로 시작하는게 의문이였다 그이유는 M이면 모델 부분인데 이는 순서와 상관있는지 그게 궁금하였다. 하지만 이러한 의문은 별의미없는 바보같은 의문이였다.


혹시 나와같은 의문을 가진 사람이 있다면, 절대 고민할 필요없이, 의문을 없애는게 좋다. 그이유는 CI를 계속 다루다 보면 알겠지만, 모든건 명칭일뿐 동작은 개발자에 따라서 달라진다는것을 알 수 있기때문이다.


이처럼 하나하나에 의문을 가지는건 좋지만, 너무 어렵게 생각할 필요는 없다. 찾아도 답이 안나오는 경우는 일찍 포기한 후 실력을 더 쌓은다음 생각해도 늦지 않기 때문이다. 그럼 각각의 MVC 가 CI에서는 어떤 형태로 사용이 되는지 간단히 알아보도록 하자. 


먼저 컨트롤러에 대해 알아보자면, 컨트롤러는 요청에 있어서 메인역활을 한다. 즉 다시말해 URL을 통하여 들어오는 모든 요청들을 컨트롤러에서 처리하게 되는 것이다. 이것들을 우리가 물건을 살때 이용하는 마트로 비유하자면, 마트라는 건물은 CI에서 클래스 에 속하고, 계산대에서 계산을 하는 사람은 함수에 속하며, 계산해야할 물건은 세그먼트에 속하게 된다. CI로 표현한다면 아래와 같다.


 기본적인 컨트롤러 구성방식


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

class Mart extends CI_Controller {
    
    public function cashier($item,$name,$value)
    {
        echo "상품코드 : ".$item;
        echo "상품이름 : ".$name;
        echo "상품 값 : ".$value;
    }
    
}
?>


그럼 다음으로 모델에 대해 알아보도록 하자. 모델같은 경우 기본적인 구성방식은  데이터베이스의 자료를 가져오거나 삽입, 삭제, 수정등을 처리하는 함수로 구성되어있다. 모델이라고 해서 뭔가 거대하고, 중요한 역활을 할것같지만, 그런건 전혀 없다.   


 기본적인 모델의 구성방식


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Database extends CI_Model {

    function __construct()
    {
        parent::__construct();
        
    }
    
    function get_item()
    {
        $query=$this->db->query("SELECT item_val FROM item WHERE item_num=1");
        
        if($query->num_rows > 0)
        {
            return $query->row();
        }
        else
        {
            return false;
        }
    }
    
}
?>


마지막으로 뷰는 가공한 데이터를 보여주는 역활을 한다. 즉 모든 요청을 처리하고 나면, 마지막은 사용자에게 보여주는 역활을 해야하는데 이러한 역활을 뷰에서 담당한다. 쉽게말해 다 완성된 작품을 원하는 위치에 전시해 놓는것으로 비유할 수 있다. 뷰는 기본적으로 아래와 같은 형식으로 사용 한다.


$this->load->view('view_name');





 정리하며..


솔직히 프레임워크 같은 경우, 처음 접하기가 힘들다. 그이유는 PHP를 알고 있어도, 프레임워크는 다른 개발자가 만들어놓은 라이브러리 형태를 가지고 있기때문에, 이러한 방식을 사용하기 위해선 따로 공부를 해야하기 때문이다.


웹 개발자쪽 실무자들은 여러 방식의 프로젝트를 접하면서 수많은 프레임워크등을 다루어 봤을것이다.  어떤 개발자들은 자신이 수많은 프레임워크를 접해보았고, 가장 좋은건 이거다 라고 당당하게 말하곤 하는데, 나같은 경우 솔직히 가장 좋고 가장 나쁜 기준은 없다고 생각한다.  


선택의 유무는 개발자 개개인의 몫이지, 무엇이 가장 좋다고 해서 쓰는건 아니라고 생각한다. 프레임워크 같은경우 꼭 정해진 틀에서만 사용하는게 아닌 내부 작동 방식들을 변경하여 사용할 수 있기 때문에, 필요에 따라서 조금씩 수정하여, 더 나은 프레임워크를 만들 수 있다.


마지막으로 가장중요한건, CI의 메뉴얼을 한번씩 읽어 보는것이다. 메뉴얼 같은 경우 기본적으로 영어로 되어있지만, 코드이그나이터 한국사용자 포럼 싸이트를 이용하면 한글로된 메뉴얼을 이용할 수 있다. 물론 현재 기준으로 최신버전인 3.0 은 아직 한글화 된 문서가 없지만, 기본적으로 쓰이는 것들은 똑같기 때문에, 버전이 달라도 사용방법을 이해하는데 있어서 큰 어려움은 없을 것이다. 



LIST