2011년 2월 22일 화요일

php codeigniter

이 기사에서는 샘플 Facebook 애플리케이션을 PHP용 CodeIgniter 프레임워크에서 작동하도록 하는 방법을 설명한다. 물론 Facebook 개발과 관련된 기사는 매우 많지만 Codelgniter를 사용하여 애플리케이션을 빌드하는 것과 관련된 기사는 적다. 그러나 이 기사에서는 Facebook에서 사용 가능한 최신 PHP SDK를 살펴본다.

이 기사에서는 Facebook SDK 기본 랩퍼 라이브러리를 사용하는 방법을 살펴보는 대신 직접 Facebook SDK를 둘러싸서 신속하게 사용하는 방법을 배우도록 한다. 또한, 이 기사에서는 작성한 애플리케이션을 Facebook에 등록하는 모든 단계와 CodeIgniter를 Facebook과 함께 작동하도록 설정하는 방법 및 이러한 과정을 수행하는 데 필요한 기본적인 자료를 살펴본다.

이 기사에서는 꽤 많은 분야를 다루기 때문에 몇 가지 선수조건이 필요하다. 먼저, PHP와 CodeIgniter에 대한 약간의 지식이 있어야 한다. 많이 알 필요는 없지만 약간의 지식이 있으면 시작하는 데 도움이 된다. 또한, 공용으로 사용 가능한 자체 웹 서버에 액세스할 수 있어야 한다. 작성할 애플리케이션은 언제나 자체 서버에 상주하며 Facebook 내부에서는 iframe으로 서비스된다. 다시 말해서 이 기사에서는 localhost에서 코딩을 한다고 해서 애플리케이션이 작동하는 것은 아니다. 마지막으로, 중요한 것은 Facebook 계정을 만들어서 작성한 애플리케이션을 Facebook에 등록해야 한다.

기본 사항

세부사항을 살펴보기 전에 먼저, Facebook 애플리케이션과 CodeIgniter의 개요를 잠시 살펴보도록 한다.

Facebook 애플리케이션 기본 사항

모 바일 및 웹 애플리케이션과 같은 다양한 Facebook 애플리케이션을 빌드할 수 있지만 이 기사에서는 웹 애플리케이션을 중점적으로 살펴본다. 기본적으로 모든 Facebook 애플리케이션은 Facebook.com에서 실행하여 개발자의 서버에 있는 코드를 호출하는 iframe으로 구성된다.

서 버에 있는 코드를 Facebook 세션에 통합하려면 몇 가지 규칙을 따라야 하며 참석한 이벤트나 친구 표시하기와 같은 다양한 기능에 액세스하려면 올바른 함수를 사용해야 한다. 그러나 이것이 전부다. 개발자는 데이터베이스 테이블에 다양한 데이터를 저장하는 기능을 포함한 모든 유형의 기능을 애플리케이션에 추가하여 Facebook에 대한 사용자 경험을 개선할 수 있다.

이 러한 작업을 제대로 수행하면 Facebook 사용자들이 작성된 Facebook 애플리케이션에 등록하고 또한, 다른 사용자에게 이 애플리케이션을 소개하게 될 것이며 이런 상황이 되면 개발자는 대역폭 문제를 다소 고려하게 된다. 사용자가 새로 추가되거나 누군가가 애플리케이션과 상호작용할 때마다 Facebook 서버가 개발자의 서버에 요청을 한다. 따라서 이에 대한 대책을 세워야 한다.

Facebook에서 어떤 유형의 애플리케이션을 빌드할 수 있나? Facebook Developer Showcase(링크는 참고자료 확 인)를 살펴보면 뉴스, 스포츠, 소셜 서비스, 유틸리티, 리뷰 정보, 지역 정보 등과 같은 다양한 카테고리에서 수백 개의 유용한 애플리케이션을 확인할 수 있다. 예를 들어, Pandora 애플리케이션을 이용하면 Facebook에 인기있는 개인 음악 서비스를 통합할 수 있다. 이제 Facebook 사용자는 자신들이 발견한 음악 서비스를 친구들과 쉽게 공유하고 자신의 취향에 맞게 음악을 즐길 수 있다. 이와 마찬가지로 Facebook 사용자는 IMDB Facebook 애플리케이션을 이용하여 좋아하는 영화, 배우 및 감독에 대해 논쟁을 하고 자신들의 생각을 Facebook을 사용하는 친구들과 직접 공유할 수 있다.

