2013년 1월 23일 수요일

XAMPP 1.7.7 USB Lite For Windows 설치 및 사용


XAMPP 1.7.7 USB Lite For Windows
설치, 환경설정, 개발 방법


XAMPP 소개

XAMPP는 작고 가벼운 Apache 배포 프로그램이다. XAMPP는 거의 모든 일반적인 웹 개발 기술들을 단 하나의 패키지 안에 모두 담고 있어 웹 사이트 개발을 공부하는 학생들에 PHPMySql을 활용한 이상적인 개발환경을 제공한다. XAMPPhttp://www.apachefriends.org 에서 무료로 다운로드 받을 수 있으며 Full 버전과 USB Lite 버전이 있다. Full 버전은 전체 파일을 Windows 시스템에 설치하여 사용하는 방식이고 USB Lite 버전은 프로그램 운영에 필요한 모든 파일들은 하나의 디렉토리(폴더)에 압축을 풀어 놓고 실행되는 위치에 따라 상대적으로 필요한 파일들을 찾아 실행하도록 되어 있다. 또한 Windows의 레지스트리에 어떤 내용을 등록하지도 않기 때문에 파일들을 USB에 담아서 USB 드라이브에서 실행해도 된다. 여러 컴퓨터에서 작업하는 일이 많은 경우에는 USB Lite 버전이 적합하다고 볼 수 있다. USB Lite 버전을 삭제하려면 Uninstall 프로그램을 실행하는 것이 아니라 해당 폴더만 삭제하면 된다


XAMPP 설치
XAMPP 1.7.7 USB Lite 다운로드
XAMPPhttp://www.apachefriends.org 에서 무료로 다운로드 받을 수 있다. 20131월 현재 최신 버전인 1.8.1 이므로 이전 버전인 1.7.7 버전을 받으려면 다음 링크로 이동해야 한다.
먼저 http://www.apachefriends.org/en/xampp.html 사이트로 이동하자. 그러면 아래와 같이 XAMPP for Windows 영역이 표시된다


여기서  제목(XAMPP for Windows)를 클릭하면 아래 링크로 이동한다.
이 페이지를 살펴보면 상단에 최신 버전 버전에 포함된 소프트웨어들의 버전에 대한 표시 다음에 아래와 같이 이전 버전을 다운로드할 수 있는 SourceForge 링크가 표시되어 있다.





SourceForge 링크를 클릭하면 http://sourceforge.net/projects/xampp/files/ 로 이동한다.


이제 XAMPP Windows를 클릭하여 Window 버전의 XAMPP 리스트로 이동해보자.


위 화면에서 XAMPP 1.7.7. 버전을 클릭하면 아래와 같이 리스트가 표시된다




여기서 받으려고 하는 파일은 자동으로 압축을 풀수 있도록 실행파일로 되어 있는 xampp-win32-1.7.7-usb-lite.exe(54.0MB) 파일이므로 이 파일명을 클릭하여 다운로드 받아보자. 파일명을 클릭하면 새로운 페이지로 이동하는데 이 때 잠시 기다리면 다운로드가 시작된다.


XAMPP 1.7.7 USB Lite 설치하기
USB Lite 버전은 설치라기보다는 압축풀기라도 하는게 더 정확하지만 프로그램을 실행해서 설치를 진행해보자.

먼저 다운로드 받은 파일을 확인해보자.


이제 파일(xampp-win32-1.7.7-usb-lite.exe)을 실행해보자. 언어 선택 창이 먼저 나오는데 영어밖에 없다. OK를 눌러 다음으로 진행하자.



그러면 먼저 아래와 같은 알림창이 표시된다. 이것은 이 패키지가 USB Drive 와 같은 이동식 장치에서 사용되도록 맞춰져 있으므로 USB Drive를 선택하라는 내용이다. 또 USB가 없다면 하드디스크레 설치해도 된다고 설명하고 있다.


[확인] 버튼을 클릭하면 다음으로 진행한다. 그리고 다음 화면에서 [Next] 버튼을 클릭하면 아래와 같은 화면이 나온다. XAMPP를 설치할 위치를 묻는다. 여기서는 기본으로 표시되는 위치인 c:\xampp를 그대로 사용하기로 하자(나중에 USB에 xampp 폴더를 그대로 복사해도 프로그램은 이상 없이 실행된다). 이 화면에서 [Install] 버튼을 클릭하면 설치가 실행된다.





이제 모든 설치가 끝났다.

끝으로 XAMPP가 제대로 설치(복사) 되었는지 확인해보자.



XAMPP 1.7.7 USB Lite 삭제
XAMPP 1.7.7 USB Lite의 삭제는 위에서 설명한 것처럼 모든 프로그램을 종료하고 설치된 폴더만 제거하면 된다. 모든 프로그램을 종료할 때는 xampp_stop.exe를 실행해서 종료하는 것이 좋다.


XAMPP 1.7.7 USB LiteUSB 또는 외장하드에 저장해서 실행하기
XAMPP 1.7.7 USB LiteUSB나 외장하드에 넣고 다니면서 실행하려면 간단히 설치된 폴더를 통째로 복사해서 USB나 외장하드에 저장해놓고 필요할 때 USB나 외장하드에 저장된 XAMPP를 실행하기만 하면 된다.
그러나 단순히 XAMPPUSB에 옮기기만 하면 정상적으로 실행되지 않는다. 이에 대한 자세한 설명은 이 설명서의 뒷 부분을 참조하기 바란다.



