요기보드3   필수기초 선택과목 요기보드 그누보드 로그인

요기보드 Ver.3


요기보드 설치

우선 이번 장은 본 강의를 따라 해 왔다는 것을 전제로 설명을 할 거야.
즉, 웹서버가 가동 중이고 데이터베이스로 bbs라는 DB가 생성되어 있으며 yg_bbs 와 yg_user 라는 두 개의 테이블이 이미 있는 상태에서 시작하는 거야.

■ 요기보드 설치

1. 여러분 컴퓨터에 폴더를 만들고(예: C:\yogi3 ), 아래 설치파일을 다운받아서 압축을 해제해


아직 ‘요기보드’를 다운 받지 않았으면 아래 링크를 클릭해서 받고 다시 와.

설치파일 다운로드 : 요기보드3 다운받기

예를들어 C:\yogi3 라는 폴더에 다운을 받았다면 마우스로 우 클릭한 뒤, [여기에 풀기]를 선택해서 풀면 돼.
압축해제 후의 탐색기 화면은 대략 다음과 같겠지?
(php를 공부할 때 만들었던 a.php b.php c.php head.php foot.php main.php는 이제 필요 없으니 삭제해 버려도 상관없어.)

요기보드설치

2. 이제 이 파일들을 FTP프로그램을 이용해서 웹서버의 루트폴더(www)에 올리는 거야.(카페24 경우)

만일 여러분이 PC에 UWAMP 나 XAMPP 같은 웹서버 프로그램을 설치해서 사용중이면 그 서버의 루트폴더(www 또는 public_html 또는 htdocs)에 복사해 넣으면 되겠지?
요기보드 업로드
일단 무작정 실행부터 해보자고.

3. 브라우저에서 주소에서 서버주소를 입력해.

카페24 이면 주소는 http://아이디.cafe24.com 이고, PC웹서버이면 http://localhost 가 되겠지?
한 방에 아래 그림처럼 나온다면 설치 끝난 거야. 메뉴를 클릭해 가며 살펴보고, 또 화면 사이즈를 늘렸다 줄였다 하면서 내용이 어떻게 변하는지 살펴보도록 해.

요기보드시작
그런데 게시판을 보거나 로그인을 하려고 하면 에러가 생길거야.
그건 아직 설정을 하지 않아서 그래.

4. PC의 설치 폴더에 있는 _config.php 파일을 에디터로 열어봐.

요기보드의 기본 설정과 관련된 아래 내용이 보일 거야.

▶ _config.php

<?php
/***********************************************************************************
 요기보드를 웹호스팅 루트에 설치할 경우의 예제입니다.
 루트가 아닌 하위폴더에 설치시는 ..PATH 와 ..DIR 폴더의 위치를 변경해 주시면 됩니다.
************************************************************************************/
//==== 요기보드 버전 =====================================
define('YOGI', '3.0');
//==== DB 접속정보 =======================================
define('DB_HOST', 'localhost');
define('DB_USER', 'abcd');
define('DB_NAME', 'abcd');
define('DB_PASS', '1234');

//==== html(src, href..)에서 사용하는 상대경로 ======================
define('ROOT_PATH'      , ''); //** 루트(/)에 설치시에는 공백('')으로 입력
define('ADMIN_PATH'     , '/admin');  //관리자페이지 위치
define('IMG_PATH'       , '/img');    //그림파일 위치
define('BBS_IMG_PATH'   , '/img/bbs');//bbs게시판 첨부 그림위치

//==== require,include 에 사용하는 절대경로 =========================
$root = $_SERVER['DOCUMENT_ROOT'] ;
define('ROOT_DIR'      , $root );
define('ADMIN_DIR'     , $root .'/admin');    //관리자페이지 위치
define('YOGI_DIR'      , $root .'/yogi');     //요기보드 모듈
define('BBS_IMG_DIR'   , $root .'/img/bbs');  //bbs 게시판 첨부 그림위치

//==== 기타 상수들 ==================================================
define('BBS_IMG_MAX'   ,2048000);   // 게시판그림 최대크기 2Mb (2000 * 1024)
define('BBS_WIDTH_MAX' ,800);       // 게시판그림 최대 가로크기 800px (더크면 자동축소)

//==== 관리자 등급 지정
define('ADMIN_LEVEL', 8); // 이 등급 이상의 회원은 관리자페이지 접근 및 사용자글 수정,삭제 가능

