Languages:
ํ๊ตญ์ด | English
- ํ๋ก์ ํธ ์๊ฐ
- ์ธ๋ถ ๊ฐ๋ฐ ๋ด์ฉ
- ์์คํ ๊ตฌ์ฑ ๋ฐ ์ํคํ ์ฒ
- ์ ์ ํ๋ฆ๋
- ๊ธฐ๋ฅ ๋ช ์ธ
- ์คํ ๋ฐฉ๋ฒ ๋ฐ ํ ์คํธ ํ๊ฒฝ
WebCleanser๋ ์ธํฐ๋ท ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์ํ ์์๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธํ์ฌ, ๋ชจ๋๊ฐ ์์ ํ๊ฒ ์น์ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ธฐ ์ํด ๊ธฐํ๋ ์น ์ฝํ ์ธ ํํฐ๋ง ์ต์คํ ์ ์ ๋๋ค.
WebCleanser๋ Chromium์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ( Chrome, Microsoft Edge, Brave, Arc, ๋ค์ด๋ฒ ์จ์ผ ๋ฑ )์์ ํธํ๊ฐ๋ฅํ๋ฉฐ ์คํ์์ค ์ํํธ์จ์ด ํ๋ก์ ํธ๋ก ๊ฐ๋ฐ๋์ด, ์ธ์ด ๊ธฐ๋ฐ ์ปค์คํ ๋ฐ ๊ธฐ๋ฅ ์ถ๊ฐ์ ํ์ฅ์ฑ์ด ์ด๋ ค์์ต๋๋ค.
์ธํฐ๋ท ๊ธฐ์ ์ ๋ฐ์ ์ผ๋ก ๋ฐฉ๋ํ ์ฝํ ์ธ ๊ฐ ์ธํฐ๋ท์ ๊ณต์ ๋๊ณ ์์ผ๋ฉฐ, ๊ทธ ๋ถ์์ฉ์ผ๋ก ํผ์ฑ, ํดํน, ์ ํด ์ฝํ ์ธ ๋ฑ ๋ค์ํ ์ํ์ด ์ฆ๊ฐํ๋ฉด์ ๋์งํธ ๊ฒฉ์ฐจ๊ฐ ์ฌํด์ง๊ณ ์์ต๋๋ค. ๋์งํธ ํ๊ฒฝ์ ์ต์ํ์ง ์์ ์ฌ์ฉ์๋ค์ ์ด๋ฌํ ์ํ์ ๋ ์ฝ๊ฒ ๋ ธ์ถ๋๊ณ ์์ต๋๋ค.
WebCleanser๋ ์ด๋ฌํ ์ํ์ผ๋ก๋ถํฐ ์ฌ์ฉ์๋ฅผ ๋ณดํธ ๋ฐ ์์ ํ ์ธํฐ๋ท ํ๊ฒฝ ์ ๊ณต์ ๋ชฉํ๋ก ํ๋ ์คํ์์ค ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ ํธ์ ๋๋ค.
๋๊ตฌ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง๊ด์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋์งํธ ๊ฒฉ์ฐจ๋ฅผ ์ค์ด๊ณ , ์ฌ์ฉ์๋ค์ด ์ฌ์ด๋ฒ ์ํ์ผ๋ก๋ถํฐ ์์ ๋กญ๊ฒ ์ธํฐ๋ท์ ์ด์ฉํ ์ ์๋๋ก ์ง์ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
์ด๋ฅผ ํตํด ๋์งํธ ๊ธฐ์ ์ ์ต์ํ์ง ์์ ์ฌ์ฉ์๋ค๋ ์์ฌํ๊ณ ์ธํฐ๋ท์ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ๊ตฌ์ถํ ๊ฒ์ ๋๋ค.
- URL ํํฐ๋ง:
- ์ฌ์ฉ์๊ฐ ์ด๋ํ๋ ๋งํฌ๋ฅผ ๊ฐ์งํ์ฌ, Google Safe Browsing API๋ฅผ ํ์ฉํด URL์ ์์ ์ฑ์ ๊ฒ์ฆํฉ๋๋ค. ํผ์ฑ ์ฌ์ดํธ๋ ์์ฌ์ค๋ฌ์ด ์ฌ์ดํธ๋ ์ฐจ๋จํ๊ณ , ์์ ํ ๊ฒฝ์ฐ์๋ง ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์๋ชป ์ฐจ๋จ๋ ์ฌ์ดํธ ์ ๊ณ ๊ธฐ๋ฅ์ ํตํด, ์ฌ์ฉ์๊ฐ ์ฐจ๋จ ์ค๋ฅ๋ฅผ Google์ ์ ๊ณ ํ์ฌ ๊ฐ์ ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ๋๊ธ ํํฐ๋ง:
- ๋ค์ด๋ฒ ๋ด์ค์ ์ ํ๋ธ ๋๊ธ์ ๋ถ์ํ์ฌ, AI ๊ธฐ๋ฐ ํํฐ๋ง์ ํตํด ์ ํดํ ๋๊ธ์ ์ฐจ๋จํฉ๋๋ค.
- ์คํ ์์ค๋ก ๊ณต๊ฐ๋ KcElectra๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ ์น์ฑ ๋ฐ์ธ, ์ฑ์ ์ธ ๋ฐ์ธ, ์ฐ์ธํ ๋ฐ์ธ, ๊ณต๊ฒฉ์ ์ธ ๋ฐ์ธ ๋ฑ์ผ๋ก ๋ถ๋ฅํ๋ฉฐ, ์ฌ์ฉ์๋ ํ์์ ๋ฐ๋ผ ํน์ ์ ํ์ ๋๊ธ๋ง ํํฐ๋งํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
- Hazard Filter์ Type Filter๋ผ๋ 2๋จ๊ณ ํํฐ๋ง์ ๋์ ํ์ฌ, ๋จผ์ ์ ์ ๋๊ธ๊ณผ ์ ํด ๋๊ธ๋ก ๋ถ๋ฅํ ๋ค, ์ ํด ๋๊ธ ๋ด์์ ์ธ๋ถ ์ ํ์ ๋๋์ด ๋์ฑ ์ ๋ฐํ๊ฒ ํํฐ๋งํฉ๋๋ค.
- WebCleanser๋ MIT ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ๊ตฌ์ฑ์์ (WebCleanser_backend, WebCleanser_extension, WebCleanser_model)๋ณ ์์ธํ ๋ผ์ด์ผ์ค ์ ๋ณด๋ ๊ฐ ํด๋์ LICENSES ํด๋์์ ํ์ธํ ์ ์์ต๋๋ค.
- ๋ค์ํ ์ฌ์ฉ์ ์๊ตฌ์ ๋ง์ถฐ ๊ธฐ๋ฅ์ ํ์ฅ ๋ฐ ์ปค์คํฐ๋ง์ด์ง ํ๊ฑฐ๋, WebCleanser๋ฅผ ํ์ฉํ ๋ค๋ฅธ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํฌํจํ ๋ชจ๋ ํ๋์ด ํ์ฉ๋ฉ๋๋ค.
ํ๋ก์ ํธ๋ ํฌ๊ฒ ์ธ ๋ถ๋ฅ์ ์์๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
๊ฐ ์์๋ model, backend, extension ์ ๋๋ค.
์คํ์์ค๋ก ๊ณต๊ฐ๋ KcElectra๋ฅผ ์ฌ์ฉํ์ฌ, ๋๊ธ ์ฝํ ์ธ ํํฐ๋ง ๋ชจ๋ธ์ ํ์ตํ์์ต๋๋ค.
KcElectra๋ ํ๊ตญ์ด๋ก ํ์ต๋ Transformer ๊ณ์ด AI ๋ชจ๋ธ๋ก, ์ธํฐ๋ท ๋ด์ค์ ๋๊ธ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ จ๋์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํน์ง์ด WebCleanser๊ฐ ์ ๊ณตํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ๊น๋ค๊ณ ์๊ฐํ์ฌ ๋ชจ๋ธ์ ์ ํํ๊ฒ ๋์์ต๋๋ค.
Korean Hate Speech Dataset, AIHub์ ํ๊ตญ์ด ๊ฐ์ ์ ๋ณด ๋ฐ์ดํฐ์ , ํ ์คํธ ์ค๋ฆฌ ๊ฒ์ฆ ๋ฐ์ดํฐ์ ๊ณผ ํจ๊ป, ์ง์ ํฌ๋กค๋งํ ๋ค์ด๋ฒ, ์ ํ๋ธ ๋๊ธ ๋ฑ ์ด 20๋ง ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ต์ ์งํํ์๊ณ , ์ฝ 80%์ ์ ํ๋๋ก ํ์ ์ ๋ถ๋ฅํฉ๋๋ค.
2.1.1 ๋ฐ์ดํฐ์ ๊ตฌ์ฑ
- Korean Hate Speech Dataset
- https://github.com/kocohub/korean-hate-speech
- ๋ถ๋ฅ ๊ธฐ์ค:ย
contain_gender_bias,ยbias,ยhate - ๋ถ๋ฅ ๋ฐฉ์:ย
false, none, none์ธ ๊ฒฝ์ฐ 0๋ฒ(ํด๋น ์์), ๋๋จธ์ง๋ 4๋ฒ(๊ณต๊ฒฉ์ ์ธ ๊ธ)์ผ๋ก ๋ถ๋ฅ - ์ดํฉ ๊ฒฐ๊ณผ:
- 0: 3429๊ฐ
- 4: 4945๊ฐ
- ๋ถ๋ฅ ๊ธฐ์ค:ย
- ํ๊ตญ์ด ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋ ๋จ๋ฐ์ฑ ๋ํ ๋ฐ์ดํฐ์
- https://aihub.or.kr/aihubdata/data/view.do?dataSetSn=270
- ๋ถ๋ฅ ๊ธฐ์ค: ๊ฐ์ ์ ํ์ ๋ฐ๋ผย
0(ํด๋น ์์),ย3(์ฐ์ธํ ๊ธ),ย4(๊ณต๊ฒฉ์ ์ธ ๊ธ)๋ก ๋ถ๋ฅ - ์ดํฉ ๊ฒฐ๊ณผ:
- 0: 22233๊ฐ
- 3: 5267๊ฐ
- 4: 16039๊ฐ
- ๋ถ๋ฅ ๊ธฐ์ค: ๊ฐ์ ์ ํ์ ๋ฐ๋ผย
- YouTube API
- ์ ์น์ฑ ๋๊ธ๊ณผ ์ฑํฌ๋กฑ ๋๊ธ์ ์์งํ์ฌ ๊ฐ๊ฐย
1(์ ์น์ฑ ๊ธ),ย2(์ฑ์ ์ธ ๊ธ)๋ก ๋ถ๋ฅ - ์ ์น์ฑ ๋๊ธ ํธํฅ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋๋ฌด์ํค๋ฅผ ํ์ฉํ์ฌ ๊ตฌ๋
์๊ฐ ๊ฐ์ฅ ๋ง์ ์ง๋ณด, ๋ณด์ ์ง์์ ์ ํ๋ฒ ๋๋ช
์ ๋์์์์ ๋๊ธ์ ์์งํจ
- https://youtu.be/O7lFQHRoiok?si=rtpUaxxXiobGtYFa
- https://youtu.be/L50FQAAhIVM?si=0cI_esf4lJ3NuLVu
- https://youtu.be/-eGJjxr1MWU?si=G3waZAHQmmDlcr_H
- https://youtu.be/CGM-GzS7Wqs?si=_H9C3in1W5L0Sz7V
- https://youtu.be/xBPeTy3gxFU?si=nmOJ1nDV7FU7pJGl
- https://youtu.be/OHtYwkRigy0?si=wJVP7LbNakfD2VKZ
- https://youtu.be/WEgYxZ8eh14?si=OXfzmIYlXeuQxh_t
- https://youtu.be/LMhXLx_tLro?si=R8XlG6FR5lergsVi
- ์กฐํ์ ๊ธฐ์ค์ผ๋ก ์ง์บ ์์์์ ๋๊ธ์ ์์ง
- ์ดํฉ ๊ฒฐ๊ณผ:
- 0: 22233๊ฐ
- 1: 26778๊ฐ
- 2: 643๊ฐ
- 3: 5267๊ฐ
- 4: 16039๊ฐ
- ์ ์น์ฑ ๋๊ธ๊ณผ ์ฑํฌ๋กฑ ๋๊ธ์ ์์งํ์ฌ ๊ฐ๊ฐย
- ํ ์คํธ ์ค๋ฆฌ ๊ฒ์ฆ ๋ฐ์ดํฐ์
- https://aihub.or.kr/aihubdata/data/view.do?currMenu=&topMenu=&aihubDataSe=data&dataSetSn=558
- ๋ถ๋ฅ ๊ธฐ์ค:ย
sexual์ด ํฌํจ๋ ๊ฒฝ์ฐ 2๋ฒ,ยimmoral_none์ธ ๊ฒฝ์ฐ 0๋ฒ, ๋๋จธ์ง๋ 4๋ฒ์ผ๋ก ํํฐ๋ง - ์ดํฉ ๊ฒฐ๊ณผ:
- 0: 188695๊ฐ
- 2: 19390๊ฐ
- 4: 89080๊ฐ
- ๋ถ๋ฅ ๊ธฐ์ค:ย
- ๊ฐ์ฑ ๋ํ ๋ง๋ญ์น
- https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100&aihubDataSe=data&dataSetSn=86
- train ๋ฐ์ดํฐ์ ์ ์ฌํ์ ํด๋นํ๋ ๋ฐ์ดํฐ์ ์ฌ๋ ๋ฌธ์ฅ1์ ๋ฐ์ดํฐ๋ก ํ์ฌ ์ ์ ํจ
- ๋ฐ์ดํฐ 9125๊ฐ ์ถ๊ฐ
- ์ดํฉ ๊ฒฐ๊ณผ
- 0: 188695๊ฐ
- 1: 26778๊ฐ
- 2: 19390๊ฐ
- 3: 14392๊ฐ
- 4: 89080๊ฐ
- ์ดํฉ ๊ฒฐ๊ณผ
2.1.2 ๋ชจ๋ธ ํ์ต ๊ณผ์
๋ฐ์ดํฐ ํ์ ๋ถ๋ฅ
- ์ผ๋ฐ 0
- ์ ์น์ฑ ๊ธ 1
- ์ฑ์ ์ธ ๊ธ 2
- ์ฐ์ธํ ๊ธ 3 (์ฌํ)
- ๊ณต๊ฒฉ์ ์ธ ๊ธ 4 (๋ถ๋ ธ, ํ์ค)
- Type Filter
- ๊ฒฐ๊ณผ ๋ถ์
- 1๋ฒ(์ ์น์ฑ ๊ธ)์ผ๋ก์ ์ค๋ถ๋ฅ๊ฐ ๋ง์๋ค.
- ๊ทธ๋ฌ๋ ์ฌ์ฉ์ฑ์ ์๊ฐํ์ ๋ ํด๋น์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์ค์ธ์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ถํธํ๊ฒ ๋๊ปด์ง ๊ฒ์ด๋ผ๊ณ ํ๋จํ์๋ค.
- Hazard Filter
- ๋ชจ๋ธ ๊ตฌ์ฑ
- ์ฌ์ฉ์๊ฐ ์ ์ ๋๊ธ์ ์ ํด ๋๊ธ๋ก ์ค๋ถ๋ฅํ๋ ๊ฒฝ์ฐ ๋ถํธ์ ๋๋ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํ์ฌ, 1๋ฒ ํ์ (์ ์น์ฑ ๊ธ)์ ์ ๊ฑฐํ๊ณ 0(์ ์)๊ณผ 1(์ ํด)๋ก ๋๋จธ์ง ๋๊ธ์ ๋ถ๋ฅํ๋ Hazard Filter ๋ชจ๋ธ์ ๊ฐ๋ฐํ๋ค.
- ํ์ต ๊ฒฐ๊ณผ
- Hazard Filter ๋ชจ๋ธ์ ์ ์ ๋๊ธ์ ์ต๋ํ ์ ํํ๊ฒ ๋ถ๋ฅํ๋ฉด์ ์ ํด ๋๊ธ์ ํ์งํ๋ ๋ฐ ์ค์ ์ ๋์ด ํ์ต๋์๋ค.
์ต์ข ๊ตฌ์กฐ
- 1์ฐจ ํํฐ๋ง: Hazard Filter ๋ชจ๋ธ
- ๋๊ธ์ ์ ํด์ฑ์ 1์ฐจ์ ์ผ๋ก ํํฐ๋ง
- 2์ฐจ ํํฐ๋ง: Type Filter ๋ชจ๋ธ
- Hazard Filter ๋ชจ๋ธ์์ ์ ํดํ ๊ฒ์ผ๋ก ๋ถ๋ฅ๋ ๋๊ธ์ ๋ค์ ์ธ๋ถ์ ์ผ๋ก ์ ํ(์ผ๋ฐ, ์ ์น, ์ฑ์ , ์ฐ์ธ, ๊ณต๊ฒฉ์ )์ผ๋ก ๋ถ๋ฅ
์ด์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ต์ข ํํฐ๋ง ์์คํ ์ ๊ตฌ์ถํ์ฌ ์ธํฐ๋ท์์์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋ค์ํ ์ ํ์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ํํฐ๋งํ ์ ์๊ฒ ํ์์ต๋๋ค.
Spring
์ฌ์ฉ์๋ Extension์ ํตํด Spring ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ฉฐ, Spring ์๋ฒ๋ ์ด ์์ฒญ์ ์ค๊ณํ์ฌ Google Safe Browsing API, Flask๋ฅผ ํตํด URL ํํฐ๋ง, ๋๊ธ ํํฐ๋ง ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Flask
KcElectra ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ต์ํจ AI ๋ชจ๋ธ์ Spring ์๋ฒ์ ์ ๊ณตํ๋ ์ญํ ์ ํฉ๋๋ค.
์ฌ์ฉ์์ ์ํธ์์ฉํ๋ ์ธํฐํ์ด์ค ์ ๋๋ค.
React ํ๊ฒฝ์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ์คํ์์ค๋ก ๊ณต๊ฐ๋์ด์๋ chrome-extension-boilerplate-react๋ฅผ ํ์ฉํ์ฌ ๊ฐ๋ฐํ์์ต๋๋ค.
์๋ฒ: AWS EC2์ Docker Compose๋ฅผ ํ์ฉํ์ฌ 2๊ฐ์ Docker (Spring, Flask)๋ฅผ ์ด์ฉํ์์ผ๋ฉฐ, Spring์ Google Safe Browsing์ ํ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ์ฌ์ดํธ ๋งํฌ ๊ฒ์ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , Flask๋ ์ง์ ํ์ฉํ ๋ ๊ฐ์ ํํฐ๋ง ๋ชจ๋ธ(Type Filter, Hazard Filter)๋ฅผ ํ์ฉํ์ฌ ํ ์คํธ๋ฅผ ํํฐ๋งํฉ๋๋ค.
ํด๋ผ์ด์ธํธ: React๋ฅผ ํ์ฉํ์ฌ Web Extension์ ๊ฐ๋ฐํ์์ผ๋ฉฐ, background ๋ฐ content script์์ ๋งํฌ์ ํ ์คํธ๋ฅผ ๊ฒ์ฌํ๊ณ ํํฐ๋งํฉ๋๋ค. popup์์๋ ํํฐ๋ง, ์ฐจ๋จ ํ์คํ ๋ฆฌ์ ๊ธฐ๋ฅ ํ์ฑํ ์ฌ๋ถ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ON/OFF ๋ฒํผ
- ํ ๊ธ ๋ฒํผ์ผ๋ก ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ๊ธฐ๋ฅ์ ON/OFF ํ ์ ์์
- ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ๊ธฐ๋ฅ
- ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ํ ๊ธ ์ํ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ด ON ๋๋ OFF ๋จ
- ๋ฌด์ํ๊ธฐ ๋ฒํผ
- ๋ฌด์ํ๊ธฐ ๋ฒํผ์ ํตํด ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ๊ณ ํ์ด์ง์ ์ ์ํ ์ ์์
- ์ด์ ํ์ด์ง๋ก ๋์๊ฐ๊ธฐ ๋ฒํผ
- ์ด์ ํ์ด์ง๋ก ๋์๊ฐ๊ธฐ ๋ฒํผ์ ํตํด URL ์ ์ ์ ํ์ด์ง๋ก ์ด๋ํ ์ ์์
- ์๋ชป ์ฐจ๋จ๋ ์ฌ์ดํธ ์ ๊ณ ๋ฒํผ
- ์๋ชป ์ฐจ๋จ๋ ์ฌ์ดํธ ์ ๊ณ ๋ฒํผ์ ํตํด Google์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ ์ ์์
- ํํฐ๋ง ์ ํ ์ ํ ๋ฒํผ
- ๋ฆฌ์คํธ์์ ํด๋ฆญ์ ํตํด ํํฐ๋งํ ๋๊ธ ์ ํ์ ์ ํํ ์ ์์ผ๋ฉฐ, ์์ ํ ๋ฆฌ์คํธ๋ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ ํ์ ์ ์ฉ๋จ
- ๋๊ธ ํํฐ๋ง ๊ธฐ๋ฅ
- ์ ํ๋ ์ ํ์ ๋๊ธ์ ํํฐ๋งํ๋ฉฐ, ํํฐ๋ง๋ ๋๊ธ์ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๊น๋ก ํ์๋จ
- ๋ค์ด๋ฒ ๋ด์ค์ ์ ํ๋ธ ๋๊ธ์์ ์๋ํจ
- ์ ํด ํ
์คํธ ๋ณด์ด๊ธฐ/๊ฐ๋ฆฌ๊ธฐ ๋ฒํผ
- ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฐํด๋ฆญํ์ฌ ์ ํด ํ ์คํธ ๋ณด์ด๊ธฐ/๊ฐ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฌ ๋ด์ฉ์ ํ์ธํ ์ ์์
- ๋ณด์ด๊ธฐ ์ํ์ผ ๊ฒฝ์ฐ ๋๊ธ ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ ์คํธ ์์์ด ์ ์ฉ๋จ
- ํต๊ณ ๋ฒํผ
- ์ต์คํ ์ ํญ ํ๋จ์ ํต๊ณ ๋ฒํผ์ ๋๋ฌ ํต๊ณ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
- ํต๊ณ ์ ํ ์ ํ ๋ฒํผ
- ํํฐ๋ง / ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ํญ์ ์ ํํ์ฌ ํ์ธํ ํต๊ณ ์ ํ์ ์ ํํ ์ ์์
- ๋๊ธ ํํฐ๋ง ๋ฆฌ์คํธ ์ ํ ๋ฒํผ
- ๋ฒํผ์ ํตํด ํ์ธํ ๋๊ธ ๋ฆฌ์คํธ ์ ํ์ ์ ํํ ์ ์์
- ๋๊ธ ํํฐ๋ง ๋ฆฌ์คํธ
- ์ ํ๋ ์ ํ์ ๋ฐ๋ผ ๋๊ธ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌํดํจ
- URL ํํฐ๋ง ๋ฆฌ์คํธ
- ํผ์ฑ ์ฌ์ดํธ ๊ฐ์ง ํญ์์ ํํฐ๋ง๋ URL๊ณผ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
- URL ๋ฆฌ์คํธ ์ ๋ ฌ
- ์ต์ ์ / ์ค๋๋์์ ์ ํํ์ฌ URL ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ์ ์์
- ์์ธ URL ์ ๋ณด
- ๋ฆฌ์คํธ์์ ์ปดํฌ๋ํธ๋ฅผ ํด๋ฆญํ์ฌ ์์ธ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
6.1 ํ ์คํธ ํ๊ฒฝ ์ ๋ณด
ํ๋์จ์ด
- Apple M3 Pro ์นฉ์ ํ์ฌํ MackBook Pro 14 ๋ชจ๋ธ
์ํํธ์จ์ด
- IntelliJ IDEA
- Visual Studio Code
- node
- Chrome
6.2 ์คํ ๋ฐฉ๋ฒ
6.2.1 ๋ฐฑ์๋
-
ํ๋ก์ ํธ ์ค๋น
WebCleanser_backendํ๋ก์ ํธ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
-
Flask ์๋ฒ ์คํ
- Python 3.9 ํ๊ฒฝ์์
netpuri_flaskํด๋๋ฅผ ์ฝ๋๋ค. - ๋ค์ ๋ช
๋ น์ด๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค:
pip install -r requirements.txt
- Flask ์๋ฒ๋ฅผ ์คํํฉ๋๋ค:
python app.py
- Python 3.9 ํ๊ฒฝ์์
-
Spring ์๋ฒ ์คํ
- JDK 17 ํ๊ฒฝ์์
netpuri-springํด๋๋ฅผ ์ฝ๋๋ค. - Gradle ์์กด์ฑ์ ์ค์นํฉ๋๋ค.
resources/application.propertiesํ์ผ์${GOOGLE_SAFE_BROWSING_API_KEY}๋ถ๋ถ์ ๋ฐ๊ธ๋ฐ์ Google Safe Browsing API Key๋ก ๋์ฒดํฉ๋๋ค.- ๋ค์ ๊ฒฝ๋ก์์ Spring ์๋ฒ๋ฅผ ์คํํฉ๋๋ค:
com/netpuri/server/NetpuriServerApplication.java
- JDK 17 ํ๊ฒฝ์์
6.2.2 ํ๋ก ํธ์๋
-
ํ๋ก์ ํธ ์ค๋น
WebCleanser_extensionํ๋ก์ ํธ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.- VSCode๋ก ํด๋น ํ๋ก์ ํธ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
-
ํ๋ก์ ํธ ๋น๋
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค:
npm install
- ํ๋ก๋์
๋น๋๋ฅผ ์คํํฉ๋๋ค:
NODE_ENV=production npm run build
- ๋น๋ ์๋ฃ ํ ์์ฑ๋
zip/WebCleanser-1.0.0.zipํ์ผ์ ํด์ ํฉ๋๋ค.
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํฉ๋๋ค:
-
ํฌ๋กฌ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ฑ๋ก
- Chrome ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ , ํ์ฅ ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค:
chrome://extensions - ๊ฐ๋ฐ์ ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค (์ฐ์ธก ์๋จ).
- ์์ถ ํด์ ๋ ํ์ฅ ํ๋ก๊ทธ๋จ ๋ก๋ ๋ฒํผ์ ํด๋ฆญํ๊ณ , ๋น๋๋ ํด๋๋ฅผ ์ ํํฉ๋๋ค.
- ๋ฑ๋ก๋ WebCleanser ํ์ฅ ํ๋ก๊ทธ๋จ์ ํ์ธํฉ๋๋ค.
- Chrome ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ , ํ์ฅ ํ๋ก๊ทธ๋จ ๊ด๋ฆฌ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค:
-
ํ์ฅ ํ๋ก๊ทธ๋จ ๊ณ ์ ๋ฐ ์ฌ์์
- ๋ธ๋ผ์ฐ์ ์ฐ์ธก ์๋จ์ ํผ์ฆ ๋ชจ์ ์์ด์ฝ์ ํด๋ฆญํ์ฌ WebCleanser๋ฅผ ๊ณ ์ ํฉ๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ ์ ์ฉ์ ์ํด Chrome์ ์ฌ์์ํฉ๋๋ค.