XAMPP 시작과 종료

XAMPP Control Panel 시작

XAMPP Control PanelXMAPP에 구성된 ApacheMySql 등의 서버를 시작하거나 종료하고 환경을 설정할 수 있도록 해주는 도구이다.
아래 폴더를 표시한 그림을 보면 xampp-control.exe 파일이 있다


폴더에서 xampp-control.exe 파일을 더블클릭해서 실행해보자. 그러면 아래와 같은 XAMPP Control Panel 창이 나타난다.



Apache & MySql 시작
웹서버인 ApacheDBMSMySql을 시작해보자. XAMPP Control Panel에서 ApacheMySql 오른쪽의 [Start] 버튼을 누르면 화면은 아래와 같이 바뀐다.



Apache 확인
XAMPP Control panel에서 Apache를 시작했으면 Apache 옆의 [Admin] 버튼을 클릭해보자.

처음 실행하면 아래 그림과 같이 XAMPP 페이지의 언어 선택화면이 보인다.
English를 선택하여 다음으로 넘어가보자(한 번 선택하면 다음부터는 언어선택 화면이 보이지 않는다).
다음으로 보이는 화면 http://localhost/xampp/index.php" 페이지에는 XAMPP의 정보, PHP 예제, CGI(Perl)JAVA 예제, phpMyAdmin 링크 등이 포함되어 있다. 한 번 살펴보기 바란다







phpMyAdmin 실행
XAMPP Control Panel에서 MySql 옆의 [Admin]을 클릭하면 MySql의 웹기반 관리도구인 phpMyAdmin 브라우저에 열린다. 그러나 어떤 환경에서는 이 버튼을 눌러도 아무 반응이 없다. 이 때는 직접 브라우저를 열어서 http://127.0.0.1/phpmyadmin/ 또는 http://localhost/phpmyadmin/ 로 직접 접근 가능하다.
초기 상태에서는 MySqlroot 계정에 암호가 설정되어 있지 않아 바로 phpMyAdmin이 열릴 것이다. 만일 아이디와 패스워드를 묻는 화면이 나온다 해도 그냥 [Go] 버튼을 누르면 다음 화면으로 이동한다.
PhpMyAdmin UI 변경하기
이전 버전의 phpMyAdmin에 익숙해져 있다면 새로운 환경에 적응이 어려울 수도 있다.
이 화면을 익숙한 이전 버전의 형태로 바꾸려면 phpMyAdmin의 첫 화면(또는 상단의 localhost를 클릭해서 이동한 화면)에서 Appearance Settings 영역의 Theme/Style에서 Original을 선택하면 된다.


위와 같이 해서 Theme을 변경하면 아래와 같이 바뀐다.



Apache, MySql, XAMPP Control Panel 종료


ApacheMySql을 개별적으로 종료하려면 Control Panel에서 각각의 [Stop] 버튼을 누르면 된다. 그렇다면 ApacheMySql을 포함해서 XAMPP를 모두 종료하려면 어떻게 해야 할까?


XAMPP Control Panel 창의 오른쪽 위 모서리에 있는 [X] 버튼은 XAMPP를 종료하는 버튼은 아니다. 그냥 창을 닫아줄 뿐이다. XAMPP Control Panel이 실행되었다면 Windows 화면의 오른쪽 하단에 아래와 같이 XAMPP 아이콘이 표시된다. 이 아이콘은 XAMPP Control Panel을 보여주거나 감추는 역할만 수행한다.

 

XAMPP를 종료하려면 이 아이콘을 눌러 XAMPP Control Panel을 보이게 한 후 ApacheMySql을 각각 Stop 해주고 Exit 버튼을 누르면 된다.
XAMPP가 설치된 경로에서 xampp_stop.exe를 실행하는 것이다. 이 프로그램을 실행하면 가장 확실하게 XAMPP 관련 프로그램들을 종료해준다. 하지만 XAMPP가 실행되고 있지 않을 때 xampp_stop.exe를 실행하면 에러메시지가 표시된다




XAMPP 테스트
PHP 테스트
지금까지의 과정에 문제가 없었다면 PHP도 정상적으로 작동하는 것이다. 그래도 간단히 PHP를 테스트해보기로 하자.
XAMPP 홈디렉토리 파악하기
홈디렉토리란 서버를 브라우저에서 접근했을 때 문서나 미디어 또는 프로그램을 보여주거나 실행하는 기준 위치를 말한다. , http://127.0.0.1 과 같이 브라우저에서 접근했을 때 서버가 찾는 서버 저장 공간의 위치를 말한다.
기본설치를 했다면 이 XAMPP 버전의 홈디렉토리는 C:\xampp\htdocs가 된다.
이 설정은 나중에 변경할 수도 있는데 apache 폴더 안의 conf 폴더에 저장되어 있는 httpd.conf 파일에서 DocumentRoot 설정을 변경하면 된다. 그러나 여기서는 개념만 파악하고 그대로 두기로 하자.



XAMPP 설치 경로를 확인하기 위해 XAMPP Control Panel에서 오른쪽 버튼 중 [Explorer...] 버튼을 눌러보자.


아래와 같이 폴더가 열릴 것이다. 이 폴더 중에서 htdocs가 홈디렉토리이다.



이제 홈디렉토리인 htdocs를 열어서 내용을 확인해보자. 기본적으로 xampp 관리 페이지가 표시되도록 여러 파일들이 저장되어 있다.