//==== 세션 시작 안했으면 세션시작
if(!isset($_SESSION)) { session_start(); };
//==== 세션변수가 없는데, 쿠키에 있으면 쿠키변수를 받는다.
/***** 쿠키 사용시 주석 해제하고 사용 하시오.
if (!isset($_SESSION['ssuno']) and isset($_COOKIE['ckuno'])) {
    $_SESSION['ssuno']   = $_COOKIE['ckuno'];
    $_SESSION['ssuid']   = $_COOKIE['ckuid'];
    $_SESSION['ssuname'] = $_COOKIE['ckuname'];
    $_SESSION['sslevel'] = $_COOKIE['cklevel'];
}
**/
//==== 주소줄에 PHPSESSID 표시 안되게
@ini_set("session.use_trans_sid", 0);
@ini_set("url_rewriter.tags","");
?>

위쪽에 데이터베이스(DB) 접속을 위한 아이디, 비번, 그리고 DB명을 지정 해야돼.
웹서버를 만들면서 여러분이 만든 아이디, 비번, DB 이름이 틀릴거야. 여기를 제대로 수정해야 겠지?


    //==== DB 접속정보 =======================================
    define('DB_HOST', 'localhost');
    define('DB_USER', 'abcd');
    define('DB_NAME', 'abcd');
    define('DB_PASS', '1234');

5. 위 DB 접속정보를 여러분의 아이디, 비번으로 수정해.


그 아래는 요기보드의 각 파일의 위치 경로를 정의하는 내용이야.
내용을 보면 루트경로는 ‘/’이고 그림파일은 ‘/img’ 로 해서 루트폴더의 하위에 지정한 것을 볼 수 있어.
또 게시판을 작성하면서 첨부한 그림파일들은 ‘/img/bbs’ 라는 폴더로 지정했어.

이런 경로 지정이 필요한 이유는 요기보드를 루트폴더에서 시작하지 않고 하위폴더에서 시작할 필요가 있는 사람들도 있기 때문이야.
예를들어 웹호스팅 1개에 여러개의 홈페이지를 만들고 싶다던지 또는 이미 홈페이지가 있는데 추가로 회사내부적인 게시판이 필요해서 요기보드를 사용할 필요도 있을거야.
그럴 때는 루트폴더 아래에 하위폴더를 만들고 그 안에 요기보드를 설치하면 그만이야.
그리고 이 때 여기서 요기보드의 각 파일들이 어느 위치에 있다는 것을 지정하면 돼.

요기보드의 기본세팅은 루트폴더에 설치하는 것을 가정하고 ROOT_PATH를 ‘/’로 표시했으니 만일 하위폴더인 /study에 설치했다면 여기를 바꾸면 되는거지.
예를들어 요기보드 설치를 여러분 웹서버의 루트인 www 의 아래 /study 폴더에 했다면한 사람들만 이곳 경로를 바꾸어 주면 돼.
즉, 루트폴더의 위치를 알려주는 상수 ROOT_PATH의 값을 /study로 바꿔 주는 거야.


//==== html(src, href..)에서 사용하는 상대경로 ======================
    define('ROOT_PATH'      , '/study');
    define('ADMIN_PATH'     , '/study/admin');  //관리자페이지 위치
    define('IMG_PATH'       , '/study/img');    //그림파일 위치
    define('BBS_IMG_PATH'   , '/study/img/bbs');      //bbs게시판 첨부 그림위치
//==== require,include에 사용하는 절대경로 =========
    $root = $_SERVER['DOCUMENT_ROOT'] . '/study' ;

6. 수정한 내용을 저장하고 다시 FTP 로 서버에 올려서 파일을 교체해.

잘 나오지? _config.php 파일에서 설치 경로의 위치를 정하는 것을 알 수 있어.

▶ 상수와 전역변수 $_SERVER[ ]
여기서 새로 나온 함수와 전역변수를 알고 가자구.
‘상수’는 변하지 않는 수를 뜻해.
전에 php를 배우면서 ‘변수’를 배웠지? 변수는 $a 형태로 사용하고 값을 수시로 바꿀 수 있었어. 예를 들어…

