diff --git a/README.md b/README.md
index 3598ade..818106e 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,11 @@ make.com을 이용해서 만든 AutoMation Flow를 Python을 이용하여 변환
 * OpenAI이용 코드 작성(완료)-비용 절감을 위하여 제목, 이미지 생성 제외.
 * HTML문서 변환 코드 작성(완료).
 * 워드프레스 등록 플로우 코드 작성(기능 테스트 완료 - 연결 필요).
-* 코드 리팩토링.
+
+### 코드 리팩토링.
+* 환경변수 호출 모듈분리(완료)
+* 데이터베이스 조회 모듈분리(완료)
+* OpenAI 모듈 
 
 ## 코드 이슈
 ### 네이버 블로그 크롤링
diff --git a/main.py b/main.py
index f380354..d66346b 100644
--- a/main.py
+++ b/main.py
@@ -1,12 +1,37 @@
-from package import GetConfig
-from package import MariaDB
+import package as pkg
+from package import GetConfig, MariaDB, ChangeTextToPost, WordPress
+import markdown
 
 # 2024-10-03 환경 변수 호출
-config = GetConfig.GetConfig()
+config = GetConfig()
 dict_data = config.get_config_as_dict()
 
 # 2024-10-03 db에서 url정보 호출
-db = MariaDB.MariaDB(dict_data)
+db = MariaDB(dict_data)
 url = db.fetch_data_from_mariadb()['url']
 
+# 2024-10-03 url을 이용해서 text추출
+origin_content = pkg.getContents(url)
 
+# 2024-10-03 openAI를 이용하여 게시글 스타일 변경
+openai_key = dict_data['openai_api_key']
+wp_reference_style = dict_data['wp_post_style']
+
+open_ai = ChangeTextToPost(openai_key)
+post_article = open_ai.generate_blog_post(origin_content, wp_reference_style)
+
+# 2024-10-03 Markdown을 HTML로 변환
+html = markdown.markdown(post_article)
+
+# 2024-10-03 워드프레스 포스팅 임시등록
+wp = WordPress(dict_data)
+rs = wp.create_post(2,html)
+
+if __name__ == "__main__":
+    # print(post_article)
+    print("추가 확인을 위한 출력")
+    if rs.ok:
+        print(f"성공 code:{rs.status_code}")    
+    else:
+        print(f"실패 code:{rs.status_code} reason:{rs.reason} msg:{rs.text}")
+    
diff --git a/package/GetConfig.py b/package/GetConfig.py
index 8dc35f3..d931a20 100644
--- a/package/GetConfig.py
+++ b/package/GetConfig.py
@@ -9,7 +9,7 @@ class GetConfig:
         self.db_user = os.getenv('DB_USER')
         self.db_pw = os.getenv('DB_PASSWORD')
         self.db_database = os.getenv('DB_NAME')
-        self.openai_api_key = os.getenv('OPEN_API_KEY')
+        self.openai_api_key = os.getenv('OPENAI_API_KEY')
         self.wp_url = os.getenv('WP_URL')
         self.wp_user = os.getenv('WP_USER')
         self.wp_api_key = os.getenv('WP_API_KEY')
diff --git a/package/MariaDB.py b/package/MariaDB.py
index 90a52a7..e507605 100644
--- a/package/MariaDB.py
+++ b/package/MariaDB.py
@@ -1,5 +1,4 @@
 import mysql.connector
-import os
 
 class MariaDB:
     