여기(htdocs)test.php 파일을 하나 만들어 저장하고 내용을 아래와 같이 해보자.

 <?php
 $test = "PHP 테스트입니다";
 echo $test;
 ?>

그리고 브라우저에서 http://127.0.0.1/test.php 를 열어보자. 아래와 같이 나오면 ApachePHP가 정상 작동하는 것이다.



MySql root 비밀번호 설정하기
초기 상태에서 MySql의 관리자인 root 계정에는 패스워드가 걸려있지 않다. 그래서 IDPassword도 묻지 않고 그냥 열리게 된 것이다. root 계정에 패스워드 설정하는 방법을 알아보자.
아래 phpMyAdmin 화면을 보자. 그러면 화면의 General Settings 영역에 Change password 링크가 보일 것이다. 이 링크를 클릭해보자





그러면 아래 그림처럼 패스워드 변경화면이 보일 것이다. 이 패스워드 변경은 현재 로그인 되어 있는 사용자의 패스워드를 변경하는 것인데, 기본적으로 root가 로그인 되어 있으므로 root 의 패스워드를 변경하는 것이다. 여기서 passwordxampp를 입력하고 Re-type에 또 다시 확인을 위해 xampp를 입력한 후 [Go] 버튼을 눌러보자.





이제 MySqlroot 계정의 암호는 xampp 로 설정되어 앞으로는 로그인을 정확히 해야만 phpMyAdmin에 접근할 수 있다.

phpMyAdmin에 비밀번호를 입력하지 않고 접근한 경우





MySql root 계정에 비밀번호를 설정하는 또 다른 방법은 다음과 같다.
브라우저에서 http://localhost/security/ 또는 http://127.0.0.1/security 주소로 들어가보자.
아래와 같은 화면이 보이고 "The MySQL admin user root has NO password"라는 문구가 보일 것이다.


이제 패스워드를 설정해보자. 위 그림에서 하단에 보면 다음과 같은 링크가 보일 것이다.
이 링크를 클릭하면 아래와 같은 화면이 보인다.




위 그림에서 MYSQL SECTION: "ROOT" PASSWORD 부분의 New passwordRepeat the New password(패스워드 확인)에 같은 비밀번호를 입력한다.
여기서는 패스워드를 xampp 로 입력하기로 하자.

그리고 나서 [Password changing] 버튼을 누르면 비밀번호 설정이 끝났다는 메시지가 표시된다.
The root password was successfully changed. Please restart MYSQL for loading these changes!
이제 XAMPP Control Panel에서 MySql 옆의 [Admin] 버튼을 눌러 phpMyAdmin 화면을 열어보자. 아래와 같이 사용자 이름과 암호를 묻는 창이 뜬다. 이 때, rootxampp를 각각 입력하고 [확인] 버튼을 누르면 로그인이 되어 phpMyAdmin 페이지로 들어갈 수 있다.
나중에 패스워드를 다른 것으로 변경하려면 위와 같은 과정을 또 한 번 실행하면 된다.



XAMPP 간단 예제 만들기
이제 XAMPP의 설치가 모두 끝났으므로 간단한 예제를 만들어 테스트해보기로 하자. 여기서는 주소록 만들기를 시도해볼 것이다. 주소록은 xampptest 라는 DB안에 addressbook 이라는 테이블에 저장되어 있으며, 테이블은 id, name, email, phone4field를 갖는 것으로 하자.

XAMPP 홈디렉토리(htdocs) 정리하기
나만의 웹 사이트를 만들고자 하면 홈 디렉토리(htdocs)를 정리해야 한다. XAMPP를 처음 설치했을 때 기본으로 만들어진 htdocs에는 xampp 환경설정 등을 위해 필요한 여러 웹 응용프로그램들이 포함되어 있다. 개발자라면 이 디렉토리를 그냥 사용하지 않을 것이다. 홈디렉토리를 정리하는 방법은 몇 가지가 있는데 첫 번째가 새로운 디렉토리를 만들고 나서 Apachehttpd.conf 파일을 수정하는 방법이 있다. 예를 들어 xampp 폴더에 myhome를 만들고 이 폴더를 홈디렉토리로 사용하려고 하면 httpd.conf 파일을 열고 DocumentRoot를 찾아서 DocumentRoot "/xampp/htdocs" 부분을 DocumentRoot "/xampp/myhome"으로 수정하면 된다. httpd.conf 파일은 XAMPP 디렉토리의 Apache 아래 Conf 폴더 안에 있다(, C:\xampp\apache\conf). DocumentRoot 설정을 수정하고 나서 Apache를 재시작(Stop Start)하면 새로운 홈디렉토리가 적용된다.
그러나 위와 같이 서버의 환경을 변경하는 것은 전문가가 아닌 경우에는 바람직하지 않다. 따라서 처음부터 설치되어 있던 htdocs 폴더의 이름을 변경하고 새로운 htdocs 폴더를 만드는 것이 더 간단할 것이다.
처음 설치되어 있던 htdocs 폴더의 이름을 변경하려면 Apache를 종료해야 한다. 반드시 종료해야 하는 것은 아니지만 가급적 종료할 것을 권장한다. XAMPP Control Panel에서 ApacheStop 하고 나서 htdocshtdocs_old로 변경한 후 htdocs를 새로 만든 다음 ApacheStart하면 된다. 이 때 혹시라도 기존의 htdocs에 있던 파일을 메모장이나 편집기 등으로 열어둔 것이 있다면 모두 닫고 이 작업을 수행해야 한다.