$a = 1 ;
$a = $a + 1 ;
첫째 줄에서는 $a 값은 1이었어. 둘째 줄에서는 $a 값은 2가 되겠지?
값이 수시로 변할 수 있다고 해서 이름도 '변수'야.
이에 반해 ‘상수’는 한 번 값을 정해주면 그 값을 그대로 가지고 있는 것을 뜻해.
상수는 변수처럼 $ 기호를 사용하지 않고 아래와 같이 define()이라는 명령을 사용해서 정의해.
define('상수명', '값‘) ;
이때 상수명은 꼭 '대문자'를 사용해.
소문자를 사용해도 되지만 변수와 구분하기 위해 상수는 꼭 대문자를 사용하는 게 일종의 관습이야.
앞에서 수정한 _config.php의 내용을 보면 DB접속 정보와 각 파일의 위치는 변하면 안 되니까 모두 상수 이름에 지정한 것을 볼 수 있어. 그런데 이걸 뭐에 쓸까?
가장 흔한 용도는 요기보드의 파일들의 폴더 위치가 바뀔 때 아주 유용해.
예를 들어 웹페이지를 작성하면서 그림파일을 아래와 같이 보여 주었다고 가정해봐.
<img src="/happyhome.png" alt="행복한우리집">
그런데 그림파일이 많아져서 관리를 위해 그림파일을 모두 /img 라는 하위폴더로 옮기고 싶어졌어. 그러면 그림을 보여 주는 모든 웹페이지를 찾아서 일일이 경로 위치를 수정해 줘야 할 거 아냐. 그런데 애초 작성할 때 아래와 같이 써 주면…
<img src="<?php echo IMG_PATH . '/happyhome.png' ?>" alt="행복한우리집">
IMG_PATH 라는 상수값이 /img 를 가지고 있으면 위 문장은 아래와 같이 해석되어 html 로 처리되어 보여지겠지?
<img src="/img/happyhome.png" alt="행복한우리집">
그러다 서버를 이전했는데 이번에는 내 홈피의 설치 경로가 /newpath라고 한다면? 그러나 지금처럼 _config.php에 상수를 정의해 두고 상수를 사용하면 아래와 같이 IMG_PATH 에 대한 값만 바꾸어 주면 돼.
define('IMG_PATH' , '/newpath/img');
어때? 편리할 것 같지 않아?

▶ $_SERVER['DOCUMENT_ROOT']
_config.php 파일의 15줄에 있는 $_SERVER['DOCUMENT_ROOT']는 ‘전역변수’로 불리는 독특한 변수야.
일반적으로 변수는 우리가 이름을 정하는데 이것은 이미 정해져 있어. 그래서 $로 시작하면서도 ‘대문자’를 사용해.
전에 변수이름 정할 때 꼭 ‘소문자’를 쓰라고 한 이유도, 이 전역변수와 구분하기 위해서였어.

$_SERVER['DOCUMENT_ROOT'] 는 서버의 루트문서 위치를 반환해 주는 함수야.
루트문서?
/ 이잖아. 아니었나…?
사실 루트(Root) 경로에는 2가지가 있어. 지금까지 말 안 해서 미안해..
웹서버에서 기본 html 문서 저장 폴더의 최상위 위치를 의미하는 루트경로와, 운영체제(윈도우 or 리눅스)에서 참조하는 루트경로가 그것이야.
이렇게 맨 앞의 ‘/’ 기호는 웹서버 문서 저장의 가장 최상위 위치를 뜻해.
즉 웹주소를 입력했을때 브라우저가 보여줄 수 있는 최상위 폴더가 / 표시야.

그런데 때로는 C:/mydocument/study 처럼 드라이브를 포함한 ‘절대경로’가 필요하기도 해.
대표적인 용도가 php에서 배운 include() 함수야.
여기서 특정 폴더에 있는 파일을 불러와 삽입하려면 경로를 절대경로인 'C:/….' 방식으로 알려 줘야 해.
카페24 의 웹서버에서 문서루트는 www 이지만 정확하게 웹서버에서의 위치는
  /계정ID/www
즉, 여러분이 카페24 웹호스팅 계정이 abcd 였다면 서버상에서의 위치는 '/abcd/www' 가 되는거지.
그런데 이 위치는 웹호스팅에 따라 또 서버 설치프로그램에 따라 다를 수 있어.
이때 문서루트의 경로를 알려주는 것이 바로 $_SERVER['DOCUMENT_ROOT']야. 그러므로 요기보드를 카페24의 호스팅을 신청해서 사용하는 경우의 절대경로 $root의 값은..

$root = '/abcd/www' ; 와 같은 값을 가지게 되는 거야.

그리고 그 아래 상수들의 값은 ‘$root+위치’이니 실제로는 아래와 같은 값으로 저장되겠지.
ROOT_DIR = '/abcd/www'
ADMIN_DIR = '/abcd/www/admin'
YOGI_DIR = '/abcd/www/yogi'
BBS_IMG_DIR = '/abcd/www/img/bbs'
또 만일 XAMPP 를 설치해서 여러분의 컴을 웹서버로 사용중이라면 루트폴더 $root의 값은..

$root = 'C:/xampp/htdocs' 이 될거야.

이제 html에서 사용하는 루트와 php의 include()에서 사용하는 루트의 차이점을 알겠지?
그래서 상수 이름도 둘을 조금 구분하려고 상대경로는 …_PATH 이름으로, 절대경로는 …_DIR라는 이름으로 구분했어. (이 상수 이름들은 내가 정한 거야.)
이 $_SERVER[ ] 함수에는 DOCUMENT_ROOT 외에도 아주 많은 기능이 있어.
나중에 네이버나 구글 검색에서 'php $_SERVER'로 검색해 보도록 해.
여기는 좀 어려웠지? 마지막 ‘세션’에 대해서는 [로그인] 부분에서 다시 설명할게...

▶ 설치폴더의 이해
요기보드를 설치하고 나면 아래와 같은 3개 정도의 하위폴더가 생성된 것을 볼 수 있을 거야.

admin / img / yogi

요기보드의 모든 파일을 모두 하나의 폴더에 때려 넣어도 상관없지만 홈페이지의 유지보수를 위해 기능별, 용도별로 하위폴더를 만들어 같은 종류의 파일들을 끼리끼리 모아서 관리하는 게 일반적이야.
그나마 요기보드여서 이 정도지 워드프레스나 타 웹보드를 설치해 보면 수십 개 폴더와 폴더마다 수백 개의 파일이 있어. 그래서 분석하기 너무 어려워.

그러나 일단 요기보드를 알고 나면 다른 보드를 해석하는 것도 훨씬 수월해질 거야.
요기보드도 Ver.1 에서는 user, css, skin 등을 포함해 6-7개 정도의 폴더로 만들었었는데 요기보드 처럼 초소형 웹보드에는 별 소용도 없더라구. 그래서 이번 Ver.3 에서는 딱 3개만 사용하기로 했어.
폴더별로 어떤 파일이 있는지 간단히 설명하고 넘어갈게.

▷ admin 폴더
관리자페이지에서 사용하는 파일들을 보관한 곳이야.
일반회원은 보면 안되는 회원리스트, 최근게시글, 관리자전용게시판 등을 처리하는 파일들이지.

▷ img 폴더
회원들이 게시판글을 쓸 때 첨부그림이 있으면 그림파일을 보관하는 곳이야.
img 폴더 안에 다시 bbs 라는 폴더가 있는데 그곳에 그림파일들을 보관해.
이렇게 img 폴더 안에 bbs 폴더를 다시 만든 것은 그림파일은 게시판에서만 사용하는게 아니거든.
여러분이 홈페이지를 꾸미기 위해 직접 올린 그림파일들도 있을 것이고, 다른 기능을 하는 테이블(예를들어 블로그용 테이블)을 추가해서 사용할 때에도 있을 거잖아.
그때는 또 해당 용도로 폴더를 만들어서 사용하면 관리가 편할거야.
예를들어 블로그용 테이블을 만들어 사용할 때는 그곳에서 발생하는 그림파일은 img/blog 라는 폴더를 만들어 그곳에서 사용하면 그림파일 이름이 겹칠 일도 없고 관리도 편리할거야.

그런데 이런 생각도 할 수 있어.
"그림파일은 DB 안에 저장할 수 없나?" 그러면 그림파일 폴더를 별도로 관리할 필요도 없고 편리할텐데...
나도 처음에 그런 생각을 했었어. 그런데 이건 득 보다 손해가 더 많아.
물론 데이터베이스 안에 그림파일도 넣어 저장할 수 있어.
그렇지만 그렇게 하면 데이터베이스가 엄청나게 커지고(그림파일은 원래 한 덩치하니까..) 또 브라우저에 보여주려면 DB에 저장된 내용을 임시 그림파일로 저장한 뒤에 다시 <img> 태그를 사용해서 보여 줘야해.(이중 작업이 된다는 거지)
그래서 특별한 이유가 있지 않는 한 그림파일들은 이렇게 별도로 관리하는 것이 대부분이야.

▷ yogi 폴더
요기보드의 핵심 파일들을 모아 둔 곳으로 게시글리스트, 보기, 추가, 댓글.. 등을 처리하는 PHP 조각모음들을 저장하는 폴더야.
여기에 있는 파일들은 단독으로는 사용이 안되고, 여러분이 만드는 PHP 파일에서 불러서(즉 include 해서) 사용하는 용도야.
여기에 있는 파일들을 잘 분석하면 요기보드가 어떻게 작동되는지 확실하게 알 수 있어.
단, php 코드들이 엉켜서 초보자들은 쉽지 않겠지만 개발자가 꿈이라면 반드시 넘어가야 할 산이야.
(그나마 다른 웹보드들에 비하면 정말 쉬운 코드들만 사용했으니 미리 걱정하지는 말고)
코드에는 관심없고 디자인만 중요한 사람들은 해당 PHP 파일에서 hmtl 과 css 관련 내용만 변경해서 사용하면 될거야.)


목차제 목조회
573
332
276
256
268
243
203
198
160
167
211
222
232
117
148
158
150
184