diff --git a/package/OpenAI.py b/package/OpenAI.py
new file mode 100644
index 0000000..d8fb40c
--- /dev/null
+++ b/package/OpenAI.py
@@ -0,0 +1,37 @@
+from openai import OpenAI
+
+class ChangeTextToPost:
+    
+    def __init__(self, key):
+        self.client = OpenAI(
+            api_key=key,
+        )
+
+    def generate_blog_post(self, origin_content, wp_post_style):
+        
+        # ChatCompletion API를 사용하여 텍스트 변환
+        prompt = (
+            """
+            너는 대한민국에 거주하는 블로그 전문가이다. 
+            네가 작성한 블로그 글은 지난 3년간 높은 주목성, 관여도, 전환율을 만들었다. 
+            이 전문성을 이용해서 제공받는 기사를 블로그 형태로 변형하여 작성해야만 한다.
+            ---
+            글을 작성하고 제목을 만들어서 맨 마지막 줄에 추가해줘.
+            """
+            f"\n블로그 스타일은 아래 문서를 모방해줘. markdown형태로 작성되어야한다. 적절한 사례들이 들어가도 좋겠어.\n---\n{wp_post_style}\n"
+            f"제공된 기사 내용:\n{origin_content}"
+        )
+
+        response = self.client.chat.completions.create(
+            model="gpt-4o",
+            messages=[
+                {"role": "system", "content": "너는 대한민국에 거주하는 블로그 전문가이다."},
+                {"role": "user", "content": prompt}
+            ],
+            max_tokens=2000,
+            temperature=0.7,  # 창의성을 위한 적절한 값 조정
+        )
+
+        # 응답에서 텍스트 추출
+        blog_post = response.choices[0].message.content
+        return blog_post
\ No newline at end of file
diff --git a/package/Utility.py b/package/Utility.py
new file mode 100644
index 0000000..4ffc832
--- /dev/null
+++ b/package/Utility.py
@@ -0,0 +1,61 @@
+import requests, json
+from urllib.parse import urljoin
+from bs4 import BeautifulSoup
+from datetime import datetime
+
+def getContents(url):
+    # HTTP GET 요청으로 페이지 가져오기
+    response = requests.get(url)
+
+    # 응답 상태 확인
+    if response.status_code == 200:
+        # HTML 파싱
+        soup = BeautifulSoup(response.text, 'html.parser')
+        
+        # HTML 태그를 제거 후 페이지의 모든 텍스트 가져오기 (전체 내용)
+        page_content = soup.get_text()
+        
+        # 빈 줄을 제거하고 텍스트만 출력 (줄바꿈 문자를 기준으로 필터링)
+        lines = [line.strip() for line in page_content.splitlines() if line.strip()]
+        
+        # 결과 출력
+        contents = "\n".join(lines)
+        return contents
+    else:
+        print(f"Failed to fetch the URL. Status code: {response.status_code}")
+
+class WordPress():
+    
+    def __init__(self, dict):
+        self.wp_url = dict['wp_url']
+        self.wp_user = dict['wp_user']
+        self.wp_user = dict['wp_user']
+        self.wp_api_key = dict['wp_api_key']
+        
+    def create_post(self, category_id, content, media_id = None, status = "draft", title="파이썬 자동 포스팅"):
+        payload = {
+            "status": status, # publish / draft
+            "title": title,
+            "content": content,
+            "date": datetime.now().isoformat(), # YYYY-MM-DDTHH:MM:SS
+            "categories": category_id
+        }
+        if media_id is not None:
+            payload['featured_media'] = media_id
+
+
+
+        return requests.post(urljoin(self.wp_url, "wp-json/wp/v2/posts"),
+                            data=json.dumps(payload),
+                            headers={'Content-type': "application/json"},
+                            auth=(self.wp_user, self.wp_api_key))
+        # if result.ok:
+        #     print(f"성공 code:{result.status_code}")    
+        # else:
+        #     print(f"실패 code:{result.status_code} reason:{result.reason} msg:{result.text}")
+        
+if __name__ == "__main__":
+    # url = 'example_url'
+    # tmp = getContents(url)
+    # print(tmp)
+    pass
\ No newline at end of file
diff --git a/package/__init__.py b/package/__init__.py
index ce27c6e..bc08572 100644
--- a/package/__init__.py
+++ b/package/__init__.py
@@ -1,2 +1,5 @@
-from . import GetConfig
-from . import MariaDB
\ No newline at end of file
+from .Utility import getContents
+from .Utility import WordPress
+from .GetConfig import GetConfig
+from .MariaDB import MariaDB
+from .OpenAI import ChangeTextToPost
\ No newline at end of file
diff --git a/package/convert_md.py b/package/convert_md.py
index 6f9ecf0..3ac03b1 100644
--- a/package/convert_md.py
+++ b/package/convert_md.py
@@ -2,7 +2,7 @@ import os
 from dotenv import load_dotenv
 import markdown
 import package.translate_article as ta
-import package.open_ai as oa
+import package.OpenAI as oa
 
 # .env 파일에서 API 키 로드
 load_dotenv(r'./.env.dev')