그리고 브라우저에서 열어보면 아래 그림처럼 페이지에 표시할 내용이 없다고 표시되는 것을 확인할 수 있다.



데이터베이스 만들기(MySql DB Table)
DB 만들기
먼저 phpMyAdmin에서 DB를 생성한다. DB의 이름은 xampptest"로 하자.
앞에서 MySql root 계정의 암호를 xampp로 해두었으므로 phpMyAdmin을 열면 아이디와 패스워드를 묻는다. rootxampp를 입력하여 phpMyAdmin 관리 화면으로 들어가 보자.
다음으로 화면 상단의 Database 탭을 눌러 Database 화면으로 이동하자. 그러면 새로운 데이터베이스 생성(Create new database) 영역이 아래 그림과 같이 표시된다.


이 때 DB 명 오른쪽의 Collation 콤보박스에서 utf8_general_ci를 선택하는 것을 잊지 말자. 그래야 한글을 포함한 대부분의 일반적인 언어들을 무난하게 표시할 수 있다.
위 화면의 Create new database 아래에 DB이름 "xampptest"를 입력하고 옆의 [Create] 버튼을 클릭해보자. 그러면 화면 아래에 아래 그림과 같이 새로운 데이터베이스가 생성되어 목록에 표시될 것이다.



테이블 생성
이제 테이블을 만들어보자. 위 그림에서 새로 만든 데이터베이스 이름(xampptest)을 클릭해보자. 그러면 다시 테이블 생성 화면으로 이동한다. 테이블 생성을 위한 화면이 표시되면 테이블을 생성해보기로 하자. 테이블 이름은 “addressbook"으로 하기로 하고, columns4로 한 후에 [Go] 버튼을 클릭해보자



그러면 아래와 같은 새 창이 표시된다. 그러면 아래의 테이블 정보를 참조하여 필드명, 타입, 길이, Extra, Key 등의 속성을 입력 및 선택한 후 Save 버튼을 눌러 테이블을 생성한다.

<addressbook 테이블 정보>
Field Type Length/Values Extra Key
id int 11 auto_increment primary key
name varchar 30
email varchar 100
phone varchar 20




데이터 입력
이제 데이터를 입력해보자. 아래 표를 참조하여 데이터를 입력한다.

id name email phone
1 장동건 jang@testmail.co.kr 11111111
2 송중기 song@testmail.co.kr 22222222
3 정우성 jung@testmail.co.kr 33333333
4 홍길동 hong@testmail.co.kr 44444444

아직 폼 페이지를 만들지 않았으므로 아래와 같이 insert 화면에서 데이터를 입력한다.



끝으로 localhost > xampptest > addressbook > Browse에서 아래와 같이 DB 목록을 확인해보자.





PHP 코딩하고 실행하기
텍스트 편집기(Dreamweaver 또는 Editplus )를 열어 아래와 같이 코드를 입력하고 c:\xampp\htdocs\addressbook.php로 저장한다. 이 때 문서는 반드시 utf-8로 저장해야 한다. 영문만 포함되어 있는 경우에는 상관없지만 한글이 포함된 문서를 저장할 때는 utf-8로 해야 한다. 물론, DB Collationeuc-kr로 했거나 모두 할 때는 euc-kr로 해야 하지만 앞으로 가급적 모든 작업을 utf-8 형식으로 하기로 하자. utf-8로 모든 텍스트 인코딩을 해야만 앞으로 AJAX 예제를 활용할 때도 한글 깨짐 등을 방지할 수 있다.

예제) c:\xampp\htdocs\addressbook.php

 <?php
 //DB 연결 만들기
 mysql_connect("localhost","root","xampp");
 mysql_select_db("xampptest");
 //한글 깨짐 방지 설정
 //XAMPP와 함께 설치된 MySql 기본 설정에서는 DB와 테이블을 utf-8로 만들어도 한글이 깨짐
 mysql_query("set names utf8");
 //쿼리 실행
 $result = mysql_query("SELECT * FROM addressbook");
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>나의 첫번째 XAMPP 프로그램</title>
 </head>
 <body>
 <h1>나의 주소록</h1>
 <table border="1" cellpadding="2" cellspacing="3">
 <tr>
 <th>번호</th>
 <th>이름</th>
 <th>이메일</th>
 <th>연락처</th>
 </tr>
 <?php
 while($row = mysql_fetch_array($result)) {
 echo "<tr>";
 echo "<td>" . $row['id'] . "</td>";
 echo "<td>" . $row['name'] . "</td>";
 echo "<td>" . $row['email'] . "</td>";
 echo "<td>" . $row['phone'] . "</td>";
 echo "</tr>";
 }
 //데이터베이스 닫기
 mysql_free_result($result);
 mysql_close();
 ?>
 </table>
 </body>
 </html>

addressbook.php 실행화면



아래 부분부터는 전국기능경기 관련 설명이다. 2013년부터 웹서버환경이 AMP_Setup 5에서 XAMPP 버전으로 바뀜에 따라 알아두어야 할 내용들이다.

AMP_SETUP 5 vs XAMPP 1.7.7
이제 여러분은 간단하게나마 XAMPP를 설치하고 DB를 만들고 PHP 프로그램을 작성해보았다. 이제 XAMPP 1.7.7 버전의 특징을 살펴보기 위해 국내에서 오래 전에 사용하던 APM_SETUP 5(2004518일 버전)과 비교해보자. AMP_Setup 5 버전은 무려 8년 가까지 국내의 기능경기대회에서 사용되어 왔다. AMP_Setup 5 버전은 최신의 Apache + PHP + MySql 통합 환경에 비해 포함하고 있는 소프트웨어의 버전이 다르다 보니 많은 제약이 있었다. 각각 포함하고 있는 주요 소프트웨어들의 버전을 비교해보자.



