웹마스터 팁

<게시판 강좌의 schema.php파일이 있는곳의 강좌를 미리 한번 보시면 도움이 됩니다.>

엉덩이에 종기가 생겨서.. 지금 앉아있는게 넘넘 불편하답니다.. ㅠㅠ
그래도 강좌는 올려야 할것 같아서.. 이렇게 아픔을 참고.. 으쌰~ 으쌰~

지금 올려야할 강좌가 넘 많은데.. 마음같아서는 한번에 확 다올려버리고 싶은데
제가 뭐.. 타수가 한 2천타치고.. 영타도 천타 이상치고.. 모든 자료가 다 준비되어있다면..
한번에 올리겠지만.. 조건이 안되네요..^^

저도 천재가 아니고.. 모든걸 다 기억하고 있는게 아니라.. 강좌를 올리다가도
저도 생각이 잘안나서.. 글쓰다가.. 그대로.. 노트패드에 저장시켜두고는 책에서 찾아보기도 하고..
인터넷에서도 자료 찾고.. 원서 메뉴얼도 디져보고.. 제가 직접 테스트도 해보고
이렇게 한다음.. 정확하게 결과가 나오고.. 검증된것들만 여러분들에게 올리는거랍니다..^______^

자자.. 맨날 강좌시작할때.. 이렇게 잡담만 잔뜩하네요.. 별내용도 없는데..
오늘 할것은.. 데이터베이스의 타입.. 즉 형에 관련한 내용을 알아보겠습니다.

저는 항상 강좌를 할때 원론적인 설명이나.. 문서에 나오는 그런말들은 잘 안합니다.
그런것들은.. 벌써 우리를 이해시키기에는 힘든것들이라는것을 이미 잘 알고있기때문이죠..
항상 예를통해서.. 우리주변에서 일어나고 있는예를 통해서 보여드립니다.

우리가 요밑에 게시판만들기 강좌에서 사용한.. 디비 테이블 스키마의 소스를 가지고
예를들면서 설명을 하도록 하겠습니다.



자.. 이제 우리가 이전에 만든적이 있는 게시판의 스키마 정보입니다.

여기서 하나하나 보도록 하겠습니다.
첫번째로.. no 필드에 있는것들을 쭈루룩~ 뽑아오도록 하겠습니다.

int(10) auto_increment not null

이렇게 있습니다. 여기서 첫번째로 int
책에 의하면 이건 4294967295개의 정수를 저장할수있는 자료형이라고 하네요..--;;
얼마나 큰지.. 그런건 중요하지 않습니다.

그냥.. 일반적인 숫자를 사용하실거라면 95%이상 int를 사용하시면 됩니다.
뒤에 따라오는 10은.. 10자리까지만 저장하겠다는겁니다.
10자리만해도.. 어디죠?? 10억인가??
게시판 만드는데.. 뭐 10자리면 충분하것죠??

auto_increment

이건.. 뭐냐! 자동증가라는겁니다.
즉, 따로 숫자를 기입을 안해줘도.. 다른필드에 자료가 들어오면.. 알아서 숫자가 올라가는겁니다.
1,2,3,4,5, 이렇게 증가하게되며.. 나중에 300까지 갔습니다.
그리고 1~300까지의 숫자를 다 지웠습니다. 그리고 다시 저장하면 1부터 다시 시작하겠죠??

방금 "예"라고 대답한사람들 다 회원탈퇴시킬꼬얌.. --;;
1~300까지 지우고 다시 저장하면 301부터 시작합니다.. ^_______^
1부터 다시 시작하게 할려면 어떻게 해야할까요??
두가지 방법이 있습니다.

번호입력할때.. 그 번호에서 항상 300을 빼주고 입력하면 됩니다.. --;;
제가 이러한 방법이 있다고 해서.. 이러한 방법을 사용하지는 마세요..
절라 무식하다는 소리 들을지도 몰라요..^^

두번째로는 테이블을 삭제해야 합니다. 그리고 다시 테이블을 설치해야 합니다.

뭐.. 여담이었구요.. 여튼 auto_increment는 자동증가값입니다.
꼭 알아두세요.. 주로.. 필드에 번호 매길때.. 주로 자동증가값(auto_increment)를 사용한답니다.

자.. 그리고 이제.. not null이란게 나왔습니다.
null 이란말 많이 보셨을겁니다.
비어있다는 뜻이죠.. 그렇다면 not null 은 뭘까요??
안비어있다는 말이겠죠?? ^^ 앞에 부정어 not 이 부터있자나요..ㅋㅋ

