개인 우분투 서버의 mysql서버에 직접 접속계정으로 입력하는게 가능할까?
결론부터 말씀드리면 네, 생각하시는 모든 기능이 구현 가능합니다.
하지만 1번 항목(MySQL 계정 직접 공유 및 DB 직접 조작)에 대해서는 보안 및 데이터 무결성 측면에서 강력히 비추천하는 방식이 있으며, 대신 훨씬 안전하고 표준적인 방법(WordPress REST API)을 사용해야 합니다.
질문하신 내용을 바탕으로 기술적인 가능성과 올바른 구현 방법을 정리해 드립니다.
1. 기능별 실현 가능성 및 피드백
| 항목 | 가능 여부 | 전문가 조언 (Best Practice) |
| 1. MySQL 계정 공유 | 가능 (위험) | 직접 DB에 Insert 하는 방식은 피하세요. 워드프레스는 글 하나를 저장할 때 wp_posts, wp_postmeta, taxonomy 등 여러 테이블이 복잡하게 얽혀 있습니다. SQL 쿼리로 직접 넣다가 데이터가 꼬일 확률이 매우 높습니다. |
| 2. 입력폼 자동 등록 | 가능 | 별도의 웹 페이지(입력폼)를 만들고, 여기서 ‘전송’을 누르면 워드프레스가 제공하는 REST API를 호출하여 글을 등록하는 방식이 정석입니다. |
| 3. 이미지 자동 등록 | 가능 | 이미지 파일 데이터를 API로 전송하여 워드프레스 미디어 라이브러리에 등록하고, 그 ID를 글에 첨부하는 방식으로 구현합니다. |
2. 추천 구현 방식: WordPress REST API 활용
MySQL 계정 정보를 공유해서 직접 쿼리를 날리는 대신, 워드프레스가 공식적으로 제공하는 REST API를 사용하는 것이 가장 안전하고 쉽습니다. 이 방식은 워드프레스 로그인 정보(혹은 앱 비밀번호)만 있으면 됩니다.
전체적인 로직 흐름
-
입력폼 작성: 사용자가 제목, 내용, 이미지를 입력폼에 올립니다.
-
데이터 전송: 입력폼의 백엔드(Python, PHP, Node.js 등)가 워드프레스 서버로 데이터를 보냅니다.
-
이미지 업로드 (1단계): 먼저 이미지를 워드프레스 API (
/wp/v2/media)로 전송하여 업로드하고, 이미지 ID를 반환받습니다. -
글 게시 (2단계): 제목, 내용, 그리고 위에서 받은 이미지 ID를 포함하여 글 쓰기 API (
/wp/v2/posts)를 호출합니다. -
완료: 워드프레스에 글과 썸네일(특성 이미지)이 정상적으로 등록됩니다.
3. 기술적 구현 예시 (Python 코드 흐름)
이해를 돕기 위해 파이썬(Python)을 예시로 로직을 보여드립니다. (PHP나 JS로도 동일하게 구현 가능합니다.)
사전 준비:
-
워드프레스 관리자 화면에서
사용자->프로필->Application Passwords에서 새 비밀번호 생성 (기존 로그인 비번 공유보다 훨씬 안전합니다).
import requests
import base64
user = '내_워드프레스_ID'
password = '생성한_앱_비밀번호'
url = 'https://내도메인.com/wp-json/wp/v2'
# 인증 헤더 생성
creds = user + ':' + password
token = base64.b64encode(creds.encode())
headers = {'Authorization': 'Basic ' + token.decode('utf-8')}
# 1. 이미지 업로드
media_file = open('image.jpg', 'rb').read()
image_headers = headers.copy()
image_headers['Content-Type'] = 'image/jpeg'
image_headers['Content-Disposition'] = 'attachment; filename=image.jpg'
media_response = requests.post(
url + '/media',
headers=image_headers,
data=media_file
)
image_id = media_response.json()['id'] # 업로드된 이미지의 ID 획득
# 2. 글(Post) 등록 (이미지 ID 포함)
post_data = {
'title': '입력폼에서 보낸 제목',
'content': '입력폼에서 보낸 본문 내용입니다.',
'status': 'publish', # 바로 발행 (초안은 'draft')
'featured_media': image_id # 1번에서 받은 이미지 ID 연결
}
post_response = requests.post(
url + '/posts',
headers=headers,
json=post_data
)
if post_response.status_code == 201:
print("성공적으로 등록되었습니다!")
4. 요약 및 주의사항
-
DB 직접 접속 금지:
INSERT INTO wp_posts...와 같은 SQL 직접 입력 방식은 사용하지 마세요. 워드프레스의 버전이 업데이트되거나 플러그인이 변경될 때 시스템이 망가질 수 있습니다. -
보안: 입력폼을 아무나 접근하지 못하게 비밀번호를 걸거나 내부망에서만 접속되도록 하세요. 스팸 봇이 입력폼을 발견하면 워드프레스에 스팸 글을 무더기로 등록할 수 있습니다.
-
서버 환경: 개인 우분투 서버라면, 입력폼을 처리하는 스크립트(백엔드)와 워드프레스가 같은 서버에 있어도 상관없으며,
localhost통신을 하므로 속도도 빠릅니다.
제가 해드릴 수 있는 다음 단계는 무엇인가요?
-
위 로직을 구현할 수 있는 구체적인 파이썬(Python) 또는 PHP 전체 소스 코드를 작성해 드릴까요?
-
워드프레스에서 **Application Password(앱 비밀번호)**를 발급받는 정확한 절차를 안내해 드릴까요?