innoDB 로 사용하고 있는데, 이거 데이터 삽입 속도가 너무 느리다.

검색해보니, 로그 기록을 비활성화시키면 빨라진다네...


innodb_flush_log_at_trx_commit 변수를 0으로 만들어주면 된다.







겁나 빨라졌다..



'웹 개발' 카테고리의 다른 글

favicon에 대해서  (0) 2016.10.18
mysql INSERT 속도 향상  (0) 2015.07.16
도로명 주소 DB 자체 구축  (0) 2015.07.15
HTML 에서 특수문자 표현하는 방법  (0) 2014.10.20
[node.js] ubuntu 에 mongoDB 설치  (0) 2014.08.18
mediaWIKI 설치  (0) 2013.04.03
Posted by 똑똑한 영장류

 

 

웹 개발을 할 때, 정보를 데이터베이스에 저장하는 일은 거의 불가피한 일입니다.

 

게시판도 그렇고, 무언가 이용자로부터 정보를 받으면, 저장을 하려고 하죠.

그중에서, 날짜는 어떻게 처리하는것이 좋은지 한번 생각해봤습니다.

 

이용자가 게시판에 글을 작성했다고 가정합시다.

그러면, 글이 작성된 시간을 데이터베이스에 함께 저장을 해야하겠네요.

 

사람이 보기에는, '2013년 1월 14일 밤 11시 5분 30초' 에 저장했음.이라고 바로 보이면 좋겠죠.

'2013년 1월 14일 밤 11시 5분 30초' 문자열을 데이터베이스에 바로 저장할 수도 있겠습니다만, 데이터베이스에서 이 문자열을 가져와, '밤'을 '오후'로 표시하고 싶을 경우에는 귀찮은 일이 생겨버립니다.

 

정보를 보여주는 방법은 여러가지일 수가 있겠지요. 하기 나름입니다.

다만, 순수 정보는 처리하기 쉬운 형태로 데이터베이스에 저장을 해 놓고, 보여주는 건 내 마음대로 할 수 있는 것이 효율적이라 생각됩니다.

 

처리하기 쉬운 형태의 시간 정보를 저장하고, 읽어오고, 보여줄 모습을 바꾸고...

이 과정이 php와 mysql을 이용할 때, 어떻게 처리되는 것이 좋은지에 관한 생각입니다.

 

 


1. php에서 현재 시간을 구하는 방법

 

int time()

1970년 1월 1일 0시 0분 0초를 시작으로 지나간 시간을 초단위로 리턴해 줍니다.

리턴값은 int 형입니다.

 

1분은 60초

1시간은 3,600초

1일은 86,400초

1년은 365일 경우, 31,536,000초

100년은 3,153,600,000초

 

100년의 경우, 10자리수 네요. 1,000년은 11자리 수겠군요.

 

mysql 데이터베이스에 테이블 만들고, 시간을 저장할 필드를 생성할 때, INT 로 만들면 되겠군요.

 

 



2. 데이터베이스에 저장하는 방법


시간은 int 형으로 다룰 것이기 때문에, 테이블 작성시 시간관련 필드는 int 형으로 설정합니다.


쿼리 등 mysql 관련 내용은 깊게 가지 않습니다. ㅎ





3. 데이터베이스에서 시간을 읽어와서 표시하는 방법


마찬가지로 시간을 읽어오는 부분은 mysql 영역이라 패스~하고..


표시하는 부분에 관한 것은 php 함수, date()에 모두 있습니다.



요점인 즉, 시간정보를 int 형인 타임스탬프를 기준으로 처리하자..라는 것입니다.



타임 스탬프 값을 다루면서, 일주일 후, 일년 후 등등 시간 연산은 어떻게 할 수 있을까~요?


그것도 살펴보고 글 올리겠습니다.





 

 

 

 

 

 

 

 

 

 

Posted by 똑똑한 영장류




XE 에서 XML 쿼리 대신 직접 mysql 사용하기



외부페이지로 작업을 하다가, DB 작업이 필요했습니다.

잘 모르기도 하고, 믿음도 안가는 XML 쿼리는 포기하고, 직접 건드리고 싶었습니다.

DB에 접속하기만 하면 뭐든 가능하잖아? 라고 생각하고 조금 찾아보니, 아래와 같은 방법으로 mysql 접속이 가능함을 발견했습니다. 그리고 그 다음은?? mySql 함수로 하고 싶은 작업하면 됩니다. ㅎㅎ