SimplyHired 애플리케이션을 이용하면 Facebook 친구 네트워크와 권장사항의 기능을 직업 검색 엔진과 결합하여 직업 권장사항을 사용자 정의할 수 있다. TripAdvisor 애플리케이션에서는 Facebook 사용자가 "like" 특성과 목적지를 이용하여 자신의 여행 경험에 대한 주요 특성을 친구들과 공유할 수 있다.

공간이 부족한 관계로 이 기사에서는 기본적인 애플리케이션만을 살펴보겠지만 Facebook 애플리케이션 개발자가 되고자 한다면 Facebook 애플리케이션 시장을 조사하여 어떠한 애플리케이션이 개발되어 있는지 살펴볼 필요가 있다.

CodeIgniter 기본

CodeIgniter 는 EllisLab에서 개발한 PHP용 MVC(Model-View-Controller) 프레임워크이다. 이 기사를 쓰는 현재, CodeIgniter 버전은 1.7.2이다. PHP에서는 Symfony 및 CakePHP와 같은 다양한 MVC 프레임워크를 사용할 수 있지만, CodeIgniter와 다른 프레임워크의 주요 차이는 유연성에 있으며 이러한 특성은 CodeIgniter가 경량이기 때문에 가능하다.

다른 MVC 프레임워크와 마찬가지로 CodeIgniter를 사용하여 코드를 다양한 기능 영역으로 분할할 수 있다.

  • 모델에는 데이터베이스 및 기타 데이터 구조와 관련된 모든 코드가 포함되어 있다. pages라는 테이블이 있으면 이 테이블에 해당하는 모델이 있게 되며 또한, 다른 테이블 중에서 해당 테이블의 레코드를 선택하고 작성하며 업데이트하고 삭제하는 기능이 이 테이블 내에 있게 된다.
  • 에는 모든 표시 화면과 UI 요소(예: Javascript 코드, CSS 파일, HTML 및 PHP)가 포함되어 있다.
  • 제어기는 이러한 모든 것을 함께 유지한다. 제어기에 있는 각 함수는 대상과 경로를 나타낸다. 대상이 /about인 경우, 제어기에는 about()이라고 하는 함수가 있게 된다.

이 전에 MVC 프레임워크를 다뤄보지 않은 경우에는 글머리 기호가 있는 이러한 세 문장을 통해 이와 같은 조직적인 계획 이면에 숨겨진 기능에 대해 약간의 실마리를 얻을 수 있다. 일단 먼저, MVC에 관해 생각해 보면 PHP 개발에 대한 관점과 태도가 근본적으로 달라진다.

예를 들면, 프로젝트에서 삽입할 수 있는 모든 위치에 데이터베이스 쿼리 코드를 추가하는 대신 이러한 모든 코드를 모델로 조직화할 수 있다. 그리고 페이지 모델의 함수를 사용하여 데이터베이스 테이블에서 페이지를 선택할 수 있다.

마 찬가지로 특정 페이지의 룩앤필을 업데이트해야 하는 경우에는 해당 뷰를 사용하여 작업을 할 수 있다. 따라서 제어기를 수정할 필요가 없다. 또한, 제어기는 다른 애플리케이션 제어 코드와 대상을 추가하는 곳이기 때문에 제어 코드와 대상을 모델에 삽입하지 않아도 된다.

다른 MVC 프레임워크와 달리 CodeIgniter 제어기와 모델 및 테이블에는 엄격한 이름 지정 규칙이 없다. 예를 들면, 테이블 이름은 복수형(pages)으로 지정하고 모델 이름은 단수형(page)으로 지정하여 모델과 테이블을 서로 연결하지 않아도 된다. 데이터베이스 테이블에 특정 이름으로 된 특정 필드가 있을 필요가 없으며 기본 키 필드의 이름을 id로 지정하지 않아도 아무런 문제가 없다.