MySql 4.0.18 vs MySql 5.5.27
가장 큰 제약은 AMP_Setup 5에 포함된 MySql 4.0.18 버전이 유니코드(UTF-8)를 지원하지 않는 것이다. 따라서 문자의 표현에 제약이 많았고, 결과를 UTF-8 문자형식으로 돌려주는 AJAX 기능을 사용할 경우에는 별도의 문자열 변환 작업을 해주어야만 했다. 또한 Select 문 안에 또 다른 Select 문을 사용할 수 있는 서브쿼리(Sub Query)를 지원하지 않는다. 아래 표를 참조해보자. 거의 대부분의 변화가 4.1 버전에서 이루어져 있다.

Version 추가/변경/삭제 내용
5.5 [변경] MyISAM 대신 InnoDB가 MySQL의 기본 스토리지 엔진으로 채택
5.4.2 [변경] Plugin버전의 InnoDB가 Builtin 버전으로 다시 적용
5.1.38 [추가] InnoDB Plugin
5.1.24 [추가] "SHOW PROFILE"
5.1.12 [추가]"general_log" 파라미터
[변경]General query log를 동적으로 변경 가능
5.1.8 [추가]"Mixed" 복제 모드
5.1.6 [추가]Partition pruning 기능
5.1.5 [추가]EXPLAIN PARTITIONS(파티션 테이블의 실행 계획) 지원
[추가]"RBR"(Row Based Replication) 복제 모드
5.1 [추가]Plugin API 도입, Plugin버전의 InnoDB 릴리즈 (InnoDB 의 많은 성능 개선과 변화가 있음)
[삭제]BDB 스토리지 엔진
5.0.32 [추가]"SHOW PROFILES"
5.0.7 [추가]LIMIT의 파라미터도 PreparedStatement에서 변수화 가능
5.0.5 [변경]BIT 데이터 타입이 MEMORY, InnoDB, BDB, NDBCLUSTER 스토리지 엔진에 구현됨
5.0.3 [추가]FEDERATED 스토리지 엔진
[추가]신규 함수 추가 STDDEV_POP() STDDEV_SAMP() VAR_POP() VAR_SAMP()
[변경] BIT 데이터 타입이 TINYINT와 호환성 없어짐
[변경]NUMERIC와 DECIMAL 타입의 저장 방식이 String에서 Binary로 변경
5.0.2 [추가]TRIGGER 도입
5.0.1 [추가]VIEW 도입
[변경]HAVING 조건에 SELECT컬럼, GROUP-BY컬럼, OUTER-서브쿼리의 값 사용 가능(ANSI 표준)
5 [추가]StoredRoutine (Procedure,Function) 도입, CURSOR 도입, Archive 스토리지 엔진
[추가]INFORMATION_SCHEMA 딕셔너리 데이터베이스 도입 (ANSI 표준)
[삭제]ISAM 스토리지 엔진 제거
4.1.11 [추가]Blackhole 스토리지 엔진
4.1.4 [추가]CVS 스토리지 엔진
4.1 [추가]SubQuery 도입
[추가]WHOW WARNINGS
[추가]CREATE TABLE ... LIKE ...
[추가]GROUP_CONCAT() 구현
[추가]유니코드(UTF8, UCS2) 지원
[추가]GIS 관련 기능(Spatial extension) 지원
[추가]ALTER DATABASE 명령 지원
[추가]DUAL 테이블 내부 지원(타 DBMS와의 호환성 유지)
[추가]"SELECT 1" 명령과 "SELECT 1 FROM DUAL" 명령은 동일
[추가]Memory 스토리지 엔진에서 B-Tree 허용
[추가]EXPLAIN EXTENDED 구현
[변경]Column 코멘트 구현(CREATE TABLE...)
[변경]PASSWORD() 함수의 알고리즘 업그레이드
[변경]기존 알고리즘은 OLD_PASSWORD()로 변경됨
[변경]CHAR, VARCHAR 타입의 길이가 바이트수에서 문자수로 변경됨
[변경]파생 테이블(Derived tables) 내에서 UNION 사용 가능
4.0.18 [변경]"TYPE" 키워드가 "ENGINE" 키워드로 변경(CREATE TABLE...)
4.0.14 [추가]InnoDB의 BLOB와 TEXT 타입에 대한 인덱스 지원
4.0.4 [추가]JOIN DELETE (Multiple Delete) 도입, JOIN UPDATE (Multiple Update) 도입
4.0.2 [추가]Memory 스토리지 엔진에서 NULLABLE 컬럼의 인덱스 지원
[변경]VARCHAR 컬럼의 길이가 1~255에서 0~255로 변경됨
4.0.1 [추가]Query Cache 도입
4 [추가]UNION 집합 연산 도입
[추가]SQL_CALC_FOUND_ROWS 힌트와 FOUND_ROWS() 함수 구현
[변경]UPDATE와 DELETE 구문에 ORDER BY 사용 허용
3.23 [추가]EXPLAIN(쿼리 실행계획) 구현, 전문 검색(Fulltext search) 도입
[추가]JOIN(SELECT만) 도입, NULL-SAFE 연산자(<=>) 도입
[변경]길이가 0인 CHAR 컬럼 허용





