Chapter 19. 게시판 만들기

IT 지식 / Python·2026.08.26
BOARD CREATION
Chapter 19. 게시판 만들기
이번 장에서는 Python과 PostgreSQL을 이용하여 간단한 게시판 프로그램을 만들어 봅니다.
laptop screen displaying colorful code
19.1 게시판 프로그램이란?

게시판(Board)은 사용자가 글을 작성하고 조회하며 수정하거나 삭제할 수 있는 프로그램입니다. 인터넷 카페, 쇼핑몰, 회사 그룹웨어, 학교 홈페이지 등 대부분의 웹사이트에서 게시판 기능을 사용합니다.

이번 장에서는 Python과 PostgreSQL를 이용하여 간단한 게시판 프로그램을 만들어 보며, 구현할 기능은 다음과 같습니다.

  • 게시글 등록
  • 게시글 조회
  • 게시글 수정
  • 게시글 삭제
  • 댓글 작성
  • 게시글 검색
  • 페이징 처리
게시판 구조
==============================
        게시판 프로그램
==============================
1. 게시글 등록
2. 게시글 조회
3. 게시글 수정
4. 게시글 삭제
5. 댓글 작성
6. 게시글 검색
7. 종료
==============================
    
19.2 게시글 테이블

게시글을 저장할 테이블을 생성합니다.

SQL
CREATE TABLE board (
    board_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    title VARCHAR(200) NOT NULL,
    content TEXT,
    writer VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

컬럼 설명

  • board_id: 게시글 번호
  • title: 제목
  • content: 내용
  • writer: 작성자
  • created_at: 작성일
19.3 게시글 등록

게시글 등록을 위한 Python 코드를 작성합니다.

Python
import psycopg2
conn = None
cursor = None
try:
   conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    print("DB 연결 성공")
    cursor = conn.cursor()
    print("cursor 생성 성공")

    title = input("title: ")
    c ")
    writer = input("writer: ")

    cursor.execute(
        """INSERT INTO board (title, content, writer) 
        VALUES (%s, %s, %s)""",
        (title, content, writer))
    conn.commit()
    print("게시글 입력 완료")
except Exception as e:
    print(e)
    if conn:
        conn.rollback()
finally:
    if cursor:
        cursor.close()
    if conn:
        conn.close()
19.4 게시글 조회

게시글 조회를 위한 Python 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
        conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM board")
    rows = cursor.fetchall()            
    
    for row in rows:
        print(row[0], row[1], row[2], row[3])

except Exception as e:
    print(e)
finally:
    cursor.close()
    conn.close()
19.5 게시글 수정

게시글 수정을 위한 Python 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
       conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )

    cursor = conn.cursor()
    board_id = input("게시판번호 :")
    writer = input("작성자이름 :")
    title = input("제목 :")
    c :")

    if title != "":
        cursor.execute("""UPDATE board SET title = %s WHERE board_id = %s""", (title, board_id))
    if content != "":
        cursor.execute("""UPDATE board SET c WHERE board_id = %s""", (content, board_id))
    
    conn.commit()
    print("게시글 수정 완료")
except Exception as e:
    print(e)
    if conn:
        conn.rollback()
finally:
        cursor.close()
        conn.close()
19.6 게시글 삭제

게시글 삭제를 위한 Python 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
  conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    
    cursor = conn.cursor()
    board_id = input("게시판번호 :")
    cursor.execute("""DELETE FROM board 
    WHERE board_id = %s""", (board_id,))
    conn.commit()
    print("게시글 삭제 완료")
except Exception as e:
    print(e)
    if conn:
        conn.rollback()
finally:
        cursor.close()
        conn.close()
19.7 댓글(Comment)

게시글에는 여러 개의 댓글을 작성할 수 있습니다. 따라서 별도의 댓글 테이블이 필요합니다.

SQL
CREATE TABLE comment (
    comment_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    board_id INTEGER,
    writer VARCHAR(100),
    content TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (board_id) REFERENCES board(board_id)
);

-- 게시글 15개 , 게시글마다 댓글 2개씩 

댓글 등록을 위한 Python 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
   conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    cursor = conn.cursor()
    board_id = input("게시판번호 :")
    writer = input("작성자 :")
    comment = input("댓글 :")
    cursor.execute("INSERT INTO comment (board_id, writer, content) VALUES (%s, %s, %s)", (board_id, writer, comment))
    conn.commit()
    print("댓글 입력 완료")
except Exception as e:
    print(e)
finally:
    cursor.close()
    conn.close()
19.8 댓글 조회

댓글 조회를 위한 Python 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
    conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    cursor = conn.cursor()
    board_id = input("게시판번호 :")
    cursor.execute("SELECT * FROM comment WHERE board_id = %s", (board_id,))
    rows = cursor.fetchall()
    for row in rows:
        print(row[0], row[1], row[2], row[3])
except Exception as e:
    print(e)
finally:
    cursor.close()
    conn.close()
19.9 게시글 검색

게시글 제목으로 board 테이블 검색하는 코드를 작성합니다.

Python
import psycopg2

conn = None
cursor = None
try:
    conn = psycopg2.connect(
        host='localhost',
        database='pyschool2',
        user='postgres',
        password='postgres',
        port=5432
    )
    cursor = conn.cursor()
    title = input("게시글 제목을 입력하세요 :")
    cursor.execute("SELECT * FROM board WHERE title like %s", ("%" + title + "%",))
    rows = cursor.fetchall()
    for row in rows:
        print(row[0], row[1], row[2], row[3])
except Exception as e:
    print(e)
finally:
    cursor.close()
    conn.close()
19.10 페이징(Paging)

게시글이 수천 개가 되면 한 번에 모두 출력하면 속도가 느려집니다. 따라서 일정 개수씩 나누어 출력하는 페이징 기능을 구현합니다.

Python
import psycopg2

try:
    page = int(input("페이지 번호: "))
    size = 5
    offset = (page - 1) * size

    conn = psycopg2.connect(
        host="localhost",
        database="pyschool2",
        user="postgres",
        password="postgres",
        port=5432,
    )
    cur = conn.cursor()
    cur.execute(
        "SELECT * FROM board ORDER BY board_id DESC LIMIT %s OFFSET %s",
        (size, offset),
    )
    rows = cur.fetchall()
    for row in rows:
        print(row[0], row[1], row[2], row[3], row[4])           # 게시글 번호, 제목, 내용, 작성자, 작성일

    print(f"\n=== comment {page}페이지 ===")
    cur.execute(
        "SELECT * FROM comment ORDER BY comment_id DESC LIMIT %s OFFSET %s",
        (size, offset),
    )
    rows = cur.fetchall()
    for row in rows:
        print(row[0], row[1], row[2], row[3], row[4]) 
except Exception as e:
    print(e)
finally:
    cur.close() 
    conn.close()
19.11 게시판 프로그램 구조

게시판 프로그램의 구조는 다음과 같습니다.

게시판
│
├── 게시글 등록
├── 게시글 조회
├── 게시글 수정
├── 게시글 삭제
├── 댓글 작성
├── 댓글 조회
├── 검색
└── 페이징
    
a computer screen with a bunch of code on it
📌 Chapter 19 핵심 정리
  • 게시판 프로그램은 사용자가 글을 작성, 조회, 수정, 삭제할 수 있는 기능을 제공합니다.
  • PostgreSQL을 사용하여 게시글과 댓글을 저장하는 테이블을 생성합니다.
  • CRUD 기능을 구현하여 게시글과 댓글을 관리합니다.
  • 게시글 제목으로 검색하고, 페이징 기능을 통해 데이터를 나누어 출력합니다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기