게 다가 많든 적든 작업을 수행하는 데 필요한 만큼 프레임워크를 사용하도록 선택할 수 있다. 일반적으로 애플리케이션에는 일련의 제어기가 있으며 이러한 모든 제어기는 모델에서 데이터를 가져와서 뷰에 표시한다. 어떤 경우에는 프로젝트에 제어기와 뷰만 있는 경우도 있지만 이러한 상황은 데이터베이스 백엔드가 없는 정적 웹 사이트를 빌드하는 경우에 최적의 솔루션이 된다.

CodeIgniter 에 관한 또 다른 중요한 사실은 다른 코드와 상호작용하는 과정이 매우 쉽다는 점이다. 외부 SDK를 통합하는 경우에는 대부분 특정 이름 지정 규칙을 사용하여 이 SDK를 해당 플러그인 폴더에 추가하기만 하면 된다. (예를 들면, 이 기사에서는 facebook.php 라이브러리 파일의 이름을 facebook_pi.php로 변경한다.)

시작

CodeIgniter 로 작성한 첫 번째 Facebook 애플리케이션을 시작하자. 다음 프로세스는 여러 개의 단계로 구성되어 있으며 약간의 설치 과정이 필요하다. 모든 단계를 완료하면 Facebook 애플리케이션을 작성하는 데 필요한 모든 준비 과정이 끝난다.

