📚 PHP 중급 - 3주차: 게시판 CRUD 구현 (기본) - 01 게시판 테이블 설계

2025. 7. 20. 18:34프로그램/PHP 중급

📚 PHP 중급 - 3주차: 게시판 CRUD 구현 (기본) - 01 게시판 테이블 설계

📚 PHP 중급 - 3주차: 게시판 CRUD 구현 (기본) - 01 게시판 테이블 설계



안녕하세요! #PHP 중급 과정 3주차, #게시판 #CRUD 구현의 첫 번째 시간입니다. 지난 시간에는 #회원가입 및 #로그인 시스템을 통해 #사용자 #인증과 #세션 #관리의 기초를 다졌습니다. 이제는 #사용자들이 자유롭게 #게시물을 작성하고 조회하며 소통할 수 있는 #게시판 기능을 만들어 볼 차례입니다.

 

이번 포스팅에서는 #게시판 #구현의 첫걸음이자 가장 중요한 단계인 #데이터베이스 #테이블 #설계에 대해 상세히 다룰 것입니다. #효율적이고 #안정적인 #게시판을 만들기 위한 #테이블 #구조와 각 #컬럼의 역할, 그리고 #데이터 #타입 선정 기준까지, #실제 #코드와 함께 자세히 설명해 드릴게요.

 


 

1. 게시판 기능 분석 및 요구사항 정의

#게시판 #테이블을 #설계하기 전에, 우리가 만들 #게시판이 어떤 기능을 제공해야 할지 명확히 정의하는 것이 중요합니다. 기본적인 #게시판은 다음과 같은 기능을 가집니다.

 

  • #게시물 #작성 (Create): #사용자가 #제목, #내용, #작성자 등을 입력하여 새로운 #게시물을 생성합니다.
  • #게시물 #조회 (Read): #사용자가 작성된 #게시물 목록을 확인하고, 특정 #게시물의 #상세 #내용을 볼 수 있습니다. #조회수 증가 기능도 필요합니다.
  • #게시물 #수정 (Update): #작성자 본인만 자신의 #게시물을 수정할 수 있습니다.
  • #게시물 #삭제 (Delete): #작성자 본인 또는 #관리자만 #게시물을 삭제할 수 있습니다.
  • #댓글 (선택 사항): #게시물에 대한 #댓글을 작성하고 조회할 수 있습니다 (이번 기본 과정에서는 다루지 않습니다).
  • #파일 #첨부 (선택 사항): #게시물에 #파일을 첨부할 수 있습니다.

 

이러한 #요구사항을 바탕으로 #게시물을 저장할 #테이블의 #구조를 구상해 볼 수 있습니다.

 


 

2. 게시판 테이블 설계 (posts 테이블)

#게시판 #데이터를 저장할 #테이블의 이름은 posts (게시물들)라고 가정하겠습니다. 이 #테이블에는 각 #게시물에 대한 고유한 정보가 저장됩니다.

 

SQL
 
CREATE TABLE posts (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    views INT(11) DEFAULT 0,
    -- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    -- 위 주석은 user_id가 users 테이블의 id를 참조하는 외래키임을 나타냅니다.
    -- 실제 사용 시, users 테이블이 먼저 존재해야 합니다.
);

 

각 컬럼에 대한 설명

  • id (INT, NOT NULL, AUTO_INCREMENT, PRIMARY KEY)
    • #게시물마다 부여되는 고유한 번호입니다.
    • INT: 정수형으로, #게시물 번호를 저장합니다.
    • NOT NULL: 비어 있을 수 없습니다.
    • AUTO_INCREMENT: 새로운 #게시물이 추가될 때마다 자동으로 1씩 증가합니다.
    • PRIMARY KEY: #테이블 내에서 각 #게시물을 고유하게 식별하는 기본 키입니다.
  • user_id (INT, NOT NULL)
    • 이 #게시물을 작성한 #사용자의 고유 #ID를 저장합니다.
    • users #테이블의 id #컬럼과 연결되는 #외래 키(Foreign Key) 역할을 합니다. 이를 통해 어떤 #사용자가 어떤 #게시물을 작성했는지 파악할 수 있습니다.
    • NOT NULL: #게시물은 반드시 #작성자가 있어야 합니다.
  • title (VARCHAR(255), NOT NULL)
    • #게시물의 #제목을 저장합니다.
    • VARCHAR(255): 가변 길이 문자열로 최대 255자까지 저장할 수 있습니다. #제목은 일반적으로 짧으므로 충분한 길이입니다.
    • NOT NULL: #제목은 반드시 입력해야 합니다.
  • content (TEXT, NOT NULL)
    • #게시물의 #본문 #내용을 저장합니다.
    • TEXT: 긴 텍스트를 저장하는 데 사용되는 #데이터 #타입입니다. VARCHAR보다 훨씬 긴 텍스트를 저장할 수 있습니다.
    • NOT NULL: #내용은 반드시 입력해야 합니다.
  • created_at (DATETIME, DEFAULT CURRENT_TIMESTAMP)
    • #게시물이 #작성된 날짜와 시간을 저장합니다.
    • DATETIME: 날짜와 시간을 YYYY-MM-DD HH:MM:SS 형식으로 저장합니다.
    • DEFAULT CURRENT_TIMESTAMP: #게시물이 삽입될 때 자동으로 현재 시간이 저장됩니다.
  • updated_at (DATETIME, DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)
    • #게시물이 #마지막으로 #수정된 날짜와 시간을 저장합니다.
    • DATETIME: 날짜와 시간을 저장합니다.
    • DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP: #게시물이 삽션될 때는 현재 시간이 저장되고, 이후 #게시물이 #업데이트될 때마다 자동으로 현재 시간으로 갱신됩니다.
  • views (INT, DEFAULT 0)
    • #게시물의 #조회수를 저장합니다.
    • INT: 정수형으로, #조회수를 저장합니다.
    • DEFAULT 0: 새로운 #게시물이 작성되면 #조회수는 기본적으로 0으로 시작합니다.

 


 

