Clone Project๋ก ์งํ
๐ ์ฑ ๊ฐ๊ฒฉ์ ์๊ด๊ด๊ณ ํ์
๐ปNaver.Api?
→ ๊ธฐ์กด์ ์๋ ๋ค์ด๋ฒ Api๋ฅผ ํ์ฉํ์ฌ ๋๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด๋ณด๊ณ ๋ถ์์ ํด๋ณด์
๐ปnaver.api ๋ถ๋ฌ์ค๊ธฐ
import urllib.request
client_id = "6ywEQoHEOqpRJMopg74j"
client_secret = "YAeC1wvboT"
# api_node -> choose type
# ex) shop, book, etc..
# search_text -> input text that you want searching
# start_num -> start_number (page)
# disp_num -> display_number (How many display result on page
def gen_search_url(api_node, search_text, start_num, disp_num):
base = "https://openapi.naver.com/v1/search"
node = "/" + api_node + ".json"
param_query = "?query=" + urllib.parse.quote(search_text)
param_start = "&start=" + str(start_num)
param_disp = "&display=" + str(disp_num)
return base + node + param_query + param_start + param_disp
url=gen_search_url('book', 'ํ์ด์ฌ', 10, 3)
import json
import datetime
def get_result_onpage(url):
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id",client_id)
request.add_header("X-Naver-Client-Secret",client_secret)
response = urllib.request.urlopen(request)
print("[%s] Url Request Success" % datetime.datetime.now())
return json.loads(response.read().decode("utf-8"))
one_result = get_result_onpage(url)
one_result
>>>>
[2023-10-06 15:21:42.494415] Url Request Success
{'lastBuildDate': 'Fri, 06 Oct 2023 15:21:42 +0900',
'total': 928,
'start': 10,
'display': 3,
'items': [{'title': '์ฝ๋ฉ์ ์ฒ์์ด๋ผ with ํ์ด์ฌ (VS Code๋ก ์์ํ๋ ํ์ด์ฌ)',
'link': 'https://search.shopping.naver.com/book/catalog/39049935621',
'image': 'https://shopping-phinf.pstatic.net/main_3904993/39049935621.20230919123144.jpg',
'author': '๋จ๊ท์ง',
'discount': '17280',
'publisher': '์์ง๋ท์ปด',
'pubdate': '20230405',
'isbn': '9788931467994',
'description': '์ด ์ฑ
์ ์ด 12์ฅ์ ํํธ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค๋ง ์ฌ์ค 1์ฅ๋ถํฐ 11์ฅ๊น์ง๋ ๋ชจ๋ 12์ฅ ํ์ด์ฌ ํ๋ก์ ํธ์ ํ๋ก๊ทธ๋จ์ ์ดํดํ๊ณ ์์ฑํ๊ธฐ ์ํ ๋ด์ฉ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.\n\n๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. \nใ\tPart 1 ํ์ด์ฌ ์
๋ฌธ \nใ\tPart 2 ํ์ด์ฌ ์ค์ต ํ๊ฒฝ\nใ\tPart 3 ํ์ด์ฌ ์
์ถ๋ ฅ\nใ\tPart 4 ๋ณ์์ ์๋ฃํ\nใ\tPart 5 ์ฐ์ฐ์\nใ\tPart 6 ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ\nใ\tPart 7 ํจ์\nใ\tPart 8 ํด๋์ค\nใ\tPart 9 ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ\nใ\tPart 10 ํ์ผ ์
์ถ๋ ฅ\nใ\tPart 11 ์์ธ์ฒ๋ฆฌ\nใ\tPart 12 ํ์ด์ฌ ํ๋ก์ ํธ\n\nํ์ต ์์๋ Part 1๋ถํฐ ์์๋๋ก ํ์ตํ๋ฉด ๋๊ฒ ์ต๋๋ค. 1์ฅ๋ถํฐ 11์ฅ๊น์ง ๊ณต๋ถํ ๋ชจ๋ ๋ด์ฉ์ ์ ๋ชฉํ์ฌ ์ด์ ์ค์ ๋์ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ด
๋๋ค. ์ซ์ ๋ง์ถ๊ธฐ ๊ฒ์, ์์ด ๋จ์ด ๋ง์ถ๊ธฐ ๊ฒ์, ์ซ์ ์ผ๊ตฌ ๊ฒ์, ์ฝ์ ๊ณ์ฐ๊ธฐ, ํ์ ๊ฒ์, ๋ก๋ ๋ฒํธ ์์ฑ๊ธฐ, ํ์ด์ฌ์ผ๋ก ์์
ํ์ผ ๋ถ๋ฌ์ค๊ณ ์์ฑํ๊ธฐ, ํ์ด์ฌ์ผ๋ก MS-WORD ํ์ผ ์์ฑํ๊ธฐ๋ก ์ด 9๊ฐ์ ์ค์ต ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด๊ณ ์์ต๋๋ค. ๋จ์ํ ์์ฑ๋ ์ฝ๋๋ฅผ ์ค๋ช
ํ๋ ๋ฐฉ์์ด ์๋ ์ค์ ์ฝ๋๋ฅผ ํ๋์ฉ ์ด์ ๋ถ์ฌ ์์ฑํด ๋๊ฐ๋ ํํ๋ก ์งํํฉ๋๋ค.\nํ๋ก๊ทธ๋๋ฐ์ ๊ณต๋ถํ ๋, ์ผ๋งํผ ๋ง์ด ์ง์์ ์๊ณ ์๋๋๊ฐ ์๋๋ผ ๋ด๊ฐ ์๊ณ ์๋ ๋ด์ฉ์ ์ด๋ป๊ฒ ์ ํ์ฉํ ์ค ์๋๋๊ฐ ์ค์ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ์ฑ
์์ ๋์ค๋ ๋ด์ฉ๊ณผ ๋ฌธ์ ๋ค์ ๋ณด๋ฉด์ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ํด๊ฒฐํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ์์ค์ฝ๋์์ ์ ๊ณตํ๋ ์ ๋ต์ ์์์ผ ๋ฟ ๊ผญ ๊ทธ๊ฒ๋ง์ด ์ ๋ต์ ์๋๋๋ค.\nํ์ด์ฌ ํ๋ก์ ํธ๋ ์คํํด๋ณด๋ฉด์ ์ด๋ป๊ฒ ํ๋ฉด ๋ ์ข์ ํ๋ก๊ทธ๋จ์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ์ ์๋์ง ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด์ํด๊ฐ๋ฉฐ ๊ณต๋ถํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.\n\nใ ๋์ ๋
์์ธต ใ\n- ํ์ด์ฌ์ ์ฒ์ ์ ํ๋ ๋ถ\n- ํ์ด์ฌ ํ๋ก๊ทธ๋๋ฐ ์
๋ฌธ์ ๋ฐ ํ์\n- ํ์ด์ฌ ๊ธฐ์ด ๋ฌธ๋ฒ๋ง ์๊ณ ํ์ฉํ๊ธฐ ์ด๋ ค์ด ๋ถ'},
{'title': 'ํผ์ ๊ณต๋ถํ๋ ๋ฐ์ดํฐ ๋ถ์ with ํ์ด์ฌ (1:1 ๊ณผ์ธํ๋ฏ ๋ฐฐ์ฐ๋ ๋ฐ์ดํฐ ๋ถ์ ์์ต์)',
'link': 'https://search.shopping.naver.com/book/catalog/36555425618',
'image': 'https://shopping-phinf.pstatic.net/main_3655542/36555425618.20231004072457.jpg',
'author': '๋ฐํด์ ',
'discount': '23400',
'publisher': 'ํ๋น๋ฏธ๋์ด',
'pubdate': '20230102',
'isbn': '9791169210287',
'description': 'ํผ์ ํด๋ ์ถฉ๋ถํ๋ค! 1:1 ๊ณผ์ธํ๋ฏ ๋ฐฐ์ฐ๋ ๋ฐ์ดํฐ ๋ถ์ ์์ต์\n\n์ด ์ฑ
์ ๋
ํ์ผ๋ก ๋ฐ์ดํฐ ๋ถ์์ ๋ฐฐ์ฐ๋ ์
๋ฌธ์๊ฐ ‘๊ผญ ํ์ํ ๋ด์ฉ์ ์ ๋๋ก ํ์ต’ํ ์ ์๋๋ก ๊ตฌ์ฑํ์ต๋๋ค. ๋ญ ๋ชจ๋ฅด๋์ง์กฐ์ฐจ ๋ชจ๋ฅด๋ ์
๋ฌธ์์ ๋ง์ฐํ ๋ง์์ ์ญ๋ถ ๊ณต๊ฐํ์ฌ ๊ณผ์ธ ์ ์๋์ด ์๋ ค์ฃผ๋ฏ ์น์ ํ๊ฒ, ํต์ฌ์ ์ธ ๋ด์ฉ๋ง ์ฝ์ฝ ์ง์ด ์ค๋๋ค. ์ฑ
์ ์ฒซ ํ์ด์ง๋ฅผ ํผ์ณ์ ๋ง์ง๋ง ํ์ด์ง๋ฅผ ๋ฎ์ ๋๊น์ง, ํผ์์๋ ์ถฉ๋ถํ ๋ฐ์ดํฐ ๋ถ์์ ๋ฐฐ์ธ ์ ์๋ค๋ ์์ ๊ฐ๊ณผ ํ์ ์ด ๊ณ์๋ ๊ฒ์
๋๋ค!\n\n๋ฒ ํ๋ฆฌ๋ ๊ฒ์ฆ์ผ๋ก, ‘ํจ๊ป ๋ง๋ ’ ์
๋ฌธ์ ๋ง์ถคํ ๋์\n๋ฒ ํ๋ฆฌ๋์ ํจ๊ป ์
๋ฌธ์์๊ฒ ๋ง๋ ๋์ด๋, ๋ถ๋, ํ์ต ์์ ๋ฑ์ ๊ณ ๋ฏผํ๊ณ ์ด๋ฅผ ์ ๊ทน ๋ฐ์ํ์ต๋๋ค. ์ด๋ ค์ด ์ฉ์ด์ ๊ฐ๋
์ ํ ๋ฒ ๋ ํ์ด์ฐ๊ณ , ๋ณต์กํ ์ค๋ช
์ ๋์ ์ ๋ค์ด์ค๋ ๊ทธ๋ฆผ์ผ๋ก ํ์ด๋์ต๋๋ค. ‘ํผ์ ๊ณต๋ถํด ๋ณธ’ ์ฌ๋ฌ ์
๋ฌธ์์ ์ด์ฌ๊ณผ ๋๋์ด๊ฐ ์ฑ
๊ณณ๊ณณ์ ๋ฐ์๋ ๊ฒ์ด ์ด ์ฑ
์ ๊ฐ์ฅ ํฐ ์ฅ์ ์
๋๋ค.\n\n๋๊ตฌ๋ฅผ ์ํ ์ฑ
์ธ๊ฐ์?\n\nโ\t๋ฐ์ดํฐ ๋ถ์์ ์ด๋ป๊ฒ ์์ํ ์ง ๋ง๋งํ ๋น์ ๊ณต์\nโ\tํ์ด์ฌ์ ๋ฐฐ์ด ๋ค์ ์๋ฏธ ์๋ ์ค์ต์ ํด ๋ณด๊ณ ์ถ์ ํ์ด์ฌ ์
๋ฌธ์\nโ\tํ๋ก๊ทธ๋๋ฐ์ ์์ง๋ง, ๋ถ์(ํต๊ณ)์ ๋ํ ์ดํด๊ฐ ํ์ํ ๊ฐ๋ฐ์\nโ\t๋ฐ์ดํฐ์์ ์ ์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด ์ด๋ฅผ ๊ธฐํ์ด๋ ๋ง์ผํ
์ ์ ์ฉํด ๋ณด๊ณ ์ถ์ ์ง์ฅ์ธ\nโ\t๋ฐ์ดํฐ ๋ถ์๊ฐ, ๋ฐ์ดํฐ ์ฌ์ด์ธํฐ์คํธ๋ผ๋ ์ง์
์ ๊ด์ฌ ์๋ ๋ชจ๋ ์ฌ๋'},
{'title': 'ํ์ด์ฌ์ผ๋ก ์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๋ฃ๊ตฌ์กฐ (๊ฐ์ ํ)',
'link': 'https://search.shopping.naver.com/book/catalog/40595743620',
'image': 'https://shopping-phinf.pstatic.net/main_4059574/40595743620.20230711115354.jpg',
'author': '์ต์๊ท^์ฒ์ธ๊ตญ',
'discount': '26100',
'publisher': '์๋ฅ์ถํ',
'pubdate': '20230626',
'isbn': '9791192932187',
'description': '์๋ฃ๊ตฌ์กฐ(data structure)๋ ์ปดํจํฐ๋ก ์ฒ๋ฆฌํ ์๋ฃ๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๊ตฌ์กฐํ์ํค๊ธฐ ์ํ ํ๋ฌธ์ผ๋ก ์ปดํจํฐ ๋ถ์ผ์์ ๋งค์ฐ ์ค์ํ๊ณ ๊ธฐ์ด์ ์ธ ๊ณผ๋ชฉ์ด๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋
์ ์ดํด์ ํจ๊ป ์ฝ๋ฉ์ ํตํ ๊ตฌํ ๋ฅ๋ ฅ์ด ํ์์ ์ผ๋ก ์๊ตฌ๋๊ธฐ ๋๋ฌธ์ ํ์๋ค์ด ์ด๋ ค์ํ๋ ๊ณผ๋ชฉ์ด๊ธฐ๋ ํ๋ค.\n์ด ์ฑ
์ ์
๋ฌธ์๋ค์ด ๋ณด๋ค ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๊ณ ๋ค์ํ ๋ฌธ์ ํด๊ฒฐ์ ํ์ฉํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ธฐ๋ฅด๋๋ฐ ์ด์ ์ ๋ง์ถ์๋ค.'}]}
๐ปsample df
import pandas as pd
def get_fields(json_data):
title = [each["title"] for each in json_data["items"]]
price = [each["discount"] for each in json_data["items"]]
publisher = [each["publisher"] for each in json_data["items"]]
isbn = [each["isbn"] for each in json_data["items"]]
link = [each["link"] for each in json_data["items"]]
result_pd = pd.DataFrame({
"title" : title,
"price" : price,
"publisher" : publisher,
"isbn" : isbn,
'link' : link
}, columns=["title", "price", "publisher", "isbn", 'link'])
return result_pd
get_fields(one_result)
๐ป๋๋์ผ๋ก ์ถ์ถํ๊ธฐ
# 100๊ฐ ์ฉ 10๋ฒ ์ถ์ถํ๋ ๋ฐฉ์
# Naver Api๊ฐ ํ ๋ฒ์ ํ ์ ์๋ ๊ฐ์๊ฐ ์ ํด์ ธ ์์ด์ concat์ผ๋ก ๋จ์ํ DF๋ฅผ ๋ถ์ฌ์ค๋ค
# index๊ฐ ๊ผฌ์ด๊ธฐ ๋๋ฌธ์, reset_index ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฑด ํ์
result_book = []
for n in range(1, 1000, 100):
url = gen_search_url("book", "ํ์ด์ฌ", n, 100)
json_result = get_result_onpage(url)
pd_result = get_fields(json_result)
result_book.append(pd_result)
result_book = pd.concat(result_book)
result_book.reset_index(drop=True, inplace=True)
result_book
๐ป๊ฐ๊ฒฉ ์ ๋ณด type ์์
result_book.info()
>>>>
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 928 entries, 0 to 927
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 title 928 non-null object
1 price 928 non-null object
2 publisher 928 non-null object
3 isbn 928 non-null object
4 link 928 non-null object
dtypes: object(5)
memory usage: 36.4+ KB
result_book['price'] = result_book['price'].astype('float')
๐ป์ชฝ ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ (book page)
import numpy as np
def get_page_num(soup):
try:
tmp = soup.find_all(class_="bookBasicInfo_spec__qmQ_N")[0].get_text()
except:
print('--> out of list error')
try:
result = tmp[:-1]
return result
except:
print("--> Error in get_page_num")
return np.nan
get_page_num(soup)
import time
page_num_col = []
# result_book์ link ์ปฌ๋ผ์์ url์ ํ๋์ฉ ๋ฝ์์จ๋ค.
for url in result_book['link']:
print(url)
# ๊ฐ ์ฑ
์ ํ์ด์ง ์๋ฅผ get_page_num ํจ์๋ฅผ ํตํด์ ๊ตฌํ๊ธฐ
try:
page_num = get_page_num(BeautifulSoup(urlopen(url), 'html.parser'))
page_num_col.append(page_num)
# try, except๋ฅผ ํ์ฉํ์ฌ ์ค๋ฅ๊ฐ ๋ ๋, NaN ๋ฐ์ดํฐ๋ก ์ฒ๋ฆฌํ๊ธฐ
except:
print('--> Error')
page_num_col.append(np.nan)
print(len(page_num_col))
time.sleep(0.5)
# ํ์ด์ง ์ append ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฉ
result_book['page_num'] = page_num_col
result_book['page_num'] = result_book['page_num'].astype('float')
๐ปNaN ๋ฐ์ดํฐ ๋์จ ๋ถ๋ถ์ ๋ค์ ๊ตฌํด๋ณด๊ธฐ
for i, r in result_book.iterrows():
if np.isnan(r['page_num']):
print(r['link'])
page_num = get_page_num(BeautifulSoup(urlopen(r['link']), 'html.parser'))
result_book.loc[i, 'page_num'] = page_num
time.sleep(0.5)
๐ ๊ฒฐ์ธก์น ํ์ธ ํ ์ฒ๋ฆฌํ๊ธฐ
๐ปraw_data
→ NaN ๋ฐ์ดํฐ์ Price ๊ฐ์ด 0์ธ ๋ฐ์ดํฐ ๋ฑ ๊ฒฐ์ธก์น ์ฒ๋ฆฌ ํ 835๊ฐ์ ํ์ด ๋จ์๋ค.
๐ ์๊ด๊ด๊ณ ํ์ธ
๐ปํ์ด์ง ์์ ๊ฐ๊ฒฉ๊ณผ์ ์๊ด๊ด๊ณ
→ ์ชฝ์๊ฐ ๋ง์ ์๋ก, ๊ฐ๊ฒฉ์ด ๋์์ง๋ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
→ 100,000์ ๋ถ๊ทผ์ ์ด์์น๊ฐ ์๋ ๊ฒ ๊ฐ๋ค?..
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(12, 8))
sns.regplot(x='page_num', y='price', data = raw_data)
plt.show()
๐ป๊ด๋ จ ์ฑ ์ ๋ง์ด ์ถํํ ์ถํ์ฌ์ ๊ฐ๊ฒฉ์ ์๊ด๊ด๊ณ
# ๋ง์ด ์ถํํ ์ถํ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์งํ
raw_1 = raw_data[raw_data['publisher'] == '์์ด์ฝ์ถํ']
plt.figure(figsize=(12, 8))
sns.regplot(x='page_num', y='price', data=raw_1)
plt.show()
raw_2 = raw_data[raw_data['publisher'] == 'ํ๋น๋ฏธ๋์ด']
plt.figure(figsize=(12, 8))
sns.regplot(x='page_num', y='price', data=raw_1)
plt.show()
raw_3 = raw_data[raw_data['publisher'] == '์ํค๋ถ์ค']
plt.figure(figsize=(12, 8))
sns.regplot(x='page_num', y='price', data=raw_1)
plt.show()
๐ train, test ๋ฐ์ดํฐ
๐ป์ ํ ํ๊ท ์งํ (raw_data)
from sklearn.model_selection import train_test_split
X = raw_data['page_num'].values
y = raw_data['price'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=13)
X_train = X_train.reshape(-1, 1)
X_test = X_test.reshape(-1, 1)
from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(X_train, y_train)
from sklearn.metrics import mean_squared_error
pred_tr = reg.predict(X_train)
pred_test = reg.predict(X_test)
rmse_tr = (np.sqrt(mean_squared_error(y_train, pred_tr)))
rmse_test = (np.sqrt(mean_squared_error(y_test, pred_test)))
# ์๋ฌ ๊ณ์ฐ
print("RMSE of Train Data : ", rmse_tr)
print("RMSE of Train Data : ", rmse_test)
>>>>
RMSE of Train Data : 5488.9696012934755
RMSE of Train Data : 4469.722562719371
plt.scatter(y_test, pred_test)
plt.xlabel('Actual')
plt.ylabel('Predict')
plt.plot([0, 80000],[0, 80000],'r')
plt.show()
๐ป์ ํ ํ๊ท ์งํ (1๋ฑ ์ถํ์ฌ ๊ธฐ์ค)
X = raw_1['page_num'].values
y = raw_1['price'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=13)
X_train = X_train.reshape(-1, 1)
X_test = X_test.reshape(-1, 1)
reg.fit(X_train, y_train)
pred_tr = reg.predict(X_train)
pred_test = reg.predict(X_test)
rmse_tr = (np.sqrt(mean_squared_error(y_train, pred_tr)))
rmse_test = (np.sqrt(mean_squared_error(y_test, pred_test)))
print("RMSE of Train Data : ", rmse_tr)
print("RMSE of Train Data : ", rmse_test)
>>>>
RMSE of Train Data : 3468.6898753299415
RMSE of Train Data : 4445.502939270577
plt.scatter(y_test, pred_test)
plt.xlabel('Actual')
plt.ylabel('Predict')
plt.plot([0, 80000],[0, 80000],'r')
plt.show()
๐ป๊ฒฐ๋ก ?
→ raw_data ์ ์ฒด๋ฅผ ์งํํ์ ๋ ๋ณด๋ค ์ถํ์ฌ ๋ณ๋ก ์งํํ ๋ฐ์ดํฐ๊ฐ ์ข ๋ ์์ธก์ ์ ํ๋ ๊ฒ ๊ฐ๋ค.
→ raw_data๋ ํน์ ๋ถ๋ถ์ ๋ง์ด ๋ญ์ณ ์๋ ๊ฒ ๊ฐ๋ค (์๋ฌด๋๋ ๋ฐ์ดํฐ๊ฐ ํ ๊ณณ์ ๋ชฐ๋ ค ์๋ ๊ฒ์ด ๋ง์ผ๋ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.)
→ ๋ถ์ผ๋ณ๋ก ์ ๊ฒํ๋ ๊ฒ๋ ํด๋ณด๋ฉด ์ข์ ๋ฏ?