네.. 그렇습니다. 자료입력시.. not null 이라고 명시된 필드에는 비어있음 안된다는거죠..
어떤경우에 not null 을 사용하냐면.. 반드시 입력이 되어야 하는 사항들에 사용하면 좋은 효과를 얻습니다.
즉, 회원 아이디, 비밀번호, 등등.. 반드시 입력되어야 하는사항에.. not null 을 사용하세요..
그러면.. 설사 누군가가.. 공백으로 두고 OK 버튼 눌렀다고 해도.. 아무런 에러가 없이 진행이 되는것처럼
보일지라도.. 실제로 데이터베이스에 들어가서 보면.. 입력이 안되어있음을 확인하실수 있습니다.
바로 not null 이라고 명시한곳에 값을 주지 않았기때문이죠..^^
자.. 우리는 이제 중요한 not null 까지 했습니다.

이제.. 다음으로 넘어가겠습니다.

title  char(80) not null,

제목부분입니다. not null은 좀전에 설명했기때문에 그냥 넘어가고..
char에 대해서 알아보도록 하겠습니다.

사용방법은.. char(n) 이렇게 사용합니다. 즉, n개의 문자를 저장하는 자료형입니다.
최대 255자까지 저장이 가능합니다.

이와 아주 흡사한게 있습니다. 바로 varchar라는게 있습니다.
이것도 똑같이 사용하며.. n개의 문자를 저장하는 자료형이며 255자까지 저장이 가능합니다.

근데 왜 이렇게 두개가 존재하냐구요??
바로.. 분명 다른점이 있기때문이죠..^^ 그 다른점에 대해서 설명하도록 하겠습니다.

char(10), varchar(10) 이렇게 두개다 선언했다고 가정하겠습니다.

그리고 두개다 10개의 문자까지 저장이 가능합니다.
근데.. char(10)에다가.. abc 라고 3개의 문자를 넣었습니다. 그러면.. 10의 공간이 아닌 3의 공간이 되겠죠??

또 "예"라고 한사람.. 있죠?? 진짜 탈퇴시킬겁니다!!

아닙니다!! char는 N개라고 선언했다면.. N개보다 작은 문자가 저장이 되더라도..
N개만큼의 공간을 차지하게 됩니다.
즉, 위에서.. abc라고 했다면.. 3의 공간이 아닌.. 10의 공간을 차지하게 되는거죠..

반면, varchar는 그와 반대죠.. N개라고 정의를 했더라도.. 그 이하의 자료가 저장이 된다면..
그만큼의 공간만 차지하게 됩니다. 즉, abc를 저장했다면.. 3만큼의 공간을 차지하게됩니다.
그래서.. 공간절약의 효과를 볼수있겠죠??

이제는 "예"라도 대답하기 두렵죠?? ^_____^
공간절약 하는거 맞긴 맞습니다.
근데.. 아끼는것도 좋은데.. 그거 얼마나 된다고..^^
우리가 뭐.. 초특급 대형 웹사이트를 만드는게 아니라면.. 이런거 크게 신경 안쓰셔도 될겁니다.
지금 제로보드 홈페이지에 글이 무지하게 많죠??
근데 이렇게 많아보이지만.. 이것의 DB용량은 300메가 정도입니다. 한 두달전쯤에 봤을때..
300 몇메가였습니다.
제가.. 이번에 게시판 하나 만들고.. 테스트할려고.. 글을 백만개를 올렸습니다..--;;
말이 백만개지.. 아무리 큰 커뮤터니 홈페이지라도 글이 10만개이상 잘 안올라옵니다.
근데 글 100만개 올렸는데.. 고작 70메가를 차지하더군요..
그러니까.. 이런데서.. 1바이트 아낄려고 노력하지마시고.. 당나귀가서.. 디빅하나 덜 다운받음 됩니다..^^

잠시 여담이었고.. varchar와 char은 이러한 차이가 있습니다.
근데.. char는 항상 일정한 데이터 크기를 가지고 있기때문에 검색시 효율적이라고 하네요..

자.. 이제.. 그 밑으로.. name은 똑같고.. 바로밑에

memo                text not null,

여기서 text 는 65535개의 문자를 저장할수 있는 자료형입니다.
물론 이보다 더 큰.. 자료형이 있습니다. 예를들자면 longtext, blob등..
그러나.. 일반적인 홈페이지에서는 text를 사용하시면 별 문제없을거라 생각합니다.

자.. 이제 중요한거 또 하나 나오네요..
hit                        int(4) unsigned not null,

여기서 첨 보는게 나왔죠?? unsigned
이건 뭐냐하면.. int를 사용했을때.. int는 정수라고 했죠?? 그리고 255개를 저장한다고 했죠??
근데.. 여기서.. 양수만 저장한다면..즉,, 0~255까지만 저장한다면..
unsigned 라고 해주시면 됩니다.
즉, 조회수는 마이너스가 될수가 없죠?? 절대로!!
그러니까.. unsigned라고 해주시면 됩니다.

그러면.. 음수가 들어간다면?? signed 라고 선언하면.. 0~255까지가 아닌.. -127 ~ 127까지 정수를
사용할수가 있게 된답니다.!!
무슨 말인지 아시겠죠???

자.. 이제 형에 대해서 대충 설명했네요.. 그럼 마지막에 나오는걸 한번 볼까요??

primary key(no)