require $_SERVER['DOCUMENT_ROOT']."/files/config/db.config.php";
$conn = mysql_connect($db_info->master_db['db_hostname'],$db_info->master_db['db_userid'],$db_info->master_db['db_password'])or die(mysql_error());

$selc = mysql_select_db($db_info->master_db['db_database'],$conn);

$q = "SELECT * FROM my_table WHERE member_srl ='$uid'";

$r = mysql_query($q,$conn);
$total_record = mysql_num_rows($re); 



db.config.php를 잘 포함시키고, 거기에 지정되어 있는 변수를 이용해서 mysql_connect()를 잘 호출해준 후, 사용하면 됩니다.






Posted by 똑똑한 영장류

Chap 4.


앞서 회원가입 페이지에서 필요한 정보들을 입력받을 수 있도록 했습니다.

이제 그 정보들을 mysql 데이터베이스(이하 DB)에 저장하는 방법을 알아보겠습니다.


우선 DB에 정보들을 저장할 공간을 마련해 둬야겠지요.


회원 가입 정보들을 저장할 ap_member  라는 이름의 테이블을 만들고, 몇개의 필드들을 설정해 놓겠습니다.


phpMyAdmin 이라는 웹툴을 이용해서 DB에 테이블 생성 작업을 할 수 있습니다. 사용방법은 각자 찾아보시구요.




위 형태로 일단 간단하게 가봅시다.


signup.php 에서 form 에 사용되었던 값들과 ap_member  테이블의 필드와 연관성은 아래와 같습니다.



 회원가입 폼

 ap_member 테이블의 필드

user_id

 id

 user_pw

 pw

 user_email

email


그럼, 이제 signup_check.php 를 작성해 봅시다.


php의 mysql 관련 함수들이 하나씩 나오기 시작할텐데요. 간단 사용예들은 PHP 카테고리에서 살펴볼 수 있습니다.


첫번째: php 가 mysql 에게 관련 작업을 시키려면 권한이 필요한데요, 거창하지만, 사용할 수 있는 DB로 접근할 수 있는 계정 정보가 필요하다는 말입니다. 


www 디렉토리에 config.php 파일을 만들어서 계정 정보를 설정해 줍시다.


<?php
$DB['host'] = 'localhost';
$DB['db'] = 'db_name';
$DB['id'] = 'user_id';
$DB['pw'] = 'xxxxxxxxx';
?> 


위에서 작성한 config.php 는 DB 작업을 하려면 반드시 필요한 정보입니다. 여러 파일들에서 공통적으로 사용될 수 있지요. 작성하는 파일마다 매번 적어줄게 아니라, config.php 파일 하나로 만들어 주고, 필요하면 include() 함수를 이용해서 포함시키는 방법이 효율적이겠죠.



php.net 가서 mysql 관련 검색을 해보니, 이젠 mysqli 를 사용하라고 강력히 권장하는군요. 공부할게 늘었습니다. ㅎㅎ


php 는 mysqli 를 통해서 mysql 서버와 상호 작용을 합니다. 그러니까, 앞서 이야기한 DB 접근할 수 있는 계정 정보를 이용해서 서버와 연결한 후, 그 연결의 끈을 놓으면 안 되겠네요.


접속하는 방법 :


$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);


연결의 끈이 $mysqli 입니다. 이름이 마음에 안 들면 원하시는대로 ㅎㅎ

이 변수를 이용해서 DB 관련 작업들을 수행하게 됩니다.


접속 끊는 방법 :


$mysqli->close();



signup_check.php 에 아래 내용이 우선 필요하겠군요.


<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

$mysqli->close();
?> 


mysql 서버 접속시에 에러가 발생할 경우 메세지를 출력하고 실행을 중단하는 코드가 추가되었습니다.



signup.php 에서 form을 통해 전달된 값들을 signup_check.php 는 어떻게 얻어낼 수 있을까요?


웹에서 값을 전달하는 방법은 두가지가 있습니다.


앞서 signup.php 의 form에는 method='post' 라고 되어있지요. 브라우저의 주소창에 값이 표시되지않는 방법입니다.