CodeIgniter를 설치하고 구성하려면 다음 단계를 수행해야 한다.

  1. CodeIgniter를 다운로드하여 설치한다. (참고자료를 참조한다.)
  2. 다운로드한 .zip 파일을 열어서 공용으로 사용할 수 있는 웹 서버에 해당 내용을 추출한다.

    기존 도메인의 루트나 서브도메인, 기존 도메인의 루트에서 떨어진 폴더에 CodeIgniter를 전개할 수 있다.

  3. 텍스트 편집기로 system/application/config/config.php 파일을 열어서 설치한 CodeIgniter를 가리키도록$config['base_url'] 변수를 업데이트한다. 그런 다음, 서버에 변경사항을 업로드한다.
  4. 브라우저를 열고 CodeIgniter 애플리케이션이 있는 URL(예: example.com/test나 test.example.com)을 방문하여 CodeIgniter를 테스트한다.

    그러면 일반적으로 "Welcome to CodeIgniter!" 메시지가 표시된다. 이 메시지가 표시되지 않으면 무언가를 빠뜨리고 수행하지 않은 것이다. CodeIgniter를 재설치하고 다시 시작한다.

    CodeIgniter 기본 코드가 제대로 작동하고 있는지 확인해야 할 때 이 테스트를 수행하여 Facebook과 서버 간의 연결에 문제가 발생하지 않도록 해야 한다.

    참고: CodeIgniter 에서 표시되는 일반적인 메시지를 볼 수 없는 경우, DNS에 문제가 있을 수 있으며 특히, 새 도메인이나 서브도메인을 사용하는 경우에는 더욱 그러하다. 이러한 경우에는 다음 단계로 넘어가기 전에 잠시 기다려야 한다.

  5. Facebook.com/developers로 이동하여 애플리케이션을 새로 설정한다.

    이 작업을 처음으로 수행하는 경우에는 다음 단계를 수행한다.

    1. Allow를 클릭하여 애플리케이션에 액세스 권한을 제공한다.
    2. Developer 페이지에서 Set Up New Application을 클릭한다.
    3. Create Application 페이지에서 원하는 애플리케이션 이름을 입력하고 그림 1과 같이 Agree를 선택한 후, Create Application을 선택한다.

      그림 1. 애플리케이션 작성
      Facebook의 'Create Application' 화면으로 'Application Name' 필드, 이용 약관에 대한 동의 여부를 선택하는 단일 선택 단추 및 'Create Application' 단추가 표시되어 있다.

    4. Edit Application 페이지의 Basic 탭에 있는 애플리케이션 ID와 API 키, 시크릿을 기록해 둔다. 이러한 정보는 Facebook 애플리케이션마다 다르며 이 정보를 이용하여 작업을 수행하게 된다.

      그림 2. Basic 탭
      Edit Application 페이지, Basic 탭의 스크린샷

    5. 애플리케이션 설명을 입력하고 아이콘과 로고 및 기타 정보를 추가한다. (취소하고 나중에 다시 수행할 수도 있다.)
    6. Canvas 탭 을 클릭하고 캔버스 페이지 URL(즉, 애플리케이션을 얻기 위해 이동할 Facebook.com의 대상 페이지 URL)과 캔버스 콜백 URL(CodeIgniter를 설치한 위치의 URL이며 제어기를 가리키는 디렉토리 경로)을 입력한다.

      그림 3의 예제에서캔버스 콜백 URL은 http://www.example.com/index.php/home/이며 이 URL은 설치 과정에서 홈 제어기를 작성하게 될 위치이자 애플리케이션이 복잡한 작업을 수행하게 될 위치이다.



      그림 3. Canvas 팁
      Edit 페이지, Canvas 탭의 스크린샷으로 'Canvas Page URL' 필드와 'Canvas Callback URL' 필드가 표시되어 있다.

    7. Connect 탭을 클릭하고(그림 4 참조) 연결 URL을 입력한다.

      이 URL은 앞서 입력한 캔버스 콜백 URL과 같아야 한다. 애플리케이션을 서브도메인(예: foo.example.com)에서 실행하는 경우에는 Base Domain 필드에 기본 도메인(즉, example.com)을 입력해야 한다.



      그림 4. Connect 탭
      Edit 페이지의 Connect 탭으로 Facebook 연결 설정이 표시되어 있다.

    8. Save Changes를 클릭한다. 모든 과정이 제대로 수행되면 요약 페이지가 표시된다(그림 5 참조).

      그림 5. Summary 페이지
      맨 위에 변경사항이 저장되었다는 메시지가 표시된 샘플 페이지

  6. PHP SDK를 다운로드한다(참고자료 참조).

    다운로드한 파일의 src 및 examples 디렉토리에는 각각 facebook.php 파일(기본 라이브러리)과 example.php 파일이 있다.

  7. CodeIgniter에서 간단한 애플리케이션을 작성한다.
    1. 방금 다운로드한 facebook.php 파일의 이름을 facebook_pi.php로 바꾸고 CodeIgniter 코드의 system/application/plugins 폴더에 삽입한다.

      plugins 폴더가 없는 경우에는 지금 작성하고 이 디렉토리에 새로 이름을 변경한 파일을 삽입한다.

    2. example.php 파일을 system/application/views 폴더에 복사한다.
    3. 텍스트 편집기를 열고 Home이라고 하는 간단한 제어기를 작성한다. Listing 1에 있는 코드를 복사하여 이 파일에 붙여 넣은 다음, home.php로 system/application/controllers 디렉토리에 저장한다.

      Listing 1. 기본 제어기
       
      class Home extends Controller {

      function Home()
      {
      parent::Controller();
      $this->load->plugin('facebook');
      }

      function index()
      {
      $this->load->view('example');
      }
      }

      여 기에서는 경로가 제대로 활성화되도록 홈 제어기를 작성한다. Facebook 애플리케이션은 example.com/index.php/home을 찾는다. 따라서 이 특수 제어기가 이 요청에 응답하게 된다는 점을 기억하자. 정적 서버에서의 index.html이나 index.php와 마찬가지로 index() 함수는 단지 이 특수 제어기로 향하는 모든 요청을 로드한다.

      클 래스가 시작되면 생성자가 Facebook 플러그인을 로드한다. (잠시 기다렸다가 "언제 Facebook 플러그인을 작성했지?"라고 질문해본다. facebook.php 파일을 사용하여 작성하고 이 파일의 이름을 facebook_pi.php로 바꾼 다음, 플러그인 폴더에 저장했다는 사실을 기억하는가? CodeIgniter를 플러그인으로 사용할 수 있게 하기 위한 모든 작업은 이것이 전부이다.)

      index() 함수에서는 그저 예제 뷰를 로드한다(.php 부분을 삽입할 필요 없음). 이제는 views 폴더에 있는 example.php 파일에서 두 부분을 약간 편집하는 작업만 남는다.

    4. example.php 파일을 텍스트 편집기로 로드하고 첫째 줄 즉, facebook.php를 삽입하는 줄을 제거한다. $this->load->plugin('facebook'); 명령을 수행하면 CodeIgniter를 통해 이러한 작업이 수행된다.
    5. 애플리케이션을 작성했을 때 Facebook에서 얻은 애플리케이션 ID 및 시크릿과 일치하도록 Listing 2에서 해당 줄을 변경한다.

      Listing 2. 뷰 편집
       
      // Create our Application instance.
      $facebook = new Facebook(array(
      'appId' => 'some-value',
      'secret' => 'some-other-value',
      'cookie' => true,
      ));

    6. 작업 내용을 저장하고 업데이트한 사항을 서버로 전송한다.

