โ Team EV
2019 BottomUp
์ด์ธํ, ์ด๊ท๋ด, ์ต์๋ฏผ
์ฝ๋ฉํธ์ ๋ํด ๊ฐ์ฑ๋ถ์์ ํ์ฌ ๊ธ์ ๋ฐ ๋ถ์ ์ ๋ํ ์ ๋๋ฅผ ์์ผ๋ก ํํํจ์ผ๋ก์จ
์๋์ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์๋ค.
- ์ ์ฑ ๋๊ธ ์์ฑ์๋ค์๊ฒ ์์ ์ด ์ด ๊ธ์ ๋ํ ๊ฒฝ๊ฐ์ฌ์ ์ค ์ ์๋ค.
- ๋จ์ ํ์ ๋ฆฌ๋ทฐ ๊ฐ์ ๊ฒฝ์ฐ, ๊ฐ์ฑ์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ๋ฆฌ๋ทฐ์ ๋ํ ์ ๋ขฐ์ฑ์ ๋ณด๊ฐ ํ ์ ์๋ค.
- ์ ์, ์๋์ฉ ํ๋ซํผ์ ์ ์ฉ ์ ๊ต์ก์ฉ์ผ๋ก ํ์ฉ ํ ์ ์๋ค.
CNU-EV๋ ๊ฐ์ ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋๊ธ ์ปดํฌ๋ํธ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๊ตฌ์ฑ๋ 3๊ฐ์ ํ๋ก์ ํธ์ ๋๋ค.
-
ev-commentService : ์งํฌํ ๋ธ๋ก๊ทธ์ ๋๊ธ์ ๋ฌ ์ ์๊ฒ ์ปดํฌ๋ํธ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์ธ '์ต๊ทผ ์์ฑ๋ ๋๊ธ', '์ข์ ํ๊ฐ๋ฅผ ๋ฐ์ ๊ฒ์๋ฌผ', '์ธ๊ธฐ ํฌ์คํ ๋ถ์', '๋๊ธ์ด ๋ง์ ๊ฒ์๋ฌผ' ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
ev-backend : ๋ถ์์ฌ์ดํธ๋ฅผ ์ ์ํ๋ Team-Ev์ backend repository ์ ๋๋ค. Django๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋์์ผ๋ฉฐ, konlpy์ tensorflow ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ์ ๋ถ์ ํ๋ณ๊ธฐ๋ฅผ ํฌํจํฉ๋๋ค.
-
ev-sentimentalAnalysis : ์๊ณ ์๋ฒ ๋ด ๋๊ธ ๊ฐ์ ๋ถ์ ๋ชจ๋์ ๋๋ค.
ํ๋ก์ ํธ์ ์ฌ์ฉ๋ svg ์์ด์ฝ์ ๋ชจ๋ ์๋ ํ์ด์ง์์ ๋ค์ด๋ก๋ํด ์ฌ์ฉํ ๊ฒ์ด๋ค.
##### Front, PHP Server #####
xampp for windows 7.1.30, xampp control panel 3.2.4
Apache 2.4.39
MariaDB 10.3.16 (MySQL)
phpMyAdmin 4.9.0.1
Bootstrap 4.3.1, popper.js, mdb.js, chart.js
JQuery 3.2.1
Ruby Sass 3.7.4
##### Emotion Analasis Djanjo Server #####
absl-py==0.7.1
astor==0.8.0
boto==2.49.0
boto3==1.9.194
botocore==1.12.194
certifi==2019.6.16
chardet==3.0.4
Django==2.0.13
django-cors-headers==3.0.2
docutils==0.14
gast==0.2.2
gensim==3.8.0
google-pasta==0.1.7
grpcio==1.22.0
h5py==2.9.0
idna==2.8
jmespath==0.9.4
joblib==0.13.2
JPype1==0.7.0
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
konlpy==0.5.1
Markdown==3.1.1
mecab-python==0.996
numpy==1.16.4
pkg-resources==0.0.0
protobuf==3.9.0
pybind11==2.3.0
python-dateutil==2.8.0
pytz==2019.1
requests==2.22.0
s3transfer==0.2.1
scikit-learn==0.21.2
scipy==1.3.0
six==1.12.0
smart-open==1.8.4
tensorboard==1.14.0
tensorflow==1.14.0
tensorflow-estimator==1.14.0
termcolor==1.1.0
urllib3==1.25.3
uWSGI==2.0.18
Werkzeug==0.15.5
wrapt==1.11.2
๋ฐฑ์๋๋ php ์๋ฒ (evCommentService.ga) ์ ์๊ณ ์๋ฒ (emotionanalysisservice.ga) ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
evcommentservice.ga ํํ์ด์ง ๋ฐ Comment.php์ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์ฉ์ดํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก Bootstrap์ ์ ์ฉํ๋ค.
๊ทธ ์ธ ๋๋ฉ์ธ ์๋๋ freenom (https://www.freenom.com/en/index.html?lang=en),
https ํ๋กํ ์ฝ ๋ฑ๋ก์ cloudFlare (https://jsdev.kr/t/https-cloudflare-flexible-ssl/1973) ๋ฅผ ์ด์ฉํ๋ค.
Jekyll-Script.html์ Github Page ๋ฑ ์งํฌ ๊ธฐ๋ฐ์ ๋ธ๋ก๊ทธ์์ ์ฝ๊ฒ ๋๊ธ ์๋น์ค๋ฅผ ์ถ๊ฐํ ์ ์๋๋ก ๋ง๋ ์ปดํฌ๋ํธ ํ์ผ์ด๋ค.
์งํฌ ๊ธฐ๋ฐ์ ๋ธ๋ก๊ทธ์์ URL์ ์๋น์ค์ ๋ฑ๋กํ๊ณ ์ฌ์ฉํ๋ ์ ์ฐจ๋ ์๋์ ๊ฐ๋ค.
1 - https://evcommentservice.ga์ ๊ฐ์
ํ๊ณ , + ๋ฒํผ์ ํด๋ฆญํด, ์๋น์ค๋ฅผ ์ฌ์ฉํ ํํ์ด์ง์ URL์ ๋ฑ๋กํ๋ค.
URL์ ๋ฑ๋กํ ๋ https:{domain}.ga ์ฒ๋ผ ๋ฑ๋กํด์ผ ํ๊ณ , ๋ค์ / ๊ฐ ๋ถ์ผ๋ฉด ์ ๋๋ ๊ฒ์ ์ฃผ์.
2 - _config.yml (ํ๋ก์ ํธ ์ค์ ํ์ผ) ์ ์๋์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํ๋ค. User ID๋ ์์์ ๊ฐ์
ํ ํํ์ด์ง์ ID๋ฅผ ๋ฑ๋กํ๋ค.
ev_username: {User ID}
3 - EV-Script.html ํ์ผ์ post layout ๋๋ ์ํ๋ ํ์ด์ง์ ์ถ๊ฐํ๋ค.
({% include EV-Script.html %}๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ง์ ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ๋๋ค.)
4 - ๋๊ธ ์ฐฝ์ ๋ฃ์ ๊ณต๊ฐ์ div ํ๊ทธ๋ฅผ ๋ง๋ค๊ณ id๋ฅผ EV-Start๋ก ์ค์ ํ๋ค.
๋ธ๋ก๊ฑฐ๋ ์์ ์ ๋ธ๋ก๊ทธ ๋๊ธ ์๋น์ค์ ๊ฐ์ ๋ถ์ ์๋น์ค๋ฅผ ์ ์ฉํ ์ง ์ ํ ์ง, ์ ์ฉํ๋ค๋ฉด ์ด๋ป๊ฒ ์คํ์ผ๋ง ๋ ์ง๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค. ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
์๋ ev_mode๋ ๋ํดํธ ๊ฐ์ผ๋ก, full์ ๊ฐ๋๋ค.
๋ธ๋ก๊ทธ ์ค์ ํ์ผ _config.yml ๋ด ev_mode์ ์๋ ์ค ํ๋์ ๊ฐ์ ์ค์ ํ๋ค.
ev_username: { full, binary, none, debug }
full : ๋๊ธ ๋ด์ฉ์ ๋ถ์ ~ ๊ธ์ ์ ๋์ ๋ฐ๋ผ ์์์ 10 ๋จ๊ณ๋ก ๋๋ ์ ์ฉํ๋ค.
binary : ๋๊ธ ๋ด์ฉ์ ๋ฐ๋ผ ๊ธ์ , ๋ถ์ , ์ค๋ฆฝ ์ธ ๋จ๊ณ๋ก๋ง ๋๋ ์คํ์ผ์ ์ ์ฉํ๋ค.
none : ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ํ๋ด์ง ์๋๋ค. (๊ฐ์ ๋ถ์ ๊ฐ์ ์๋ฒ์ ์ ์ฅํด ๋๋๋ค.)
debug : ๋๊ธ ๊ฐ์ ๋ถ์ ์๋น์ค๋ฅผ ์ด์ฉํ์ง ์๋๋ค. (๊ฐ์ ์๋ฒ์ ์ ์ฅํ์ง ์์)
์ ๋ ฅ๋ฐ์ดํฐ(๋ฌธ์ฅ) -> ์ ์ฒ๋ฆฌ๋ ๋ฌธ์ฅ -> ๋ฒกํฐ๋ก ์๋ฒ ๋ฉ -> ๋ชจ๋ธ์ ๋ฐ๋ฅธ ๊ฐ์ฑ๋ถ์ ๊ฒฐ๊ณผ
-
์ ์ฒ๋ฆฌ - ํํ์ ๋ถ์(ํ๊น )
Konlpy - Mecab ์ฌ์ฉ
-
๋จ์ด ์๋ฒ ๋ฉ
1.word2vec
from : https://becominghuman.ai/how-does-word2vecs-skip-gram-work-f92e0525def4
Word2Vec์ ์ค์ฌ๋จ์ด์ ์ฃผ๋ณ๋จ์ด ๋ฒกํฐ์ ๋ด์ ์ด ์ฝ์ฌ์ธ ์ ์ฌ๋๊ฐ ๋๋๋ก ๋จ์ด๋ฒกํฐ๋ฅผ ๋ฒกํฐ๊ณต๊ฐ์ ์๋ฒ ๋ฉ.
์ค์ฌ๋จ์ด์ ํด๋นํ๋ ๋ฒกํฐ์ ์ฃผ๋ณ๋จ์ด์ ํด๋นํ๋ ๋ฒกํฐ์ ๋ด์ ๊ฐ์ ๋์ด๋ ๋ฐฉ์์ผ๋ก ์๋ฒ ๋ฉ์ ํ๋ค.
๋ฒกํฐ ๋ด์ ์ ์ฝ์ฌ์ธ์ด๋ฏ๋ก ๋ด์ ๊ฐ ์ํฅ์ ๋จ์ด๋ฒกํฐ ๊ฐ ์ ์ฌ๋๋ฅผ ๋์ธ๋ค2.Glove
from : https://nlp.stanford.edu/projects/glove/
GloVe์ ์๋ฒ ๋ฉ๋ ๋ ๋จ์ด๋ฒกํฐ์ ๋ด์ ์ด ๋ง๋ญ์น ์ ์ฒด์์์ ๋์ ๋ฑ์ฅํ๋ฅ ๋ก๊ทธ๊ฐ์ด ๋๋๋ก ๋ชฉ์ ํจ์๋ฅผ ์ ์
์๋ฒ ๋ฉ๋ ๋จ์ด๋ฒกํฐ ๊ฐ ์ ์ฌ๋ ์ธก์ ์ ์์ํ๊ฒ ํ๋ฉด์๋ ๋ง๋ญ์น ์ ์ฒด์ ํต๊ณ ์ ๋ณด๋ฅผ ์ข ๋ ์ ๋ฐ์ํ๋๋ก ํ๋ค.
์๋ฒ ๋ฉ ๋ ์ค์ฌ ๋จ์ด์ ์ฃผ๋ณ ๋จ์ด ๋ฒกํฐ์ ๋ด์ ์ด ์ ์ฒด ์ฝํผ์ค์์์ ๋์ ๋ฑ์ฅ ํ๋ฅ ์ด ๋๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ. -
ํ์ต๋ชจ๋ธ
-
Logistic Regression (Multi Layer Neural Network)
-
LSTM+Attension (Recurrent Neural Network)
-
๋ ๋ฐฉ๋ฒ์ ์ฑ๋ฅ ์ฐจ์ด
75000๊ฐ์ test set์ ๋ํด์
Glove_ACC = 0.8672 Word2Vec_ACC = 0.8509
Glove_SN = 0.8458 Word2Vec_SN = 0.8271
Glove_PREC = 0.8847 Word2Vec_PREC = 0.8697
Glove_SP = 0.8888 Word2Vec_SP = 0.8749
Glove_ERR = 0.1327 Word2Vec_ERR = 0.1483
Glove_FPR = 0.1111 Word2Vec_FPR = 0.1250
- ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ๋ก๊ทธ์์, ์ ๋ณด๋ณ๊ฒฝ
evCommentService.ga์ ํ์๊ฐ์ ํ ๋ ํ์ ์ ๋ ฅ ๊ฐ์ผ๋ก ID, PW, PW ํ์ธ์ ์ ๋ ฅํด์ผ ํ๋ค. ๊ทธ ์ธ ์ ํ ์ ๋ ฅ ๊ฐ์ผ๋ก ์ฑ๋ณ, ์ด๋ฆ (์ฑ, ์ด๋ฆ), ์ด๋ฉ์ผ ์ฃผ์, ์ฃผ์, ํธ๋ํฐ ๋ฒํธ๋ฅผ ์ ๋ ฅํ ์ ์์ผ๋ฉฐ, ์์ด๋, ์ด๋ฉ์ผ, ํธ๋ํฐ ๋ฒํธ๋ ์ ๊ท์์ ํตํด ์๋ง์ ๊ฐ์ธ์ง๋ฅผ ๊ฒ์ฌํ๋ค.
๊ทธ ์ธ ์ํ๋ ํ๋กํ ์ฌ์ง์ ์
๋ก๋ํด ๋ฑ๋กํ ์ ์๋ค. ํ๋กํ ์ฌ์ง์ผ๋ก ์
๋ก๋ ๊ฐ๋ฅํ ํ์ผ์ png, jpg, jpeg์ด๋ค.
์ ๋ ฅํ ์ ๋ณด์ ์ ๋ก๋๋ ํ๋กํ ์ฌ์ง์ PHP ์๋ฒ์ ์ ์ฅ๋๋ฉฐ, ์ ๋ณด ๋ณ๊ฒฝ ํ์ด์ง์์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ ๋ณด ๋ณ๊ฒฝ ํ์ด์ง์์ ํ๋กํ ์ฌ์ง์ ๋ค์ ์ ๋ก๋ํ๋ฉด ๊ธฐ์กด์ ํ๋กํ ์ฌ์ง ํ์ผ์ ์ง์์ง๊ณ , ์๋ก ์ ๋ก๋๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
์
๋ก๋๋ ํ๋กํ ์ฌ์ง์ Comment.php์์ ์ ์ถํ ๋๊ธ์ ํ์๋๋ค.
๋ก๊ทธ์ธ, ๋ก๊ทธ์์์ ์ธ์ ์ ์ฌ์ฉํด ๊ตฌํํ๋ค.
- ๋ก๊ทธ์ธ ํ๋ฉด
- ํ์๊ฐ์ ํ๋ฉด
- ์ ๋ณด ์์
- ์๋น์ค ๋ฑ๋ก ๋ฐ ์ญ์
evCommentService.ga์ ํ์๊ฐ์ ํด, ์์ด๋๋ฅผ ์์ฑํ๋ฉด ์์ ์ ์งํฌ ๋ธ๋ก๊ทธ URL์ ์ ๋ ฅํจ์ผ๋ก์จ, ๋๊ธ ์๋น์ค๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
์๋น์ค๋ฅผ ๋ฑ๋กํ ์์ ์์ ๋ฑ๋ก๋ URL์ ํด์ฑ ๊ฐ์ผ๋ก ์ DB๋ฅผ ์์ฑํ๋ฉฐ, ์ด DB์ ํน์ํ ํ ์ด๋ธ์ธ
pageTitlePairs์ visitorCounter๋ฅผ ์์ฑํด๋๋ค.
์๋น์ค๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ฑ๋กํด๋์ DB๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ, ๊ทธ ์์ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ํ ์ด๋ธ๋ ๋ชจ๋ ์ ๊ฑฐ๋๋ค.
- ์๋น์ค ์ถ๊ฐ
- ์๋น์ค ํํ์ด์ง
- ํด๋ผ์ด์ธํธ ๋ธ๋ก๊ทธ์์ PHP ์๋ฒ์ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ณผ์
ํ๋ก ํธ๋ Jekyll ๊ธฐ๋ฐ์ ๋ธ๋ก๊ทธ๋ผ๊ณ ๊ฐ์ ํ๋ค. ํด๋ผ์ด์ธํธ (๋ธ๋ก๊ฑฐ)๋ Jekyll-Script.html๋ฅผ ๋ค์ด๋ก๋ ๋ฐ๊ฑฐ๋ ๋ณต์ฌํ์ฌ, ์์ ์ ๋ธ๋ก๊ทธ ํฌ์คํธ ํ
ํ๋ฆฟ์ ์ธํด๋ฃจ๋ ์์ผ์ผ ํ๋ค. ํฌ์คํธ ํ
ํ๋ฆฟ์ site.url, page.id, page.title ๊ฐ์ ๊ฐ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ค. (Jekyll ๊ธฐ๋ฐ์ ๋ธ๋ก๊ทธ์ ๋ชจ๋ ๋ช
์๋์ด ์๋ ๊ฐ)
ํด๋ผ์ด์ธํธ๋ _config.yml ํ์ผ์ site.ev_username ์์ฑ์ ๋ช
์ํด์ผ ํ๋ฉฐ, ev_mode ์์ฑ์ ๋ช
์ํด ์๋น์ค๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ด์ฉํ ์๋ ์๋ค.
์ธํด๋ฃจ๋ ๋ Jekyll-Script.js ํ์ผ์ ๋ฑ๋ก๋ ๋ธ๋ก๊ทธ์ ํฌ์คํ
๊ธ์ด ๋ก๋๋ ๋, PHP ์๋ฒ์์ script.js ํ์ผ์ ๋ด๋ ค๋ฐ์, ๋น๋๊ธฐ๋ก ์คํํ๋ค.
(script.js๋ฅผ async๋ก ์คํํ๋ ์ด์ ๋, iframe์ ๋ก๋ฉ์ ์ธ๋ถ ํ์ด์ง (์งํฌ ๋ธ๋ก๊ทธ)์ ๋ก๋ฉ์ ๊ฑฐ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์คํํ๊ธฐ ์ํด์์ด๋ค.)
์คํฌ๋ฆฝํธ ํ์ผ์ Jekll-Script.js์ script.js ํ์ผ๋ก ๋ ๋จ๊ณ๋ก ๋๋ ๋์ ๊ฒ์, ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ๋์ด์ผํ ๋ก์ง๊ณผ ์๋ฒ ๋จ๊ณ์์ ์คํ๋์ด์ผ ํ ๋ก์ง์ ๋ถ๋ฆฌํจ์ผ๋ก์จ, ํด๋ผ์ด์ธํธ ์ธก์์์ ๋ณต์ก์ฑ์ ๋ฎ์ถ๊ณ ์ค์๋์ ์ค์ด๊ธฐ ์ํด์์ด๋ค. (ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ธก ๋ก์ง์ธ script.js๋ฅผ ์์ ํ ์ ์๋ค)
script.js ํ์ผ์์ , ๋ค์ด์จ ์์ฒญ์ด ์ฌ๋ฐ๋ฅธ ํ๋ผ๋ฏธํฐ ๊ฐ๋ค์ ๊ฐ์ถ๊ณ ์๋์ง ๊ฒ์ฌํ๊ณ , ํ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๊ฒฐ์ฌ๋์ด ์๋ค๋ฉด PHP ์๋ฒ์ ์์ฒญํ์ง ์๋๋ค. ํ๋ผ๋ฏธํฐ ๊ฐ๋ค์ด ๊ฐ์ถฐ์ ธ ์๋ค๋ฉด, PHP ์๋ฒ์ URLVerification.php ํ์ผ์ ajax๋ก ์์ฒญํ๋ค.
URLVerification.php๋ DB๋ฅผ ํ์ํด evCommentService.ga ์ฌ์ดํธ์ ๋ฑ๋ก๋์ด ์๋ ์ฌ์ดํธ์ ์์ฒญ์ธ์ง๋ฅผ ํ์ธํ๋ค. ์ด ๋ DB์ ๋ฑ๋ก๋์ด ์์ง ์์ ์ฌ์ดํธ์ธ ๊ฒฝ์ฐ์, ์๋์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ฉฐ ์๋น์ค์ ๋ฑ๋กํ ๊ฒ์ ๊ถ์ ํ๋ค.
DB์ ๋ฑ๋ก๋์ด ์๋ ์ฌ์ดํธ์ ์์ฒญ์ธ ๊ฒฝ์ฐ, ์ ๋นํ ์์ฒญ์ผ๋ก ํ์ ํ๊ณ , URL์ ํด๋นํ๋ DB์์ ํด๋น ์๋ธ URL์ ํด๋นํ๋ ํ
์ด๋ธ์ด ์๋์ง ๊ฒ์ฌํ๋ค. ์ด ์์ ์์ ํ
์ด๋ธ์ด ์๋ ๊ฒฝ์ฐ ์ ํ
์ด๋ธ์ ๋ง๋ ๋ค. ๊ทธ ํ, ํด๋ผ์ด์ธํธ ์ธก์์ ์คํ๋๊ณ ์๋ script.js๋ก ์ฝ๋ฉํธ ํ์ด์ง์ iframe์ ์ ์กํ๋ค.
์ด iframe์ Comment.php๋ฅผ ์ฐธ์กฐํ๋ฉฐ, Get ๋ฐฉ์์ผ๋ก URL_ID, pageID, mode, paginationID ๋ผ๋ 4๊ฐ์ ๋ณ์ ๊ฐ์ ๋๊ฒจ์ค๋ค.
Get ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์ ๊ฐ์ ๊ฐ์ ํตํ ์์ฒญ์ผ ๊ฒฝ์ฐ ํญ์ ๊ฐ์ ์ถ๋ ฅ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค๋ ๊ฒ๊ณผ, ์ 4๊ฐ์ ๋ณ์๋ค์ด ๋ณด์ ์
ํฌ๊ฒ ๋ณดํธ๋์ด์ผ ํ ๊ฐ์ ์๋๋ผ๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
4๊ฐ์ ๊ฐ์ ๋๊ฒจ ๋ฐ์ Comment.php๋ ๋๊ฒจ ๋ฐ์ ๊ฐ์ ํตํด DB์์ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ PaginationDivision (10)๊ฐ ๋งํผ ๋๊ธ ์ฐฝ์ ์ถ๋ ฅํ๋ค.
๋๊ฒจ๋ฐ์ ๊ฐ ์ค mode๋ฅผ ํตํด ๋ธ๋ก๊ฑฐ๊ฐ ์ค์ ํ ๋๊ธ ์คํ์ผ์ด ๊ฒฐ์ ๋๊ณ , ๋๊ธ์ ๊ฐ์ ๋ถ์ ๊ฐ๋ค๋ก ์คํ์ผ์ ์ ํ๋ค.
- full
- binary
- none, debug
ํ ์ด๋ธ์ ๋๊ธ์ด ์๋ค๋ฉด ๋ฑ๋ก๋ ๋๊ธ์ด ์๋ค๋ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
- ๋๊ธ์ ์ ์ถํ์ ๋์ ๋์ ๊ณผ์
๋ก๊ทธ์ธ ๋์ด ์์ง ์์ ์ํ์์ ๋๊ธ ์ ์ถ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฐ์ ์๋์ฒ๋ผ evCommentService.ga์ ๊ฐ์ ์ ๊ถ์ ํ๋ ๋ฉ์์ง๋ฅผ ๋์ ๋ํ๋ธ๋ค.
๊ทธ ์ํ์์ ์ ์ถ ๋ฒํผ์ ํ ๋ฒ ๋ ํด๋ฆญํ๋ฉด ์ต๋ช ์ผ๋ก ๋๊ธ์ ์ ์ถํ ์ ์๋ค. ๋ก๊ทธ์ธ ๋ ์ํ์์ ์ ์ถํ ๋๊ธ์ ์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๋๋ค.
ํด๋ผ์ด์ธํธ ํ์ด์ง์์ ๋๊ตฐ๊ฐ ๋๊ธ์ ๋ฑ๋กํ๋ฉด, ์ฐ์ ์ ์ผ๋ก cross origin ajax๋ฅผ ํตํด ์๊ณ ์๋ฒ๋ก ๋๊ธ ๋ด์ฉ์ ์ ์กํ๋ค.
์๊ณ ์๋ฒ์์ , ๊ฐ์ ๋ถ์ ๋ชจ๋์ด ์๋๋๊ณ ์์ผ๋ฉฐ, ์ด ๋ชจ๋์ ๋๊ธ ๋ด์ฉ์ input์ผ๋ก ๋ฃ์ผ๋ฉด ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฐํ๋์ด ํด๋ผ์ด์ธํธ ํ์ด์ง๋ก ์ ์ก๋๋ค.
ํด๋ผ์ด์ธํธ ํ์ด์ง์์ ์ด ๊ฐ์ด ๋๋์ ์ค๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ฐ, ๊ฐ์ ๋ฐ์ผ๋ฉด PHP ์๋ฒ์ AddComment.php์ ๋ค์ ajax๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ค.
AddComment.php๋ PHP ์๋ฒ์ ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ ๋ฐ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, AddComment.php๊ฐ ์ ์์ ์ผ๋ก ์คํ์ ๋ง์น๊ณ , ํด๋ผ์ด์ธํธ ํํ์ด์ง์
comment.js์ ์ฑ๊ณตํ์์ ์๋ฆฌ๋ฉด, ํ์ด์ง๋ฅผ ๋ฆฌ๋ก๋ ํ๋ค. ์ด ๋, iframe ๋ด๋ถ๊ฐ ๋ฆฌ๋ก๋ ๋๋ ๊ฒ์ผ๋ก, ์ธ๋ถ ํ์ด์ง๋ ๋ฆฌ๋ก๋ ๋์ง ์๋๋ค.
comment.php๊ฐ ๋ฆฌ๋ก๋ ๋๋ฉด, (์๋ก ๋ฑ๋กํ ๋๊ธ์ด) ์
๋ฐ์ดํธ ๋ DB์์ ๋ค์ PaginationDivision (10)๊ฐ์ ๋๊ธ์ด ์ต๊ทผ ๋ฑ๋ก๋ ์์ผ๋ก ์ถ๋ ฅ๋๊ฒ ๋๋ค.
- ๋๊ธ์ ์์ ๋ฐ ์ญ์
๋๊ธ์ ์์ ๋ฐ ์ญ์ ๋, ๋๊ธ์ ์ ์ถํ๋ ๋ณธ์ธ์ ID๋ก ๋ก๊ทธ์ธ ๋์ด ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๋ค. ๋๊ธ์ ์์ ํ๋ฉด, ๋ค์ ์๊ณ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด
๊ฐ์ ๋ถ์ ๊ฐ์ ๋ค์ ๋ฐ์์ค๊ฒ ๋๋ฏ๋ก, ๊ฐ์ ๋ถ์ ๊ฒฐ๊ณผ ๊ฐ ์ญ์ ๊ฐฑ์ ๋๊ณ , ๋๊ธ์ ์คํ์ผ๋ ์ ๋ฐ์ดํธ ๋๋ค.
- ๊ฐ์ ๋ถ์ ๊ฐ ๋ฆฌํฌํธ
๋๊ธ์ ์ฌ์ฉ๋ ๊ฐ์ ๋ถ์ ๊ฐ์ด ์ ์ ํ์ง ์๋ค๊ณ ์๊ฐ๋๋ ๊ฒฝ์ฐ, ์ด๋ค ์ ์ ๋ผ๋ ๋ฆฌํฌํธ ๋ฒํผ์ ๋๋ฌ ์๊ณ ์๋ฒ๋ก ์ ์ ํ์ง ์์ ๋ฐ์ดํฐ๋ผ๋
๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์๋ค. ์ด ๋ฒํผ์ evMode๊ฐ none์ผ ๋ ํ์๋์ง ์๋๋ค.
- ๊ฐ๋จํ ํต๊ณ ์๋น์ค์ ๋์ ๊ณผ์
evCommentService.ga์์ , ์์ ์ ๋ธ๋ก๊ทธ๋ฅผ ์๋น์ค์ ๋ฑ๋กํ๋ ๊ฒ ์ธ์ ๊ฐ๋จํ ํต๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ํต๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด,
๊ฐ ์๋น์ค DB ๋ด์ ํน์ํ ํ ์ด๋ธ์ ๋ ๊ฐ์ฉ ๊ฐ๊ณ ์๋ค.
ํ๋๋, ๊ฐ ํ์ด์ง์ ์ ๋ชฉ์ ํด๋นํ๋ MEDIUMTEXT ํ์์ ๊ฐ๋ค์ ์ ์ฅํ๋ pageTitlePairs ํ ์ด๋ธ์ด๋ค. ์ด ํ ์ด๋ธ์ '์ต๊ทผ ๋ฑ๋ก๋ ๋๊ธ' ์๋น์ค๊ฐ ์คํ๋ ๋,
์ด์ฉ๋๋๋ฐ, ์ต๊ทผ ๋ฑ๋ก๋ ๋๊ธ ์ด์ธ์ ์ด ๋๊ธ์ด ๋ฑ๋ก๋ ๊ธ ์ ๋ชฉ์ ๋ํ๋ด๊ธฐ ์ํด ๋ฐ๋ก ํ์ด์ง์ ์ ๋ชฉ์ ์ ์ฅํด ๋ ํ ์ด๋ธ์ด๋ค.
๊ฐ ํฌ์คํ ๊ธ์ ํด๋นํ๋ ํ ์ด๋ธ๋ค์ ์ปฌ๋ผ ํํ๋ก ์ ๋ชฉ์ ์ ์ฅํ์ง ์๊ณ ๋ฐ๋ก ์ ๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ ์ด์ ๋, ๋๊ธ์ด ๋ฌ๋ฆด ๋ ๋ง๋ค ์ ๋ถ ๊ฐ์ ์ ๋ชฉ์ ์ ์ฅํ๊ฒ
๋๋ ๋นํจ์จ์ฑ์ ํผํ๊ธฐ ์ํด์์ด๋ค.
๋ ํ๋๋, visitorCounter ํ ์ด๋ธ์ด๋ค. evCommentService.ga๋ ์กฐํ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ธ๊ธฐ ํฌ์คํ ์ ๋ถ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ฐ,
์ด ๋ ํฌ์คํ ๋ณ ์กฐํ์๋ฅผ ๊ธฐ๋กํ ํ ์ด๋ธ์ด ํ์ํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ํฌ์คํ ์ ๋๊ธ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๊ธฐ์ ์ ์ ํ์ง ์์ผ๋ฏ๋ก, ๋ณ๋์ ํ ์ด๋ธ์ ๋ง๋ ๊ฒ์ด๋ค.
4๊ฐ์ ํต๊ณ ์๋น์ค๋ CommentManageService.php์์ ์ผ์ชฝ 4๊ฐ์ ๋ฒํผ์ ๋๋ฆ์ผ๋ก์จ, ServiceSection์ ajax๋ก ๋ก๋๋๋ ํํ๋ก ๋ํ๋๋ค.
๊ฐ๊ฐ์ ํต๊ณ ์๋น์ค๋ '๋ ์ง', '๊ฐ์ ๋ถ์ ๊ฐ์ ํ๊ท ', '์กฐํ ์', '๋๊ธ ์' ๋ฅผ ๊ฐ์ค์น๋ก ํ๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ฌ, ๋ชฉํ๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ,
chart.js์ ์ฐจํธ๋ก ๋ํ๋ธ ํ CommentManageService.php์ echo ํ๋ค.
- ์ข์ ํ๊ฐ๋ฅผ ๋ฐ์ ๊ฒ์๋ฌผ
- ์ธ๊ธฐ ํฌ์คํ ๋ถ์
- ๋๊ธ์ด ๋ง์ด ๋ฌ๋ฆฐ ๊ฒ์๊ธ
- ์ต๊ทผ ์์ฑ๋ ๋๊ธ
- Sass
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ, css์ ์ค๋ณต๋๋ ๊ฐ๋ค์ด ๋ง์ด ๋ํ๋ ๋ณต์ฌ, ๋ถ์ฌ๋ฃ๊ธฐ ํด์ผํ ์ผ์ด ๋ง์์ก๋ค. (๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฑ)
์ด๋๋ก๋ css ์ฝ๋๋ฅผ ๋ณด์ํ๊ธฐ ์ ์ ์ด๋ ค์์ง ๊ฒ์ผ๋ก ํ๋จํ์ฌ, Ruby์ Sass๋ ์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํด CSS์ ์ฌ์ฌ์ฉ์ฑ์ ๋์๋ค.
ํ๋ก์ ํธ ๋ด ์ฌ์ฉ๋ ๋๊ธ ์๋น์ค ์ฝ๋ ํ์ผ๋ค์ ์ค๋ช ์ ํ ์ด๋ธ๋ก ์ ๋ฆฌํ์ต๋๋ค.
- PHP Files
| File Name | Description |
|---|---|
| AddComment.php | ๋๊ธ์ ์ ์ถํ ๋ Ajax๋ก ํธ์ถ๋์ด, ๊ฐ์ ๋ถ์ ๊ฐ์ ํฌํจํ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ DB์ ์ ์ฅํฉ๋๋ค. |
| CommentPageLogin.php | Comment.php์์ ๋ก๊ทธ์ธํ ๋ ajax๋ก ํธ์ถํฉ๋๋ค. evCommentService.ga์์ ๋ก๊ทธ์ธ ํ ๋ SignInAction.php๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
| CommentPageLogout.php | Comment.php์์ ๋ก๊ทธ์์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ธ์ ์ ์ญ์ ํ๋ ์์ผ๋ก ์๋ํฉ๋๋ค. |
| DeleteComment.php | ๋๊ธ์ ์ญ์ ํ๋ ๋ฒํผ์ ํด๋ฆญํ์ ๋, ์คํ๋ฉ๋๋ค. ์ธ์๋ก ๋์ด์จ UserID ๊ฐ์ด ์ง์ฐ๋ ค ํ๋ ๋๊ธ์ ID์ ๊ฐ๋ค๋ฉด DB์์ ๋๊ธ์ ์ง์๋๋ค. |
| DeleteService.php | evCommentService.ga์์ ์๋น์ค๋ฅผ ์ญ์ ํ๋ ๋ฒํผ์ ๋๋ ์ ๋ ์คํ๋ฉ๋๋ค. |
| EditComment.php | ๋๊ธ์ ์์ ํ๋ ๋ฒํผ์ ๋๋ ์ ๋ ์คํ๋ฉ๋๋ค. |
| ID_DuplicateCheck.php | ํ์๊ฐ์ ํ์ด์ง์์ ๋๊ธ ์ค๋ณต ๊ฒ์ฌ ๋ฒํผ์ ๋๋ ์ ๋ ์คํ๋ฉ๋๋ค. |
| MySQLConection.php | MySQL์ ์ ์ํ๊ธฐ ์ํ ํด๋์ค์ธ MySQLConnection์ด ์ ์๋์ด ์์ต๋๋ค. ๋ค๋ฅธ php ํ์ผ๋ค์์ requireํด ์ฌ์ฉํฉ๋๋ค. |
| PopularPosting.php | evCommentService.ga์์ ๋ธ๋ก๊ทธ์์ '์ธ๊ธฐ ํฌ์คํ ๋ถ์' ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. |
| Positiveness.php | evCommentService.ga์์ ๋ธ๋ก๊ทธ์์ '์ข์ ํ๊ฐ๋ฅผ ๋ฐ์ ๊ฒ์๋ฌผ' ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. |
| PostsSortingByCommentsNumber.php | evCommentService.ga์์ ๋ธ๋ก๊ทธ์์ '๋๊ธ์ด ๋ง์ด ๋ฌ๋ฆฐ ๊ฒ์๋ฌผ' ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. |
| RecentComments.php | evCommentService.ga์์ ๋ธ๋ก๊ทธ์์ '์ต๊ทผ ๋ฌ๋ฆฐ ๋๊ธ' ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. |
| RegisterURL.php | evCommentService.ga์์ ์๋น์ค๋ฅผ ๋ฑ๋กํ๋ ค ์๋ํ ๋ ์คํ๋ฉ๋๋ค. ์์ฒญ์ผ๋ก ๋ค์ด์จ URL ๊ฐ์ ํด์ฑํด DB๋ฅผ ์์ฑํ๊ณ , ํน์ํ ๋ ๊ฐ์ ํ ์ด๋ธ์ธ pageTitlePairs, VisitorCounter ์ ๋ง๋ญ๋๋ค. |
| ShowHomePage.php | evCommentService.ga์์ ๋ฑ๋ก๋ ํํ์ด์ง๋ฅผ ๋ํ๋ด๋ ํจ์๋ค์ ๊ฐ๊ณ ์๋ php ํ์ผ์ ๋๋ค. |
| SignInAction.php | evCommentService.ga์์ ๋ก๊ทธ์ธํ ๋ ์คํ๋ฉ๋๋ค. |
| SignOutAction.php | evCommentService.ga์์ ๋ก๊ทธ์์ ํ ๋ ์คํ๋ฉ๋๋ค. |
| SignUpAction.php | evCommentService.ga์ ํ์๊ฐ์ ํ ๋ ์คํ๋ฉ๋๋ค. |
| URLVerification.php | ํด๋ผ์ด์ธํธ ํ์ด์ง์์ ๋๊ธ ํ์ด์ง๋ฅผ ์์ฒญํ ๋ ์คํ๋ฉ๋๋ค. |
| UserEditAction.php | evCommentService.ga์์ ํ์์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ๋ ์คํ๋ฉ๋๋ค. |
| UserModalBox.php | ์ ์ ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ModalBox๋ฅผ ๋ํ๋ด๋ ํจ์๊ฐ ์ ์๋์ด ์์ต๋๋ค. Comment.php์ evCommentService.ga ํํ์ด์ง์์ ๋ชจ๋ ์ด์ฉํฉ๋๋ค. |
| CommentManageService.php | evCommentService.ga์์ ๋ธ๋ก๊ทธ์ ๋ํ ๊ฐ๋จํ ํต๊ณ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. |
| SignIn.php | evCommentService.ga์ ๋ก๊ทธ์ธ ํ์ด์ง์ ๋๋ค. |
| Register.php | evCommentService.ga์ ์๋น์ค ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ ํ์ด์ง์ ๋๋ค. |
| UserEdit.php | evCommentService.ga์ ํ์ ์ ๋ณด ์์ ํ์ด์ง์ ๋๋ค. |
| index.html | evCommentService.ga์ index.html์ ๊ธฐ๋ณธ ๋์์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๋ ๊ฒ์ ๋๋ค. |
| SignUp.html | evCommentService.ga์ ํ์ ๊ฐ์ ํ์ด์ง ์ ๋๋ค. |
| CommentExample.html | ๋๊ธ ์ฐฝ ์คํ์ผ์ ํ์ธํ๊ธฐ ์ํ ์์ ํ์ผ์ ๋๋ค. |
| Script.html | ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์ฌ์ฉํด์ผ ํ๋ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋๋ค. |
- JS Files
| File Name | Description |
|---|---|
| comment.js | comment.php์์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ ์ฌ์ฉํฉ๋๋ค. ๊ทธ ์ธ ๋๊ธ์ ์คํ์ผ์ ์ฃผ๋ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค. |
| CommentManageService.js | evCommentService.ga์์ ๋ธ๋ก๊ทธ ํต๊ณ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. |
| SignIn.js | evCommentService.ga์ ๋ก๊ทธ์ธ์ ์ฌ์ฉ๋ฉ๋๋ค. |
| SignUp.js | evCommentService.ga์ ํ์๊ฐ์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ ๊ท์์ ํตํ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ํ๋กํ ์ฌ์ง ๋ณ๊ฒฝ์ ๋ํ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. |
| URL-Register.js | evCommentService.ga์ ๋ธ๋ก๊ทธ ์๋น์ค ๋ฑ๋ก ๋ฐ ๊ด๋ฆฌ์ ์ฌ์ฉ๋ฉ๋๋ค. |
| UserEdit.js | evCommentService.ga์ ์ ์ ์ ๋ณด ๋ณ๊ฒฝ์ ์ฌ์ฉ๋ฉ๋๋ค. |
- Sass Files
| File Name | Description |
|---|---|
| BackGround.scss | evcommentService.ga์ ๋ฐฐ๊ฒฝ์ ๋ํ ์คํ์ผ ์ํธ์ ๋๋ค. |
| BottomFixedNavbar.scss | evcommentService.ga์ ํ๋ฉด ํ๋จ์ ๊ณ ์ ๋ NavBar์ ์คํ์ผ ์ํธ ์ ๋๋ค. |
| comment.scss | comment.php์์ ์ฌ์ฉํ๋ ์คํ์ผ ์ํธ ์ ๋๋ค. |
| CommentManageService.scss | evcommentService.ga์ ๋ธ๋ก๊ทธ ํต๊ณ ์๋น์ค์ ์ฌ์ฉ๋ ์คํ์ผ ์ํธ์ ๋๋ค. |
| Style.scss | comment.php์์ ์ฌ์ฉํ๋, ๊ฐ์ ๋ถ์ ๊ฐ์ ๋ฐ๋ฅธ ์์์ ๋์ดํ ์คํ์ผ ์ํธ์ ๋๋ค. |
| RegisterURL.scss | evcommentService.ga์์ URL ๋ฑ๋ก ํ์ด์ง์ ์ฌ์ฉํ๋ ์คํ์ผ ์ํธ์ ๋๋ค. |
| SignIn.scss | evcommentService.ga์ ๋ก๊ทธ์ธ ํ์ด์ง์ ์ฌ์ฉ๋ ์คํ์ผ ์ํธ์ ๋๋ค. |
| SignUp.scss | evcommentService.ga์ ํ์๊ฐ์ ํ์ด์ง์ ์ฌ์ฉ๋ ์คํ์ผ ์ํธ์ ๋๋ค. |
| TopNavbar.scss | evcommentService.ga์ ํ๋ฉด ์๋จ์ ๊ณ ์ ๋ TopNavBar์ ์คํ์ผ ์ํธ์ ๋๋ค. |
| UserEdit.scss | evcommentService.ga์ ์ ์ ์ ๋ณด ๋ณ๊ฒฝ์ ์ฌ์ฉ๋ ์คํ์ผ ์ํธ์ ๋๋ค. |


