그리고, 다른 방법은 get 방법입니다. 이 방법은 브라우저의 주소창에 전달되는 값들이 노출됩니다. 아래의 형태로 전달되는 겁니다.


http://mydomain.com/signup_check.php?user_id=myid


그럼, 전달 받은 쪽에서는 그 값을 이용하기 위해서 php 변수로 담기 위한 작업을 해야하겠지요?


POST 방식으로 전달된 값은 아래와 같이 값을 가져올 수 있습니다.


$user_id = $_POST['user_id'];


GET 방식으로 전달되었다면, 아래처럼 하면 됩니다.


$user_id = $_GET['user_id'];


전달받은 내용을 위의 방법처럼 하나하나 변환할 수도 있겠지만, 더 쉬운 방법이 있습니다.


다음의 함수를 이용해서 post 또는 get 방식으로 전달된 내용을 php 변수에 담아낼 수 있습니다.


extract($_POST);

extract($_GET);


각 배열의 인덱스명대로 변수가 생성됩니다.


우리의 예에서 extract($_POST); 를 실행하면, $user_id, $user_pass, $user_pass2, $user_email 이라는 변수가 자동으로 생기며 전달된 값을 가지고 있습니다.


signup_check.php 를 아래와 같이 작성하고 테스트를 해봅시다.


<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

extract($_POST);

echo $user_id. '<br />';
echo $user_pass. '<br />';
echo $user_pass2. '<br />';
echo $user_email. '<br />';


$mysqli->close($mysqli);
?> 



signup.php


signup_check.php



값을 전달하고, 전달된 값을 변수로 뽑아낼 수 있게 되었습니다.


이제 전달된 값을 DB 에 저장을 해 봅시다.


mysqli 을 이용해서 저장을 위한 쿼리를 실행하면 됩니다.


SQL Query 도 내용이 방대하니, 나올 때마다 조금씩 살펴보겠습니다.


DB에 데이터를 입력할 때 사용하는 쿼리는 INSERT 입니다.


예>

INSERT INTO 테이블명 (속성1, 속성2,...) VALUES (값1, 값2, ...)



우리의 예에서는 아래처럼 됩니다.


$q = "INSERT INTO ap_member ( id, pw, email ) VALUES ( '$user_id', '$user_pass', '$user_email' )";


그리고, 이 쿼리를 실행시키는 방법은 아래와 같습니다.


$mysqli->query( $q);


여기까지의 signup_check.php는 아래와 같습니다.



