그누보드, 워드프레스 외부페이지 연동

우리나라 웹사이트에서 주로 사용하는 CMS는 워드프레스, XE, 그누보드 정도입니다.
이번 포스팅에서는 그누보드와 워드프레스에서 외부 페이지를 연동하는 방법을 다룹니다.

그누보드 외부페이지 연동

그누보드에서 외부페이지를 연동시키기 위해서는 적당한 디렉토리를 만들고 그 안에 _common.php 파일을 작성합니다.
그 내용은 대개의 경우 다음과 같습니다.

<?php 
$g4_path = "./../gnu"; // common.php 의 상대 경로 
include_once("$g4_path/common.php"); 
?>

그런 뒤에 같은 디렉토리 내에 적당한 php 파일을 생성하고 첫 줄에 include_once(“./_common.php”);를 입력해 주면 그 php 파일은 그누보드와 연동됩니다.
즉 그누보드에서 제공하는 함수들(alert, goto_url, sql_query 등)을 사용할 수 있고, 현재 접속자의 id, 권한 등도 알 수 있습니다.
그누보드에서 제공하는 대표적인 변수들은 다음과 같습니다.

  • $g4: 그누보드 경로, 테이블 이름, 현재시각 등에 관한 정보
  • $config: 그누보드 설정값들에 관한 정보
  • $board: 접속 중인 게시판에 관한 정보
  • $member: 현재 접속자의 정보
  • $is_guest: 현재 접속자가 손님인지에 관한 정보
  • $is_member: 현재 접속자가 회원인지에 관한 정보
  • $is_admin: 현재 접속자가 관리자인지에 관한 정보

워드프레스 외부페이지 연동

워드프레스에서 외부페이지를 연동시키기 위해서는 적당한 디렉토리 안에 적당한 php 파일을 생성하고 첫 줄에 include_once(“(워드프레스의 상대경로)/wp-config.php”);를 입력해 주면 그 php 파일은 워드프레스와 연동됩니다.
즉 워드프레스에서 제공하는 객체들($wpdb 등)을 사용할 수 있고, 현재 접속자의 id, 권한 등도 알 수 있습니다.
워드프레스에서 제공하는 대표적인 함수들은 다음과 같습니다.

  • new WP_Query(): 해당 조건에 맞는 포스트에 관한 정보
  • wp_get_current_user(): 현재 접속자에 관한 정보
  • get_header(): 헤더 출력
  • get_sidebar(): 사이드바 출력
  • get_footer(): 푸터 출력

그누보드와 워드프레스의 로그인 연동(SSO; Single sign-on)

그누보드나 워드프레스 중 하나에 로그인하면 다른 하나에도 로그인이 되도록 하는 개념입니다.
php 파일을 작성하여 그누보드와 워드프레스의 로그인을 한꺼번에 처리하도록 할 수도 있고, 로그인 후에 redirect를 통해 순차적으로 로그인이 이루어지도록 할 수도 있습니다.

그누보드 로그인의 경우에는 /bbs/login_check.php 파일의 소스를 참고하여 로그인을 구현하면 됩니다.
워드프레스 로그인의 경우에는 wp_set_current_user 함수와 wp_validate_auth_cookie 함수를 사용하여 로그인을 구현하면 됩니다.

다만 로그인이 이루어진 이후의 문제점이 있습니다.
하나의 php 페이지에서는 그누보드와 워드프레스의 변수/함수를 한꺼번에 이용할 수 없고 둘 중 하나를 선택해야만 합니다.
그누보드와 연동시킬 경우 워드프레스와 연동시킬 수 없고, 그 반대의 경우에도 마찬가지입니다.
이런 현상이 일어나는 것은 function_exists 함수를 사용하지 않고 정의된 함수 중에서 이름이 중복되는 함수인 is_admin()이 그누보드와 워드프레스에 공통적으로 존재하기 때문입니다.
따라서 그누보드나 워드프레스 중 한쪽에서 is_admin 함수를 재정의하거나 function_exists 구문을 사용해서 정의한다면 문제를 해결할 수 있습니다.

그러나 함수 중복 오류 문제가 해결되어도 성능 문제가 존재합니다.
한 php 파일에서 그누보드와 워드프레스를 한꺼번에 사용하게 된다면, 그누보드와 워드프레스가 모두 실행되어야 하므로 실행속도가 느려집니다.

이러한 점들을 고려한다면, 꼭 필요한 경우가 아닌 경우라면 하나의 php 파일에서는 그누보드나 워드프레스 중 하나만 선택해서 실행하도록 하는 것이 좋습니다.

관련 포스트

가입형 블로그 개발

방학 중 알바를 하기 위해 알바천국 등에 구직 글을 올렸습니다.
대학생이고 PHP, MySQL을 다룬다고 하니까 여러 군데에서 연락이 왔습니다.
그러나 대개는 제가 원하는 웹 프로그래밍 단기 아르바이트를 구하는 게 아니라 수련직으로 채용하는 방식이었습니다.
나중에 알고 보니 수련 기간에는 원래 주기로 한 돈보다 적은 급여를 줘도 되기 때문에 기업들이 선호하는 채용방식이라고 합니다.
그런 연락들을 거절하던 중 제가 원하는 단기 아르바이트 방식을 원한다는 연락이 있어서 계약을 맺었습니다.
일주일에 한두 번씩 수업 끝난 뒤에 찾아가서 피드백, 회의하고 돌아와서 작업하였습니다.