초기 설정 과정을 열심히 수행하고 휴식을 취한 후에는 테스트를 통해 모든 작업이 제대로 수행되었는지 확인해야 한다.

최종 테스트

수행한 작업을 최종 테스트하려면 Facebook에서 애플리케이션에 지정한 URL(즉, http://apps.facebook.com/YOUR_APP_NAME)을 방문하면 된다. 모든 작업을 올바르게 수행한 경우에는 브라우저에 그림 6과 같은 페이지가 표시된다. (물론 필자의 Facebook 데이터 대신 독자의 Facebook 데이터가 표시된다.) 이 페이지가 표시되지 않거나 오류가 발생하면 cURL을 사용하거나 json_decode() 함수를 지원하는 PHP 버전을 실행해야 한다. 서버에서 이러한 도구를 사용할 수 없는 경우에는 Facebook SDK에서 오류가 발생한다.


그림 6. 실행 중인 애플리케이션
제목 'PHP-SDK'인 필자의 Facebook 애플리케이션의 스크린샷

CodeIgniter의 외부에서 원시 코드가 어떻게 생겼는지 비교하려면 fbtest.tripledogs.com을 방문해본다. 이 도메인은 필자가 설정한 서브도메인으로 여기에는 CodeIgniter가 없는 상태에서 실행하는 원시 SDK가 있다. 이 코드를 현재 실행 중인 코드와 비교하면 이 코드가 같은 결과를 얻는데 단지 몇 분이 더 걸릴 뿐이라는 점을 알 수 있다. 그러나 현재는 임의로 Codelgniter 프레임워크의 기능을 사용했다.

결론

이제 자신의 Facebook 애플리케이션을 시작하는 방법을 알게 되었을 것이다. 조금만 노력한다면 이러한 방법을 사용하여 더욱 복잡한 작업을 쉽게 처리할 수 있을 것이다.


참고자료

교육

  • Facebook Developer Showcase: 이 쇼케이스를 방문하여 다른 조직에서 Facebook을 사용하는 사례와 관련 문서 및 포럼을 살펴보자.

  • Facebook Developers 사이트: 애플리케이션을 Facebook에 등록하자.

  • 웹 개발 영역: developerWorks 웹 개발 영역은 다양한 웹 기반 솔루션 관련 기사를 전문적으로 다룬다.

  • IBM 기술 행사 및 웹 캐스트: developerWorks 기술 행사 및 웹 캐스트를 통해 최신 정보를 얻을 수 있다.

  • developerWorks on-demand demos: 입문자를 위한 제품 설치 및 설정 과정에서 숙련된 개발자를 위한 고급 기능의 활용에 이르기까지 다양한 데모를 제공한다.

제품 및 기술 얻기

토론

필자소개

Thomas Myer is the cofounder of Triple Dog Dare Media, an Austin, Texas, consulting firm. Thomas writes on the subjects of knowledge management, information design, and usability. You can email him at tom@tripledogdaremedia.com.