PHP 4.3.6 vs 5.3.8
PHP 4.x.x 버전과 5.x.x 버전의 가장 큰 차이로는 객체지향 프로그래밍을 지원한다는 점에서이다. 이 점에 대해서는 나중에 Class에 대해 배우게 될 때 자세히 알게 될 것이다.
사용환경의 변화
이번에는 APM_Setup 5를 사용하다가 XAMPP 1.7.7을 사용하면서 겪을 수 있는 당황스러운 일에 대해 살펴보자.
정의되지 않은 변수 또는 배열 등을 사용할 때 에러 발생
아래와 같은 코드를 저장하고 실행해보자.
<?php
echo $_GET['test'];
echo $test;
?>
AMP_Setup 5에서는 물론 화면에 아무것도 나오지 않았을 것이다. 그런데 XAMPP 1.7.7.에서는 사정이 다르다. 위 코드를 XAMPP 1.7.7 버전에서 실행해보면 아래와 같은 에러메시지를 만나게 될 것이다.
Notice: Undefined index: test in C:\xampp\htdocs\test.php on line 2
Notice: Undefined variable: test in C:\xampp\htdocs\test.php on line 3
이 에러는 할당되지 않은 변수에 대해 출력을 하려고 하거나 연산을 하려고 하거나 다른 변수에 할당하려고 할 때 나타난다.
이전에는 보이지 않던 에러가 왜 XAMPP 1.7.7에서는 나타났을까?
이 것은 PHPregister_globals 그리고 error_reporting 설정과 관계되어 있다.
PHP의 환경 설정은 C:\xampp\php\php.ini 파일에 저장되어 있다.
register_globals는 변수처리에 관련된 설정이다. 이 값이 On으로 되어 있으면 변수가 get 변수인지, post 변수인지 또는 session 변수인지 체크하지 않는다. 따라서 변수가 실제로 선언되어 있지 않아도 넘어가게 되는 것이다. 그런데 이 값이 Off로 되어 있으면 변수를 분명히 구분하여 실제 선언된 변수인지 확인해야만 한다. XAMPP 1.7.7에 포함된 php 5.3.8은 이 값이 Off로 되어 있다. 이 값이 register_globalsOn으로 되어 있다면 변수가 선언되어 있는지 확인하지 않고도 사용할 수 있지만 이는 앞으로 보안상 권장하지 않는 부분이고 또 앞으로 php에서 사라질 설정이다. register_globals에 대한 설명은 php 보안 부분에서 한 번 더 다룰 것이다.
error_reporting은 어떤 경우에 화면에 php의 에러메시지를 보여줄 것인가 하는 설정이다. 기본적으로는 모든 에러메시지를 표시하게 되어 있다. php.ini error_reporting 부분을 수정하면 이러한 에러가 근본적으로 나오지 않게 할 수도 있다. 그러나 결코 권장하지 않는 방법이다. 왜냐면, 개발자는 자신의 코드가 어떤 환경에서도 문제없이 작동할 수 있도록 개발해야 하기 때문이다. 따라서 소프트웨어 개발자가 무심코 서버의 설정을 건드리는 것은 바람직하지 못하다. 대신에 다음의 두 가지 방법을 사용할 수 있다.
변수를 처리할 때 isset() 함수를 사용하여 변수가 할당되어 있는지 확인하는 방법
isset 함수는 () 안에 입력한 변수가 실제 메모리에 할당되어 있는지 확인하는 함수이다. 이 함수를 활용하여 위 코드를 아래와 같이 수정하면 에러는 발행하지 않을 것이다.
<?php
if( isset($_GET['test']) ) echo $_GET['test'];
if( isset($test) ) echo $test;
?>
PHP 에러처리에 대한 서버값을 변경함(php.ini를 수정하지 않고 코딩으로 처리)
모든 프로그램의 시작 부분에 error_reporting(E_ALL ^ E_NOTICE); 코드를 삽입하고 시작하면, 그 다음부터는 위와 같은 변수 할당 에러는 나타나지 않을 것이다.
<?php
error_reporting(E_ALL ^ E_NOTICE);
echo $_GET['test'];
echo $test;
?>
그러나 번 방법은 크게 권장하지 않는다. 에러메시지를 나오게 하지 않으면 어떤 실수가 있는지 확인할 방법이 없기 때문이다. 따라서 선수들은 항상 과 같이 하기 바란다. 번 방법은 개발자가 되어서 모든 개발과 시험을 마친 후 최종 배포할 때는 필요하다. 혹시라도 발생할지 모르는 에러가 화면에 메시지를 그대로 보여준다면 해커들에 의해 시스템 정보가 노출되는 문제가 있을 수도 있기 때문이다.
USBXAMPP 옮겨 사용하기
XAMPP 1.7.7 USB Lite 버전은 WindowsSystem Registry에 정보를 등록하지 않으므로 USB에 옮겨서 실행할 수 있다.
XAMPP 1.7.7 USB Lite 버전을 USB에서 실행하려면, 처음부터 USB에 설치하는 방법도 있지만 하드디스크에 설치해놓고 작업하다기 USB에 옮겨서 사용할 수도 있다.
PC의 하드디스크(예를 들어 C 또는 D)에 설치한 XAMPP 1.7.7 USB Lite 버전을 USB나 외장하드에 옮기려면 먼저 XAMPP를 모두 종료하고 XAMPP Control Panel도 닫은 후에 xampp 폴더를 통째로 복사 또는 이동하여 USB에 옮기면 된다.
이 때 c:\xampp를 반드시 usb의 루트에 복사할 필요는 없다. , usbg 드라이브라고 가정하면 c:\xamppg:\xampp로 복사할 수도 있지만 g:\webdesign\xampp로 저장해도 된다. 또는 g:\webdesign\xampp.1.7.7 이라고 이름을 변경해도 된다.
그런데 폴더를 옮기고 바로 실행하려고 하면 아래 그림처럼 Busy... 라는 에러가 메시지가 표시되면서 정상적으로 실행되지 않는다.