계약상 자세한 내용은 밝힐 수 없지만 기본적으로는 블로그와 SNS를 결합한 방식의 웹사이트였습니다.
아이디어로부터 시작해 기획과 코딩이 함께 진행되었기 때문에 최종 결과물에 비해서 프로그래밍의 기간은 긴 편이었습니다.
PHP, MySQL 환경에서 작업하였습니다.
처음에는 가입, 게시물 관리 등의 기능을 사용하기 위해 그누보드4를 주로 사용할 게획이었으나, 의뢰인이 원하는 기능 중에 그누보드4의 기본 기능을 뛰어넘는 부분이 많이 있었기 때문에 그누보드는 포스팅을 작성하고 수정하는 데에만 제한적으로 사용하였습니다.
핵심적인 몇 가지 기능을 구현하기 위해서 고생을 했는데 계약상 그 내용은 자세히 적을 수 없습니다.

문제점 #1. 언어 문제

국제적으로 서비스하기 위해 만든 웹사이트이고, 모든 서비스를 영어로 제공하기로 기획되었습니다. 그러나 그누보드4를 기반으로 제작하였기 때문에 가입, 검색, 안내문 등의 모든 언어가 기본적으로 한국어였습니다. 따라서 영어로 서비스하기 위해서는 번역을 위한 추가적인 작업이 필요했습니다.

이를 해결하기 위해서는 그누보드의 스킨을 사용했습니다. 그누보드는 게시판 뿐 아니라, 최근글, 검색, 회원가입, 외부로그인 등에 관한 스킨을 제공합니다. 따라서 많은 경우에는 스킨을 수정하여 한국어를 영어로 바꿀 수 있습니다. 그렇지만 비밀번호 찾기 메일, 각종 에러 발생 시의 안내문 등은 스킨으로 처리할 수 없는 부분이었기 때문에 직접 그누보드의 소스를 수정해야 했습니다. 이는 유지관리를 어렵게 하는 원인이 되었습니다.

이 과정에서 얻은 결론은, 외국어/다국어로 서비스해야 하는 웹사이트의 경우에는 처음부터 그누보드 이외의 프레임워크를 사용해야 한다는 것이었습니다.

문제점 #2. 날씨 입력 문제

블로그의 포스팅에 날씨를 자동으로 입력하기로 기획하였습니다. 이를 위해서는 접속자의 위치를 알아야 하고, 그 위치에서의 현재 날씨를 알아야 합니다.

이를 해결하기 위해서는 두 종류의 open api를 사용했습니다.
즉, ip 주소를 통해서 국가와 도시 이름을 알려주는 api와, 국가와 도시 이름으로부터 현재 날씨를 알려주는 api를 찾아서 이용했습니다.

문제점 #3. 회원별 고유주소 할당 문제

페이스북, 트위터, 싸이월드와 같이 회원별로 고유주소를 할당하기로 기획되었습니다.
즉, http://www.nam.or.kr/member_id 로 접속하면 member_id라는 회원의 개인 페이지로 연결되어야 하는 것입니다.
대개의 MVC 패턴의 PHP 프레임워크의 경우에는 이와 같은 기능을 기본적으로 제공합니다. 그러나 그누보드4는 기본적으로 이러한 기능을 제공하지 않습니다.

이를 해결하기 위해서는 서버의 public_html 디렉토리에 .htaccess 파일을 작성하였습니다.
접속한 url이 루트의 폴더가 아닌 경경우에는 특정 페이지로 리다이렉트하도록 하였습니다.
예를 들면 다음과 같습니다.

RewriteEngine on
RewriteCond %{REQUEST_URI} !^(/$|/index\.php|/adm|/bbs|/lib|/skin)
RewriteRule ^(.*)$ http://www.nam.or.kr/profile.php?user=$1 [L]

관련 포스트

워드프레스 블로그 개설

그누보드와 킴스큐를 거쳐, 결국에는 워드프레스로 블로그를 개설했습니다.

그누보드를 사용하면서 확장성에는 만족했지만 기능이 부족하고 업데이트하기 어렵고 모바일 환경과 블로그 체계에 최적화되지 않았다는 점이 아쉬웠습니다.
킴스큐를 사용하면서 사용자 편의성과 모듈을 사용한 사이트 구성에는 만족했지만 기능이 부족하고 사용자가 적어 테마와 모듈 등의 자료가 부족하다는 점이 아쉬웠습니다.
텍스트큐브를 잠시 설치하여 테스트하면서 국내 설치형 블로그 중에서 가장 완성도가 높다고 느껴졌지만 전체적으로 조잡하고 정돈되지 않은 느낌을 받아 사용이 망설여졌습니다.

결국 만족스러운 설치형 블로그를 국내에서 찾지 못해 주변 사람들의 의견을 구한 결과 워드프레스를 적극 추천받았습니다.
아직 워드프레스의 장점들을 다 파악하지는 못했지만, 원하는 테마를 찾아 설정하는 과정에서 전세계에서 가장 많이 사용되는 설치형 블로그라는 장점을 실감할 수 있었습니다.

한편, 이전에 그누보드에서 킴스큐로 블로그를 전환할 때에 자료를 함께 이전하면서 여러 문제가 발생했습니다.
새로운 블로그의 네이버 블로그 검색 등록은 1달째 보류되었고, 구글 애드센스 계정은 정책 위반으로 계정이 정지되었습니다.
이번에는 그런 문제를 다시 겪지 않기 위해 이전 블로그의 자료를 이전하지 않기로 결정했습니다.
처음부터 시작하는 만큼, 보다 체계적으로 IT와 모바일에 관한 주제를 다룰 예정입니다.

관련 포스트