정보공간_1

[4기 부산 김솔] Codeigniter 2 본문

IT 놀이터/Elite Member Tech & Talk

[4기 부산 김솔] Codeigniter 2

알 수 없는 사용자 2013. 10. 28. 05:05

안녕하세요. 부산 멤버십 22-1기 김솔입니다.

이번에는 PHP 기반의 프레임워크인 Codeigniter에 대한 두번째 글을 써보려 합니다.

 



1.     Codeigniter 동작

Codeigniter의 동작에 대해 먼저 알아보겠습니다.

위 그림은 사용자 가이드에 포함된 그림입니다.

(http://ellislab.com/codeigniter/user-guide/overview/appflow.html)

사용자의 모든 요청은 index.php를 통해 처리가 됩니다. url로 넘겨진 정보를 바탕으로 url에 맞는 Controller를 통해 처리되어 사용자에게 결과를 돌려주게 되어있습니다. 위 그림에서 다양한 절차와 여러 가지의 항목들이 있지만, 간단하게 위 흐름도를 살펴보면

1.     사용자 요청에 맞는 Controller 호출

2.     (DB 액세스가 필요하다면) Model 호출

3.     사용자 브라우저에 View 리턴

의 과정을 거치게 된다고 보시면 될 거 같습니다.

 



2.     MVC 패턴

(?) PHP에서 개발을 하신다고 하시면 하나의 php 파일에서 get 또는 post의 요청을 받아서 DB에 접속해서 쿼리를 날리고, 결과를 처리해서 html코드로 잘 포장해서 보여주는 코드를 다 작성해서 개발이 가능합니다. 물론 Codeigniter 에서도 마찬가지의 동작으로 Controller에서 위와 같은 형태의 코드를 작성할 수 있지만, Codeigniter 에서는 MVC 패턴에 따라 개발하기 쉽게 되어있습니다.



 Codeigniter를 다운받으시고 압축을 풀게 되면 /application/ 의 위치에 위와 같은 폴더구조를 확인 할 수 있습니다. 많은 폴더들이 있겠지만, Controller, Models, Views 폴더가 보이네요. 각 폴더들이 하는 역할은 다음과 같습니다.


-       Controllers

http://도메인/Controller/method 의 형태 주소에서 Controller에 해당하는 php 파일들이 모여있는 있습니다. Controllers폴더 하위 요소로 php파일이 아닌 폴더가 위치할 수도 있으며, 그럴 경우 url의 형태는 http://도메인/Folder/Controller/method 가 됩니다.

get, post 등의 요청을 통해 값을 처리하고, Model의 결과값을 View로 넘겨주는 역활을 합니다.

-       Model

Controller에서 인자 값을 받아 DB에 쿼리를 날리는 역할을 하며, 이 때 쿼리문의 결과를 Controller로 넘겨줍니다.

-       View

 Controller에서 처리된 값을 받아 사용자에게 보여줍니다.




3.     Hello, World


/application/controllers 폴더에 사용할 Controller 파일을 생성해야 합니다. 저는 ssm.php 파일을 생성했습니다. 생성한 파일을 에디터로 여신 후에 다음과 같은 내용을 작성해주시면 됩니다.


 위 그림에서 클래스명을 파일명과 동일하게 해주시면 됩니다. 각 함수명으로 접근하시면 됩니다.

위 소스를 예로 들면 http://도메인명/index.php/ssm/index 로 접속하시면 “Hello, World” 가 브라우저에 출력되는 것을 확인 할 수 있습니다. 위 소스에서 보시면 함수명이 index 인데, index 함수의 경우 기본함수로 취급이 되기 때문에, 브라우저에서 접속할 때 함수명 생략이 가능합니다.

http://도메인명/index.php/ssm/index/

http://도메인명/index.php/ssm/

가 동일한 동작을 합니다.



A.     url index.php가 빠진다면 아름다울 것 같은데

 지금 작성한 코드를 브라우저에서 확인 하려면 주소에 index.php가 포함되어 있는 것을 볼 수 있습니다. 그런데 이 index.php url에서 가지는 의미도 없는데 url길이만 길어지고 아름답지 못한 것 같습니다. 그래서 이 index.php를 빼보도록 하겠습니다.

http://ellislab.com/codeigniter/user-guide/general/urls.html

위 주소의 사용자 가이드를 확인하시면 .htaccess를 통해 url에서 index.php를 제거하는 것을 확인할 수 있습니다.



                         i.         index.php 파일이 존재하는 최상위 폴더에 .htaccess 파일을 생성합니다.

                        ii.         .htaccess 파일에 위 그림에 나와있는 내용을 작성 후 저장합니다.

 위 순서대로 .htaccess 파일 생성을 끝내신 후에 /application/config/config.php 파일을 열어 index_page 항목을 수정합니다.


 위 그림의 index_page 항목에 ‘index.php’로 되어 있던 것을 ‘’로 수정하시면 모든 설정이 끝이 납니다. 이제 /index.php/ssm/index 가 아닌 /ssm/index로 접속하시면 됩니다.

다음으로, index 함수 말고 다른 함수를 만들어 보겠습니다.



위와 같이 bye 함수를 추가하신 후에,  /ssm/bye 로 접속을 하시면 브라우저에 Bye가 출력되는 것을 볼 수 있습니다.

이번에는 bye 함수의 타입을 public에서 private로 변경해보겠습니다.


위와 같이 private로 변경 후 /ssm/bye 로 접속하시면, 브라우저에는



404 에러가 출력되는 것을 볼 수 있습니다.

private 타입일 경우 동작하지 않네요, 이제 위 코드를 다시 수정해보도록 하겠습니다.



위와 같이 코드를 변경하고 브라우저에서 /ssm을 확인하시면,

Hello, World
Bye

가 출력되는 것을 볼 수 있습니다.

일반적인 클래스에서처럼 private 속성은 브라우저에서 접근이 불가능하며, 같은 클래스내의 함수에서 접근이 가능합니다.

Index() 함수의 제일 마지막 줄에 $this->bye()를 통해 private 타입의 bye() 가 호출됩니다. 이 때 $this 가리키는 것이 ssm 클래스 입니다. 클래스를 가리키는 방법은 다양합니다.

위 그림에서 보시면 $this, 클래스명, self를 통해 접근하는 것을 확인 할 수 있습니다.

위 세가지를 제외한 다른 방법들이 더 있을지도 모르겠네요,