프라이머리 키라고 하죠.. 이건 뭐냐하면.. 고유의 값을 뜻하는거죠..
만약에 동사무소에서.. 데이터베이스를 가지고 있습니다.
주민들의 정보를 가지고 있다고 생각해보죠..

정보에는.. 이름, 주민등록번호, 사는주소 이렇게 3가지가 들어간답니다.
그럼.. 여기서 어떤게 프라이머리 키가 되어야 하겠습니까??
뭐가 과연 고유의 값이겠습니까??

네.. 바로 주민등록번호입니다.. 똑같은 주민등록번호 있습니까??

이제 이해가 되죠?? 이게 프라이머리 키라는겁니다.
근데 꼭 프라이머리키가 테이블에 존재해야 하는건 아닙니다.
없어도 상관은없답니다.

그리고 키가 하나 더 있는데..

index key라는게 있습니다.
이건 뭐냐하면.. 우리가.. 책 젤로 마지막에 보면.. 책마다 다르지만..
색인, 찾아보기, Index 뭐.. 이중에 하나의 이름으로..

A , B, C 또는 가, 나, 다, 이렇게 해서.. "가" 에는 "가" 에 해당하는 단어들이
주루룩 나오고.. 이런거.. 보신적 있죠??

없다구요!! 지금 당장 집에 있는 책 암거나 펴서 뒤에 보세요.. 그런게 있답니다.

index key가 바로 이런 역할을 하는겁니다.

우리가.. "강좌" 라는 단어를 책에서 찾아야 합니다.
뒤에 색인이라는게 없다면.. 우리는 첫페이지부터 마지막 페이지까지.. 다 찾아봐야 합니다.
그쵸?? 근데.. 뒤에 색인을 이용하면.. "강좌"라는 단어만 찾음.. "강좌"라는 단어가..
몇페이지, 몇페이지에 나왔는지 가르쳐줍니다.
그러면.. 우리는 금방 찾을수 있겠죠??

데이터베이스도 마찬가지입니다.
이 인덱스키를 사용하면 검색시 훨씬 빠른 효과를 누릴수가 있답니다.
그렇다고 아무데나 인덱스키를 다 집어넣음 오히려 역효과가 나게 됩니다.

정확하게 필요한곳.. 그리고 쿼리시 조건문에서 많이 나오는 필드에 사용하시면 됩니다.

제가 테스트결과.. 100만개를 리스팅할때.. 인덱스키가 없을때는... 2~3초 걸렸는데..
인덱스키 적용후 1초안에 거의다 리스팅이 되는 효과를 눈으로 확인했습니다.


자.. 이제 대충.. 데이터베이스의 타입에 대한 이해가 좀 오시나요??
물론 더많은 타입이 있지만.. 이정도만 알아도.. 기본적으로 OK라고 할수있습니다.


부디 많은 도움이 되었기를 바랍니다.
그럼.. 전 <ㅑㅇ~~


제목 글쓴이 날짜
초보의 php를 활용한 OneFrame(NoFrame) 홈페이지 만들기 - 1 [17] 아이쿠 2002.08.30
array_multisort를 이용한 간단한 순위체크 [4] Doogi 2002.08.28
변수를 사용하여 echo로 변수값 출력하기. [7] ZipShin 2002.08.28
sleep() 제대루 쓰기... 요것두 [별루 알아도 도움 안되는 팁] [5] sMokaHallo 2002.08.24
[허접] implode() 함수로 배열을 변수로! Myzzix 2002.08.23
[허접] rand() 함수를 이용한 뒤죽박죽 날짜 출력 [5] Myzzix 2002.08.23
파일하나로 만드는 한줄 메모장(테마기능 포함) [8] Mr. JH 2002.08.22
PHP의 제어구조 [2] Mr. JH 2002.08.22
PHP 시간관련 함수 [3] Mr. JH 2002.08.22
PHP에서 사용하는 간단하지만 중요한 MySQL함수들 [3] Mr. JH 2002.08.22
꼭 알아야 하는 4가지 쿼리문 Mr. JH 2002.08.22
테이블 생성시 데이터베이스의 타입설정 [2] Mr. JH 2002.08.22
누구나 만들수있는 게시판 [글삭제, 수정 부분] [4] file Mr. JH 2002.08.21
누구나 만들수있는 게시판 [글보기 view.php 부분] [1] Mr. JH 2002.08.21
누구나 만들수있는 게시판 [글목록 list.php 부분] [6] Mr. JH 2002.08.21
누구나 만들수있는 게시판 [schema, write, write_ok] [10] Mr. JH 2002.08.21
제로 카운터 숫자 조정하기 [8] 이주경 2002.08.21
Print 이건또 뭐지? 사이트 찾다보니 있던데..^^ [13] ZipShin 2002.08.16
기초 통계 프로그램 for 귀차니스트;; [3] TheMics 2002.08.10
쓸모있는 PHP Tip (다 알구 있을런지 모르겠네여..^^) [1] 이삐아이(체리) 2002.08.09