3. users 테이블과의 관계 (외래키 설정)

우리가 지난주에 구현했던 #회원가입 시스템의 users #테이블과 posts #테이블은 user_id #컬럼을 통해 연결됩니다. 이는 #관계형 #데이터베이스의 핵심 개념입니다.

 

user_id #컬럼을 users #테이블의 id #컬럼과 #외래 키로 연결하면 다음과 같은 이점이 있습니다.

  • #데이터 #무결성 유지: posts #테이블의 user_id는 반드시 users #테이블에 존재하는 id여야 합니다. (참조 무결성)
  • #데이터 #연결성: 특정 #사용자가 작성한 모든 #게시물을 쉽게 조회할 수 있습니다. (예: SELECT * FROM posts WHERE user_id = [사용자_ID];)

 

posts #테이블 생성 시 FOREIGN KEY 제약 조건을 추가하는 것은 다음과 같습니다. (users #테이블이 먼저 생성되어 있어야 합니다.)

 

SQL
 
CREATE TABLE posts (
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT(11) NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    views INT(11) DEFAULT 0,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    -- user_id가 users 테이블의 id를 참조하며, users 테이블의 해당 사용자가 삭제되면
    -- 이 사용자가 작성한 게시물도 함께 삭제되도록 설정 (CASCADE)
    -- ON DELETE RESTRICT (기본값): 참조하는 레코드가 있으면 삭제 불가
    -- ON DELETE SET NULL: 참조하는 레코드가 삭제되면 user_id를 NULL로 설정 (user_id가 NULL 허용해야 함)
);

 

ON DELETE CASCADE는 #사용자 #계정이 삭제될 때 해당 #사용자가 작성한 모든 #게시물도 자동으로 삭제되도록 설정하는 강력한 옵션입니다. 상황에 따라 ON DELETE RESTRICT (참조 무결성 위배 시 삭제 불가) 또는 ON DELETE SET NULL (참조 레코드 삭제 시 user_id를 NULL로) 등을 사용할 수 있습니다.

 


 

결론

 

이번 포스팅에서는 #PHP #게시판 #CRUD 구현을 위한 첫 단계로 posts #테이블을 #설계하는 방법을 알아보았습니다. 각 #컬럼의 #데이터 #타입과 역할, 그리고 #사용자 #테이블과의 #외래 키 관계 설정을 통해 #게시판의 #뼈대를 #견고하게 만들었습니다.

 

#테이블 #설계는 #애플리케이션의 #성능과 #유지보수성에 큰 영향을 미치므로, 신중하게 접근하는 것이 중요합니다. 다음 시간에는 이렇게 #설계된 #테이블을 바탕으로 #게시물을 #작성하는 #기능 (Create)을 구현해 보겠습니다.

 


 

PHP 중급 게시판 CRUD 테이블 설계 posts user_id title content created_at updated_at views 외래키 데이터베이스 관계형 CASCADE


루젠VPN: 당신의 안전한 온라인 동반자!

#VPN순위 상위권 루젠VPN으로 #구글VPN, #갤럭시VPN, #노트북VPN 등 어떤 기기에서든 손쉽게 #VPN사용법 익히고 #VPN우회 경험하세요. #중국출장VPN 이 필요할 때, 복잡한 #VPN원리 고민 없이 #VPN어플 이나 #VPN앱 (PC/모바일 모두 지원) 하나로 끝! #TOUCHVPN, #TURBOVPN 못지않은 강력한 성능을 #VPN체험 해보세요. 다양한 #VPN종류 중 단연 돋보이는 루젠VPN! (PROTON VPN도 좋지만!) 지금 바로 루젠VPN과 함께 안전하고 자유로운 인터넷을 만끽하세요!

 

https://vpn.luzensoft.com

 

LuzenVPN 루젠VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원

국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이

vpn.luzensoft.com