2. PHP 게시판 만들기, DB 테이블 생성

2015.03.30 00:15
저자 : Kurien

주의: 본 게시판은 보안을 생각하지 않고 만들어졌으므로 실제로 사용되어서는 안되는 코드입니다.

공부할 때 게시판이 이처럼 동작한다는 정도로만 이해해주세요.


이번에는 게시판에 사용될 DB 테이블을 만들어보겠습니다.

먼저 DB 테이블을 만들기 전에 어떤 방식의 게시판으로 만들지 정해야합니다.


크게 말하자면 설계라고 할 수도 있죠.

저는 일단 이 게시판을 단순히 텍스트 인풋, 아웃풋을 위주로 만들 예정이므로 게시판에 들어가는 기본적인 부분만을 사용하겠습니다.


일반적인 게시판에 있는 항목은 글 번호, 글 제목, 글 내용, 작성일, 조회수, 작성자 아이디, 비밀번호 정도입니다.

물론 여기서 추가되는 부분(파일 업로드 등)도 있지만, 아직 초입 부분이므로 여기서 다루지는 않겠습니다.

나중에 이 게시판이 다 만들어지면 업그레이드라도 하는 형식으로 배우도록 하고, 일단은 게시판이 어떤식으로 동작하는지를 알아보죠.


위에서 알아본 게시판의 7가지 항목을 sql 문으로 만들었습니다.


create table board_free (

b_no int unsigned not null primary key auto_increment,

b_title varchar(100) not null,

b_content text not null,

b_date datetime not null,

b_hit int unsigned not null default 0,

b_id varchar(20) not null,

b_password varchar(100) not null

);


각 컬럼은 순서대로 번호, 제목, 내용, 작성일, 조회수, 아이디, 패스워드입니다.


차근차근 설명해드리겠습니다.

int는 정수형 자료라는 뜻으로 4바이트의 저장공간(-2147483648 ~ 2147483647)를 가지고 있습니다.

b_no과 b_hit에는 unsigned라는 옵션이 존재하는데, unsigned가 존재하면 해당 자료형을 양수로만 사용한다는 뜻입니다.

부호(-)가 없다는 뜻이죠.

그러므로 같은 4바이트의 저장 공간이지만 부호가 없기 때문에 4294967295까지의 숫자를 저장할 수 있습니다.


그리고 모든 컬럼이 가지고 있는 not null은 null 값(비어있는 값으로 공백과는 다름)을 지닐 수 없다는 이야기입니다.

제가 만든 항목 중에서 null 값이 들어갈만한 항목은 없기 때문이죠.


b_no에 있는 primary key는 기본키를 나타냅니다.

기본키는 데이터베이스 테이블에서 각각의 자료들을 식별할 수 있는 값이어야 합니다.

한국인으로 따지면 주민등록번호, 학생은 학번인 것처럼 말이죠.


그리고 primary key 옆의 auto_increment는 자동으로 카운트를 올려주는 옵션입니다.

만약 데이터가 들어온다면 1, 2, 3, 4, 5... 처럼 순서대로 숫자가 올라갑니다.

고유 번호를 만들어주는거죠.


마지막 옵션은 b_hit의 default 0입니다.

이 옵션은 데이터를 입력 받을 때 입력된 값이 없다면 기본 값으로 null이 아니라 0을 입력해줍니다.

조회수는 언제나 0에서 시작하니까요.


이렇게 게시판에 들어갈 데이터베이스 테이블을 알아봤습니다.

다음 포스팅에서는 목록을 만들어보도록 하겠습니다.


제작 중인 사이트는 http://kurien.dothome.co.kr이구요,

지적 사항이나 어려운 부분은 댓글에 남겨주세요!

TAG ,
  1. 김모군 2015.09.16 19:54  댓글주소  수정/삭제  댓글쓰기

    오늘부터 php로 게시판 만들어보려고 하는데 잘 정리되어 있어서 재밌게 볼수 있을거 같습니다~
    감사합니다.

  2. 최모군 2016.06.07 14:33  댓글주소  수정/삭제  댓글쓰기

    이 소스를 어떻게 해야 게시판이 만들어지나요?

  3. ㅇㅅㅎ 2016.07.26 14:41  댓글주소  수정/삭제  댓글쓰기

    text에는 데이터 크기가 안써있는데 제한이 없다는 뜻인가요?

    • Kurien 2016.07.26 14:43 신고  댓글주소  수정/삭제

      DB의 TEXT 데이터 형식은 65535자의 문자를 작성할 수 있습니다.

      더 많은 문자열을 저장하시기 위해서는 MEDIUMTEXT, LONGTEXT 등을 이용하시면 되겠습니다.

  4. ccc 2017.04.27 17:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 제가 딱 원하는 기본적인 게시판 만드는 원리에 대해 궁금해서 운좋게 찾아왔는데요
    아직 계실지 모르겠지만.. 질문남겨봅니다.. 지금 이 db 만드는 게시물부터 차례차례로 정주행 하면 되는건가요?

  5. ccc 2017.04.27 19:10  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅎㅎ

  6. marine 2017.07.03 17:14  댓글주소  수정/삭제  댓글쓰기

    505 오류가 발생하는데 왜 그런지 모르겠습니다. 일단 코드 오탈자는 없구요 DB명일아 Table명도 잘 기입했구요.
    참고로 비트나미 WAMP 스택 설치했습니다. 문제점이 뭘까요???

    • Kurien 2017.07.03 18:21 신고  댓글주소  수정/삭제

      “505(HTTP 버전이 지원되지 않음): 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않는다.”

      http 상태코드에는 위와같은 오류로 나타납니다만, 개인적으로는 나타난 적이 없어 “어떤 문제다”라고 말씀드리긴 힘들 것 같습니다.

      개인적인 생각으로는 wamp 버전(wamp 내부의 아파치 버전)의 문제라고 생각되는데, wamp를 삭제 하신 후 최신버전으로 새로 설치해보시는 것을 추천드립니다.

  7. ofyou 2018.01.17 17:26  댓글주소  수정/삭제  댓글쓰기

    이걸 어디에 적용하는건가요?

  8. 리리 2018.09.27 14:28  댓글주소  수정/삭제  댓글쓰기

    이제 이 코드들을 완벽히 이해했고 활용할 줄 알게되었습니다. 쿠리엔님 덕분입니다. 다만 아직도 보안에 관련해서는 잘 모르겠네요. 이 코드의 어디가 보안상으로 좋지 않은거죠?

    • Kurien 2018.10.01 20:23 신고  댓글주소  수정/삭제

      제가 간단히 말씀드릴만한 내용은 아니라서 깊게는 말씀드릴 수 없겠지만, SQL Injection, XSS, CSRF 등등의 공격에 취약합니다.

      위 3종 이외에도 여러가지 많은 보안 문제가 있을 것이며, 해당 사항들은 보안쪽을 조금만 공부해도 아실 수 있으실껍니다.