이것은 XAMPP 사용환경이 변화했기 때문이다. 먼저 드라이브도 c에서 g로 변경되었고, 폴더도 변경되었기 때문이다. xampp 1.7.7 usb lite는 이렇게 환경이 변경된 것을 xampp 프로그램의 설정에도 변경해주기 위해서 setup_xampp.bat 라는 실행파일(엄밀히 말하면 명령어를 묶어 놓은 배치파일)을 제공한다.
XAMPP를 다른 드라이브에 이동하고 실행하려면 이동식 디스크의 xampp 폴더를 열어 아래와 같이 setup_xampp.bat 파일이 있는지 확인하고 마우스를 더블클릭하거나 파일을 선택한 후 엔터키를 눌러 실행해보자.





그러면 아래와 같이 USB에 옮겨졌으며 이 새로운 환경을 적용할 것인지 묻는다. 아래 그림을 보면 webdesign 아래에 xampp가 저장되어 있고 이 위치를 반영하여 환경을 변경하려면 1번을 눌러 갱신하라고 알려준다. x를 누르면 종료한다.





변경된 환경을 적용하기 위해 1을 입력하고 엔터키를 눌러보자. XAMPP 실행 환경을 변경했다는 메시지가 나오고 아무 키나 누르면 명령창이 닫힌다.


그리고 나서 xampp-control.exe를 실행해서 다시 Apache와 MySql을 시작해보자. 아래와 같이 정상적으로 실행되는 것을 확인할 수 있다.



이 과정은 XAMPP를 다른 곳에 복사, 또는 이동하는 경우 뿐만 아니라 USB를 다른 컴퓨터에 꽂아서 사용할 때도 거쳐야 한다. 왜냐면 USB만 다른 컴퓨터에 꽂는 경우 드라이브명이 대개는 바뀌기 때문이다.
* setup_xampp.bat를 실행했는데 아래 그림처럼 처리할 일이 없다고(nothing to do!)표시되는 경우가 있다. 이 때는 이미 해당 경로에서 setup_xampp.bat를 실행하여 환경설정 파일이 이미 변경되어 있으므로 더 할 작업이 없다는 뜻이다. 그냥 xampp-control.exe.를 실행하면 된다.
물론 이 경우라 하더라도 드라이브가 바뀌면 또 실행해주어야 하므로 할 수 있으면 매 번 실행하기 전에 확인해보는 것이 좋다.




 여러 선수의 작품을 평가할 때

기능경기에서 여러 선수들이 제출한 작품을 평가할 때 XAMPP를 일일이 재설치하거나 폴더명을 변경하거나 하는 것은 무척 번거롭고 많은 시간을 소비하게 만든다.
다음과 같이 하면 이 작업을 보다 간편하게 수행할 수 있다.
선수 제출 파일 저장 방법
1) 바탕화면에 선수 비번호(101, 102...)의 폴더를 하나 만들도록 한다.
2) 비번호 폴더 안에 모듈별 폴더를 A, B, C, D, E 와 같이 만들도록 한다.
3) A, B 모듈과 같이 xampp가 사용되지 않는 경우 해당 파일만 복사하도록 한다.
4) C, D, E 모듈과 같이 xampp를 사용하는 경우 자신의 PC에서 작업하던 xampp 폴더를 통째로 복사해서 각 모듈 안에 붙여 넣도록 한다. 이렇게 하면 101 선수의 C 모듈은 바탕화면\101\C\xampp 에 저장된다.
* 이 때 반드시 선수들은 XAMPP Control Panel에서 ApacheMySqlStop 하고, Exit 버튼을 눌러 XAMPP Control Panel까지 종료해야 한다.

  



선수별 파일 수집 방법
1) 심사위원은 외장하드 또는 USB에 선수의 폴더를 복사하여 심사위원석 컴퓨터에 복사한다. 이 때 심사위원석 컴퓨터에 복사하는 위치는 바탕화면이나 다른 어떤 곳이든 관계없다.
2) 파일을 컴퓨터의 하드디스크에 복사할 때는 역시 선수별 비번호 폴더 안에 모듈별로 복사한다. 역시 심사위원 컴퓨터에 XAMPP가 실행되고 있다면 종료 한 후 복사를 해야 한다.
아래 그림은 C:\webdesign2103 이라는 폴더를 만들어 선수별 비번호를 만들고 모듈별 파일을 저장한 예이다. 뒤에서 설명하겠지만 선수별 작품을 바탕화면 같이 폴더 명이 길고 한글이 포함된 경우 에러가 날 수 있다. 따라서 가급적 짧은 경로를 선택하여 저장하는 것이 좋다.



 