diff --git a/package/get_url.py b/package/get_url.py
deleted file mode 100644
index 6c259b5..0000000
--- a/package/get_url.py
+++ /dev/null
@@ -1,38 +0,0 @@
-import mysql.connector
-import os
-
-
-# MariaDB에 연결하는 함수
-def fetch_data_from_mariadb():
-    try:
-        # 데이터베이스 연결
-        connection = mysql.connector.connect(
-            host=host,
-            user=user,
-            password=password,
-            database=database
-        )
-        
-        # 커서 생성
-        cursor = connection.cursor(dictionary=True)
-        
-        # 쿼리 실행
-        query = "SELECT * FROM healty_url_source ORDER BY idx DESC LIMIT 1;"
-        cursor.execute(query)
-        
-        # 결과 가져오기
-        result = cursor.fetchone()
-        return result
-    
-    except mysql.connector.Error as err:
-        print(f"Error: {err}")
-    finally:
-        if connection.is_connected():
-            cursor.close()
-            connection.close()
-
-if __name__ == "__main__":
-    # 결과 확인
-    data = fetch_data_from_mariadb()
-    print(data['url'])
-
diff --git a/package/open_ai.py b/package/open_ai.py
deleted file mode 100644
index ea9a03e..0000000
--- a/package/open_ai.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import os
-from openai import OpenAI
-from dotenv import load_dotenv
-import package.translate_article as ta
-
-# .env 파일에서 API 키 로드
-load_dotenv()
-client = OpenAI(
-    api_key=os.getenv("OPENAI_API_KEY"),
-)
-
-def generate_blog_post(article_text, style_reference):
-    
-    # ChatCompletion API를 사용하여 텍스트 변환
-    prompt = (
-        """
-        너는 대한민국에 거주하는 블로그 전문가이다. 
-        네가 작성한 블로그 글은 지난 3년간 높은 주목성, 관여도, 전환율을 만들었다. 
-        이 전문성을 이용해서 제공받는 기사를 블로그 형태로 변형하여 작성해야만 한다.
-        ---
-        글을 작성하고 제목을 만들어서 맨 마지막 줄에 추가해줘.
-        """
-        f"\n블로그 스타일은 아래 문서를 모방해줘. 적절한 사례들이 들어가도 좋겠어.\n---\n{style_reference}\n"
-        f"제공된 기사 내용:\n{article_text}"
-    )
-
-    response = client.chat.completions.create(
-        model="gpt-4o",
-        messages=[
-            {"role": "system", "content": "너는 대한민국에 거주하는 블로그 전문가이다."},
-            {"role": "user", "content": prompt}
-        ],
-        max_tokens=2000,
-        temperature=0.7,  # 창의성을 위한 적절한 값 조정
-    )
-
-    # 응답에서 텍스트 추출
-    blog_post = response.choices[0].message.content
-    return blog_post
-
-if __name__ == "__main__":
-    # 예시 기사 텍스트 (text 파싱 결과로 제공된 텍스트를 사용할 수 있습니다)
-    article_text = ta.getContents()
-
-    # 블로그 스타일 참고 텍스트
-    style_reference = os.getenv("reference_style")
-
-    # 블로그 포스트 생성
-    blog_post = generate_blog_post(article_text, style_reference)
-
-    # 결과 출력
-    print(">>>>\n" * 3)
-    print(blog_post)
\ No newline at end of file
diff --git a/package/translate_article.py b/package/translate_article.py
deleted file mode 100644
index 3245de8..0000000
--- a/package/translate_article.py
+++ /dev/null
@@ -1,30 +0,0 @@
-import requests
-from bs4 import BeautifulSoup
-import db_ctr.get_url as get_url
-
-
-url = get_url.fetch_data_from_mariadb()['url']
-
-def getContents():
-    # HTTP GET 요청으로 페이지 가져오기
-    response = requests.get(url)
-
-    # 응답 상태 확인
-    if response.status_code == 200:
-        # HTML 파싱
-        soup = BeautifulSoup(response.text, 'html.parser')
-        
-        # HTML 태그를 제거 후 페이지의 모든 텍스트 가져오기 (전체 내용)
-        page_content = soup.get_text()
-        
-        # 빈 줄을 제거하고 텍스트만 출력 (줄바꿈 문자를 기준으로 필터링)
-        lines = [line.strip() for line in page_content.splitlines() if line.strip()]
-        
-        # 결과 출력
-        contents = "\n".join(lines)
-        return contents
-    else:
-        print(f"Failed to fetch the URL. Status code: {response.status_code}")
-        
-tmp = getContents()
-print(tmp)
\ No newline at end of file
diff --git a/package/wp.py b/package/wp.py
deleted file mode 100644
index 4d2a2ae..0000000
--- a/package/wp.py
+++ /dev/null
@@ -1,43 +0,0 @@
-import os
-from dotenv import load_dotenv
-import json
-import requests
-from urllib.parse import urljoin
-from datetime import datetime
-
-# .env 파일에서 API 키 로드
-load_dotenv(r'./.env.dev')
-
-wp_url = os.getenv('WP_URL')
-wp_usr = os.getenv('WP_USERNAME')
-wp_key = os.getenv('WP_API_KEY')
-status = 'draft' # 즉시발행 publish, 임시저장 draft
-# slug = 'input your slug'
-
-title = '파이썬 자동포스팅'
-content = 'html 호출 연동 필요.' # 연결만하면됨 테스트 완료.
-category_id = [2] # 카테고리 아이디 
-# tag_ids = [21] #태그아이디
-media_id=None   #이미지 업로드를 제외 None
-
-payload = {
-    "status": status,
-    "title": title,
-    "content": content,
-    "date": datetime.now().isoformat(), # YYYY-MM-DDTHH:MM:SS
-    "categories": category_id
-}
-if media_id is not None:
-    payload['featured_media'] = media_id
-
-
-
-result = requests.post(urljoin(wp_url, "wp-json/wp/v2/posts"),
-                    data=json.dumps(payload),
-                    headers={'Content-type': "application/json"},
-                    auth=(wp_usr, wp_key))
-
-if result.ok:
-    print(f"성공 code:{result.status_code}")    
-else:
-    print(f"실패 code:{result.status_code} reason:{result.reason} msg:{result.text}")
\ No newline at end of file