<?php
include_once ('../config.php');
$mysqli = new mysqli($DB['host'], $DB['id'], $DB['pw'], $DB['db']);
if (mysqli_connect_error()) {
    exit('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}

extract($_POST);

echo $user_id. '<br />';
echo $user_pass. '<br />';
echo $user_pass2. '<br />';
echo $user_email. '<br />';

$q = "INSERT INTO ap_member ( id, pw, email ) VALUES ( '$user_id', '$user_pass', '$user_email' )";

$mysqli->query( $q);

$mysqli->close();
?> 



테스트를 해 봅시다.


signup.php


signup_check.php




phpMyAdmin 을 통해서 확인할 수 있습니다.



이상! ㅎㅎ






Posted by 똑똑한 영장류
TAG MySQL, mysqli, php


PHP, mySql을 이용해서 홈페이지 만들기


php와 mySql을 공부해 가면서, 홈페이지 만드는데 필요한 템플릿? 정도 제작해볼까 합니다.


게시판 위주의 사이트라면, 킴스큐(http://kimsq.com) 나 xe(http://xpressengine.com)로 만드는 것이 속 편합니다.


하지만, 그외 조금 색다른 기능을 담아야하는 홈페이지라면, 경우에 따라 위의 CMS 들은 너무 무겁거나, 그 CMS 위에서 새로운 기능을 구현하기 위해 CMS 자체를 공부해야하는 문제가 생깁니다.


그래서, 사이트 운영에 필요한 최소한의 기능만 담고 있는 템플릿을 만들어보려고 합니다.
템플릿을 호스팅 서버에 업로드하고 DB 설정만 하면, 회원가입, 로그인, 로그아웃, 기본 게시판 정도 달려있는 수준이 우선 목표입니다.
공부를 해가면서 만드는 거라, 진도가 빠르게 나가지는 않을 듯합니다.


그리고, 공부 목적이 더 큰지라, 혹시라도 제 블로그를 보시는 분들이 있다면, 불필요한 내용이 많을 수 있습니다. 미리 sorry 합니다.



Chap 1.


웹서버를 설치하고, php를 설치하고, mysql을 설치하고... 등등 홈페이지를 위한 서버 환경 갖추기 및 개발 환경 갖추는 방법은 설명하지 않습니다.


서버든 PC든... php 파일을 작성해 놓고 브라우져로 접속할 수 있으면 되겠습니다. 


홈페이지를 위한 파일들과 디렉토리들은 모두 '다큐먼트 루트' 라고 불리는 디렉토리 아래에 위치하게 됩니다. 보통 www 혹은 public_html 등의 이름을 가지고 있습니다. 앞으로 www 이라고 부르도록 하겠습니다.


www 에 index.php 파일을 아래의 내용으로 만들어 줍시다.


<?php

echo $_SERVER['DOCUMENT_ROOT'];

?> 


브라우져로 접근해봅시다.


앞으로 접속 도메인은 mydomain.com 이라고 하겠습니다. 그냥 예입니다. 실제 저 주소의 사이트와는 무관합니다. ㅋ


http://mydomain.com 혹은 http://mydomain.com/index.php


접속해보니, 아래처럼 나오는 군요.


/home/hosting_users/myname/www


카페24의 한 예입니다. 여러명의 가입자들이 존재하니까, 각각의 사용자 디렉토리 아래에 www 이라는 이름의 디렉토리를 만들어주고, 그 안의 내용을 웹 서비스에 이용하는 겁니다.

( 결국엔 리눅스의 멀티유져 특성때문입니다. )


myname 이라는 사용자의 홈페이지는 위의 패스 안에 있는 파일들로 구성되는 거지요.


index.php 를 지정해도 되고, 안 해도 되고... 왜 2가지의 접속방법이 있을까요? 


웹서버 상의 특정 디렉토리로 접근했을 때, 웹 서버는 설정해놓은 파일을 최우선적으로 찾아서 처리를 거친 후, 브라우져를 통해 보여주게 됩니다. 보통 index.html, index.php를 최우선 탐색 파일로 설정합니다.


http://mydomain.com 로 접근하면, 파일이 직접 지정되어있지 않기 때문에 해당 디렉토리 안에서 index.php 를 찾게 됩니다. index.php 가 있으면 접근자에게 보여줄테고, 없으면, HTTP 403 에러를 내면서 표시를 거부합니다.


정리하면, 파일이 직접 지정되지 않으면 index.php 를 찾는다고 알아둡시다.


그럼, index.php 파일에 작성한 내용을 살펴보죠..


<?php?> 사이가  php 언어로 작성되는 부분입니다.

웹서버에게 '이 태그 안에 있는 내용은 PHP 언어 처리할 녀석에게 맡겨!' 라고 알려주는 거죠. ㅎ 그럼, PHP 언어 처리기가 해석/처리 후 그 결과를 다시 돌려주면 웹서버는 전체 내용을 브라우저를 통해 전송하는겁니다.


echo 는 뒤에 나오는 변수를 화면에 출력하라는 함수입니다.(php.net 에서는 정확히는 함수가 아니라고...ㅋ )  매개변수가 하나일때는 괄호를 사용하지 않아도 됩니다. 여러개 일때는 사용해야된다고 하네요.


echo

그냥 뒤에 오는 녀석들을 화면에 출력해주는 기능을 한다고 알아둡시다.


$_SERVER

이 변수는 php 에서 항상 참조 가능한 글로벌 수퍼 변수 입니다. 글로벌 수퍼~!

서버에 관련된 많은 정보들을 담고 있는 배열인데요, 그 정보들의 목록은 아래 사이트에서 확인하세요.


http://kr1.php.net/reserved.variables.server.php



$_SERVER['DOCUMENT_ROOT'] 는 웹서버의 설정 내용에 따른, 최상위 디렉토리를 나타냅니다.


index.php 의 결과값은 웹서버가 있는 컴퓨터 혹은 서버에서 www 디렉토리가 위치한 절대경로를 나타내고 있군요. 값은 / 로 끝나지 않고 디렉토리 이름으로 끝나고 있네요.


/home/hosting_users/myname/www



요기까지 하고, 새로운 글로 이어가겠습니다.


이상!







Posted by 똑똑한 영장류