선수별 xampp 작업 채점 방법
예를 들어 101번 선수의 C 모듈을 xampp 서버를 실행하여 채점하고자 할 때 다음과 같이 하면 된다.
1) 먼저 이미 실행되고 있는 XAMPP는 종료한다. XAMPP Control Panel에서 ApacheMySqlStop 버튼을 눌러 종료된 것을 확인하고, XAMPP Control PanelExit 버튼을 눌러 XAMPP Control Panel을 종료한다.
2) 내 컴퓨터 또는 탐색기를 통해 채점하고자 하는 선수의 해당 모듈 폴더로 이동한다. 예를 들어 101 선수의 C 모듈이라면 아래와 같이 이동하면 된다.



3) 폴더에서 setup_xampp.bat를 실행한다. 그러면 아래 그림과 같이 현재 xampp를 실행하는 경로가 표시되고 이 정보로 xampp 실행환경을 변경할 것인지 묻는다. 이 때 1을 입력하고 엔터키를 눌러 환경을 변경해준다.


4) 다음으로 아래와 같이 환경을 변경했다는 화면이 표시되면 아무 키나 눌러 명령 실행창을 닫는다.



5) 이제 폴더에서 xampp-control.exe 파일을 더블클릭해서 실행한다.



6) 웹브라우저에서 http://127.0.0.1 을 입력해 선수의 홈페이지를 열어 채점을 시작한다.



7) 한 선수의 작품을 평가하고 다른 선수의 작품을 평가하려면 XAMPP를 종료한다. XAMPP 종료는 위 XAMPP Control Panel에서 Apache와 MySql 옆의 Stop 버튼을 눌러 종료된 것을 확인한 후 Exit 버튼을 눌러 종료한다. 간혹 어떤 에러로 인해 Apache나 MySql이 정상적으로 종료되지 않을 때가 있다. 이렇게 되면 다른 선수의 작품을 평가할 때 문제가 발생할 수 있으므로 Ctrl + Alt + Del 키를 눌러 Windows 작업 관리자를 열어 프로세스 탭에서 mysql, apache, xampp 등이 실행되고 있는지 확인한 후 있다면 선택하고 프로세스 끝내기 버튼을 눌러 강제 종료해주어야 한다.









8) XAMPP를 정확히 종료하고 나서 다른 선수의 작품을 평가하려면 위 2)번부터 반복적으로 실행하면 된다. 예를 들어 c:\webdesign2013\102\C에 들어 있는 102번 선수의 C 모듈을 xampp를 실행하여 평가하려면 아래 그림과 같이 이동한 후 setup_xampp.bat를 실행하여 XAMPP의 실행 환경을 변경해준다.





 9) 위와 같이 XAMPP 실행 경로 설정이 끝났으면 xampp-control.exe를 실행한다.


10) XAMPP Control Panel에서 ApacheMySqlStart 하여 아래와 같이 이번에는 XAMPPc:\webdesign2013\102\C\xampp에서 실행되고 있음을 확인하고 브라우저에서 http://127.0.0.1/ 를 열어 홈페이지를 열어보자.





위와 같은 과정을 반복하여 모든 선수의 작품을 평가할 수 있다.
채점 시 주의사항
1) 채점용 PC의 작품 저장 경로
선수들의 작품을 평가하려고 심사위원 PC에 저장할 때 바탕화면과 같이 경로가 길어지거나 한글 폴더인 곳에 두면 XAMPP를 실행하거나 종료할 때 에러가 발생할 수 있으니 가급적 c:\web 과 같은 짧은 경로에 저장해두는 것이 좋다.




2) Cache 문제 주의
Internet Explorer(IE)와 같은 브라우저는 Cache 파일을 사용하여 브라우징 속도를 개선하는 방법을 사용하는데 이 경우 IEURL 기준으로 Cache 파일을 저장하므로 한 컴퓨터에서 계속 127.0.0.1을 열어 보면 같은 이름의 파일명 예를 들어 logo.gifCache에서 찾게 된다. 이 때 선수들이 같은 파일명을 사용했다면 다른 선수가 사용한 logo.gif 가 열릴 수 있다. 이렇게 되면 이미지 크기나 내용이 달라 잘못 채점 될 수 있다.
따라서 이런 문제를 방지하려면 IE 경우 [도구] 메뉴 -> [인터넷 옵션] -> [일반]- >검색 기록 영역의 [설정] 버튼을 눌러 [임시 인터넷 파일]에서 저장된 페이지의 새 버전 확인페이지를 열 때마다로 체크해주는 것이 좋다.
그리고 페이지가 이상하게 표시되는 경우에는 Shift 키를 누른 상태에서 새로고침 버튼이나 [F5] 키를 눌러 페이지를 갱신해보는 것이 좋다.



이 글은 누구나 참조하여 사용할 수 있지만 무단으로 다른 저작물에 옮겨가는 것은 허용되지 않습니다. 2013.01. 작성자 유승열(asimryu@gmail.com)



댓글 2개:

  1. 만약에 htdocs 아래에 php 코드를 넣어서 실행시키는것이 아니라 xampp 폴더와 같은 레벨에 위치하도록 새로운 폴더를 생성하고 그 안에 php코드들을 넣어서 실행시키려고 하면 주소창에 어떻게 입력해야 브라우저에 뜰까요..?

    답글삭제
  2. 만약에 htdocs 아래에 php 코드를 넣어서 실행시키는것이 아니라 xampp 폴더와 같은 레벨에 위치하도록 새로운 폴더를 생성하고 그 안에 php코드들을 넣어서 실행시키려고 하면 주소창에 어떻게 입력해야 브라우저에 뜰까요..?

    답글삭제