Chapter 19. 게시판 만들기
게시판(Board)은 사용자가 글을 작성하고 조회하며 수정하거나 삭제할 수 있는 프로그램입니다. 인터넷 카페, 쇼핑몰, 회사 그룹웨어, 학교 홈페이지 등 대부분의 웹사이트에서 게시판 기능을 사용합니다.
이번 장에서는 Python과 PostgreSQL를 이용하여 간단한 게시판 프로그램을 만들어 보며, 구현할 기능은 다음과 같습니다.
- 게시글 등록
- 게시글 조회
- 게시글 수정
- 게시글 삭제
- 댓글 작성
- 게시글 검색
- 페이징 처리
==============================
게시판 프로그램
==============================
1. 게시글 등록
2. 게시글 조회
3. 게시글 수정
4. 게시글 삭제
5. 댓글 작성
6. 게시글 검색
7. 종료
==============================
게시글을 저장할 테이블을 생성합니다.
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: 작성일
게시글 등록을 위한 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()
게시글 조회를 위한 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()
게시글 수정을 위한 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()
게시글 삭제를 위한 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()
게시글에는 여러 개의 댓글을 작성할 수 있습니다. 따라서 별도의 댓글 테이블이 필요합니다.
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 코드를 작성합니다.
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()
댓글 조회를 위한 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()
게시글 제목으로 board 테이블 검색하는 코드를 작성합니다.
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()
게시글이 수천 개가 되면 한 번에 모두 출력하면 속도가 느려집니다. 따라서 일정 개수씩 나누어 출력하는 페이징 기능을 구현합니다.
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()
게시판 프로그램의 구조는 다음과 같습니다.
게시판
│
├── 게시글 등록
├── 게시글 조회
├── 게시글 수정
├── 게시글 삭제
├── 댓글 작성
├── 댓글 조회
├── 검색
└── 페이징
- 게시판 프로그램은 사용자가 글을 작성, 조회, 수정, 삭제할 수 있는 기능을 제공합니다.
- PostgreSQL을 사용하여 게시글과 댓글을 저장하는 테이블을 생성합니다.
- CRUD 기능을 구현하여 게시글과 댓글을 관리합니다.
- 게시글 제목으로 검색하고, 페이징 기능을 통해 데이터를 나누어 출력합니다.