ํ๋ ์๋๋ฆฌ์ค๋ ๐์ฌ๊ธฐ๐์์ ๋ ์์ธํ ๋ณด์ค ์ ์์ต๋๋ค.
1์ผ 1์ปค๋ฐ์ ์ดํ์ด ๋ถ๊ณ ์๋ ์ฌ๋ฌ๋ถ๋ค์ ๊ฑด๊ฐ์ ๊ด์ฐฎ์ผ์ ๊ฐ์? ๋ชจ๋์ ๊ฑด๊ฐ์ ์ฑ ์์ง๊ธฐ ์ํด ์ ํฌ HomeDong์ด ์์ต๋๋ค โ1์ผ 1ํ๋(ํ ํธ๋ ์ด๋ ์ด๋)์ ์์์ ํ๋๊ณผ ํจ๊ปํ๊ณ ๊ฑด๊ฐ์ ์ง์ผ๋ณด์ธ์!
์ธ์ ์ด๋์๋ ๊ฑด๊ฐ์ ์ฑ๊ธฐ๋ฉฐ ํจ๊ป ์ฆ๊ธด๋ค!
- ์๋น์ค ์ค๋ช : ๋ชจ๋๊ฐ ๊ฑด๊ฐํ๊ฒ ์ง์์ ์ฆ๊ธธ ์ ์๋ ์ด๋ ๊ฒ์
- ์ฃผ์ ๊ธฐ๋ฅ :
- webRTC๋ฅผ ํตํ ์ค์๊ฐ ํ์ ์ด๋ ๊ฒ์
- Pose Detection์ ํตํ ์๋ ์์ธ ์ธ์
- ๊ฒ์ log๋ฅผ ํตํ ์ฌ์ฉ์ ์ด๋๊ธฐ๋ก ์ถ์
- ๊ธฐ๋ก์ ๋ฐ๋ฅธ ๋ณด์์ ํตํ ์ด๋ ๋๊ธฐ ๋ถ์ฌ
๐ฑBackend
- IntelliJ
- spring boot 2.4.5
- spring-boot-jpa
- Spring Security
- Java 8
- AWS EC2
- mysql
- redis
๐ฑFrontend
- Visual Studio Code
- React.js 17.0.2
- styled-components 5.3.0
- Material-UI
- redux-toolkit 1.6.1
- redux 4.1.0
๐ฑWeb RTC
- openvidu 2.19.0
๐ฑPose Detection
- Teachable Machine
๐ฑCI/CD
- aws ec2
- docker
- nginx
- jenkins
์ ๊ฐ ๋ด๋นํ์ฌ ์๋น์ค ์ํคํ ์ฒ์ ๊ฐ์ด, Jenkins์ pipeline์ ์ด์ฉํ์ฌ ์๋ ๋ฐฐํฌ๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค. Gitlab webhook์ ์ค์ ํ์ฌ Jenkins์ ๋น๋ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํ๊ณ , ์ด์ ๋ฐ๋ผ Gitlab์์ master ๋ธ๋์น์ pushํ๋ฉด ์๋์ผ๋ก ๋ฐฐํฌ๋ ์ ์๋๋ก ๊ตฌ์ถํ์ฌ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ ๋ฐฐํฌ๋ก ์ธํ ์๊ฐ ๋ญ๋น๋ฅผ ์ค์์ต๋๋ค. ๋ํ ํ๋ก ํธ์๋์ธ React.js๋ Nginx์ ํจ๊ป docker image๋ก ๋น๋ํ์ฌ ๋ฐฐํฌํ์๊ณ , ๋ฐฑ์๋ ๋ฐ redis, openvidu ๋ํ docker container๋ก ๋ฐฐํฌํ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Nginx์ letsencrypt๋ฅผ ์ด์ฉํ์ฌ ssl ์ธ์ฆ์๋ฅผ ์ ์ฉํ์๊ณ , ํ๋ก ํธ์๋๋ 443(https)๋ก ํ๋ก์๋ก ๋ถ๊ธฐ์์ผฐ๊ณ ๋ฐฑ์๋๋ /api ๊ฒฝ๋ก๋ก ํ๋ก์๋ฅผ ๊ฑธ์ด์คฌ์ต๋๋ค.
- ํ๋ก๊ทธ๋จ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ์์ ๋ณผ ์ ์์ต๋๋ค. ํด๋น ๋ฐฐํฌ ๋ฐฉ๋ฒ์ CI/CD๋ฅผ ๊ตฌ์ถํ ์ ์๋ ๋ด์ฉ์ ์๋๋๋ค.(๋จ์ ๋ฐฐํฌ ๋ฐฉ๋ฒ)
- Teachable Machine
์์ธ๋ฅผ ํ์ต์์ผ pose detection์ ํตํ ๋ชจ์ ์ธ์์ผ๋ก ์์ธ ์ธ์์ ํตํด ์ ์ ๊ฐ ๊ฐ ์ด๋ ์ข ๋ชฉ์ ์ ์ํํ๋์ง ์ฒดํฌํ๊ณ , ์ด๋ ๊ฐ์๋ฅผ ์นด์ดํ ํ ์ ์๋๋ก ํ์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก Teachable Machine์ผ๋ก ํ์ต์ ์ํค๋ฉด ์์ธ๋ณ๋ก ๋์ถ๋ ๊ฐ์ ์ด์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ถ์ถ๋ ์ฝ๋์ ๊ฐ์ผ๋ก ํ๋ ์๋น์ค์ ๋ง๊ฒ ๊ฐ๊ณตํ์ฌ ๊ตฌํํ์์ต๋๋ค.
- WebRTC (Openvidu)
Openvidu๋ก๋ง ํ ์ ์๋ ๊ธฐ๋ฅ ๋ฟ๋ง์ด ์๋๋ผ ๋ฐฑ์๋๋ฅผ ํจ๊ป ์ด์ฉํ ๊ฐ๋ฐ๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๊ฐ ๋ฐฉ๋ง๋ค ์ธ์์๊ฐ 6๋ช ๊น์ง๋ง ๋ค์ด๊ฐ ์ ์๊ฒ ๊ตฌํํ์๊ณ , ๋ฐฉ์ฅ๋ง ๊ฒ์์ ์์ํ ์ ์๊ธฐ์ ๋ฐฉ์ ๋ง๋ค๊ฑฐ๋ ๋ฐฉ์์ ์ธ์์ด ๋๊ฐ๋ฉด ์๋์ผ๋ก ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ฐฉ์ฅ ๊ถํ์ด ๋ถ์ฌ๋๊ฒ ํ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ private ๋ฐฉ์ ๋ง๋ค ์ ์๊ฒ ํ์ฌ ๋ฐฉ ๋ฒํธ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์๋ ์ฌ์ฉ์ ์ธ์๋ ๋ค์ด์ค์ง ๋ชปํ๊ฒ ๊ตฌํํ์๊ณ , ๋น ๋ฅธ ์์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ ํ์ฌ ์กด์ฌํ๋ ๋ฐฉ์ ๋น ๋ฅด๊ฒ ์ ์ฅํ ์ ์๊ฒ ํ์๊ณ , ๋ฐฉ์ด ์์ผ๋ฉด ์๋์ผ๋ก ๋ฐฉ ์์ฑ๊น์ง ํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
- Redis
๋ญํน ๊ธฐ๋ฅ์ ๋ค์ด๊ฐ๋ ๋ญํน ์ ๋ณด๋ ์์ ๋ง๋ค ์ ๋ฐ์ดํธ ๋๋ ์ ๋ณด์ฌ์ ๋จ์ํ ๊ตฌ์กฐ์ ์ ๋ณด์ด๊ณ , ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ๊ฒ ์ ๊ณต๋๊ณ , ์ต์ ํ๊ฐ ์ค์๊ฐ์ผ๋ก ํ์ํ์ง ์์ ์ ๋ณด์์ต๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ์ ํน์ฑ์ผ๋ก ์บ์ฑ์ ์ ์ฉํ๊ธฐ์ ์ ์ ํ๋ค๊ณ ์๊ฐ์ ํ๊ณ , Redis์ ๋ญํน ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ DB๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ํธ๋ํฝ์ด ๋ง์์ง ๋ ๋ฐฑ์๋ ๋ถํ๋ฅผ ์ค์ด๊ณ , ์ ๋ณด ์กฐํ ์๋๋ฅผ ๋์์ต๋๋ค. ๋ํ ์ ํฌ๋ Spring Scurity์ JWT๋ฅผ ์ด์ฉํ์ฌ ์ธ์ฆ์ ๊ตฌํํ์๋๋ฐ, Redis๋ฅผ ์ด์ฉํด ๋ก๊ทธ์์์ํจ ํ ํฐ๋ค์ ๋ง๋ฃ์ฒ๋ฆฌํ์ฌ ํด๋น ํ ํฐ์ผ๋ก๋ ๋ค์ ์ธ์ฆํ ์ ์๋๋ก ๊ตฌํํ์์ต๋๋ค.
- redux-toolkit
ํ๋ก ํธ์๋ ๊ตฌํ์์๋ React์ redux-toolkit์ ์ด์ฉํ์ฌ Ducks Pattern ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ๋ฅผ ํ์์ต๋๋ค.
- ๋ฐฐํฌ
๋์ปค, Nginx, Jenkins๋ฅผ ์ด์ฉํ ์๋ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ ๊ตฌํํ์์ต๋๋ค. ๋ฐฑ์๋๋ฅผ ๋์ปค ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ์๊ณ , ํ๋ก ํธ๋ก Nginx์ ํจ๊ป ๋์ปค ์ปจํ ์ด๋๋ก ๋ฐฐํฌํ์์ต๋๋ค.
- Git
- Jira
- Notion
- Mattermost
- Webex
- ์๋ฏธ ์๋ ๋ณ์๋ช
X
โ ์ ์ง๋ณด์ ํ๋ค๊ณ , ์์๋ณด๊ธฐ ํ๋๋ ๋ฐ๋์ ์ง์! ex) text1, test2
- ๋ฉ์๋ ์ด๋ฆ์ ์๋ฌธ์๋ก ์์ํ๊ณ , ๋์ฌ๋ก ์ง์ผ๋ฉด ์ข๋ค! ex) getName()
- ๋ณ์๋ช
, ๋ฉ์๋ ์ด๋ฆ์ ์นด๋ฉ์ผ์ด์ค๋ก ์ง์ด์ฃผ์ธ์
- ํด๋์ค ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํฉ๋๋ค
ํด๋น Code Convention ๊ฐ์ด๋, ๋ค์ด๋ฐ ๊ท์น๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ํ์ต๋๋ค.
FEAT: ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๊ฒฝ์ฐ
FIX: ๋ฒ๊ทธ๋ฅผ ๊ณ ์น ๊ฒฝ์ฐ
STYLE: ์ฝ๋ ํฌ๋งท ๋ณ๊ฒฝ, ๊ฐ๋จํ ์์ , ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ ๊ฒฝ์ฐ
REFATOR: ํ๋ก๋์
์ฝ๋ ๋ฆฌํฉํ ๋ง
DOCS: ๋ฌธ์๋ฅผ ์์ ํ ๊ฒฝ์ฐ(ex> Swagger)
Rename: ํ์ผ ํน์ ํด๋๋ช
์์ ๋ฐ ์ด๋
Remove: ํ์ผ ์ญ์
CHORE: ๋น๋ ์
๋ฌด ์์ (ex> dependency ์ถ๊ฐ)
์ปค๋ฐ ํ์
: ๋ด์ฉ ์์ธํ ์ ์ด์ฃผ๊ธฐ [#์ง๋ผ์ด์๋๋ฒ]
ex) FEAT: ๋ก๊ทธ์ธ rest api ์ถ๊ฐ [#์ง๋ผ์ด์๋๋ฒ]
ํด๋น Git ์คํ์ผ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ์ ์ ํ์ต๋๋ค
-
Git Flow model์ ์ฌ์ฉํ๊ณ , Git ๊ธฐ๋ณธ ๋ช ๋ น์ด ์ฌ์ฉํ๋ค.
-
Git Flow ์ฌ์ฉ ๋ธ๋์น
- feature - ๊ธฐ๋ฅ
- develop - ๊ฐ๋ฐ
- master - ๋ฐฐํฌ
- hotfix - ๊ธํ ์๋ฌ ์์
-
Git Flow ์งํ ๋ฐฉ์
-
feature ๋ธ๋์น๊ฐ ์์ฑ๋๋ฉด develop ๋ธ๋์น๋ก pull request๋ฅผ ํตํด mergeํ๋ค.
โ pull request๊ฐ ์์ฒญ๋๋ฉด, ๋ชจ๋ ํ์๋ค์ด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํ์ฌ ์์ ํ๊ฒ mergeํ๋ค.
-
๋งค ์ฃผ๋ง๋ค develop ๋ธ๋์น๋ฅผ master ๋ธ๋์น๋ก ๋ณํฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค.
-
-
feature ๋ธ๋์น ์ด๋ฆ ๋ช ๋ช ๊ท์น
-
feature/[front or back]/[๊ธฐ๋ฅ ์ด๋ฆ]
ex) feature/front/login
ex) feature/webrtc
-
ํ์ ๋ฐ ์ผ์ , ์ ๋ฌด ๊ด๋ฆฌ๋ฅผ ์ํด Jira๋ฅผ ์ด์ฉํ์์ต๋๋ค. ๋งค์ฃผ ์์์ผ ์ค์ ํ์์์ ํ ์ฃผ๋์ ์งํ๋์ด์ผ ํ ์ฃผ ๋จ์ ๊ณํ์ ์ง๊ณ , ์งํํ ์ด์๋ค์ ์คํ๋ฆฐํธ๋ฅผ ๋ง๋ค์ด ๋ฑ๋กํ์ต๋๋ค. ์คํ๋ฆฐํธ๋ ์ผ์ฃผ์ผ ๋จ์๋ก ์งํํ์์ต๋๋ค.
- Epic : backend, frontend, webrtc๋ก ๋๋์ด ๊ตฌ์ฑํ์์ต๋๋ค.
- story :
๋ง์ดํ์ด์ง์์ ํ๋กํ ๋ณ๊ฒฝ ๋ฒํผ์ ํตํด ํ๋กํ์ ๋ณ๊ฒฝ ํ๋ค
์ ๊ฐ์ด ์์ธํ๊ฒ ์์ฑํ์์ต๋๋ค. - subtask : ๋ถ์์ ์ ๋๋์ด ์ธ์ธํ๊ฒ ์ ๋ฌด ๊ด๋ฆฌ๋ฅผ ์งํํ์์ต๋๋ค.
์ด ์ธ์, subtask์ ์์ ์๊ฐ์ ๊ธฐ๋กํด ๋ ์ธ์ธํ๊ฒ ์ผ์ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ํ์ ๋ฉ์ ์ (Mattermost)์ ์๋์ ๋ฑ๋กํ์ฌ ์์ ์ํฉ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ ์ ์๋๋ก ํ์ต๋๋ค.
๋ชจ๋๊ฐ ๋ด์ผํ ๊ณต์ง, ํจ๊ป ๊ณต๋ถํด์ผ ํ ๋งํฌ ๋ฑ์ ๋ชจ์ ๊ด๋ฆฌํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํญ์ ๋ชจ๋ ํ์ ๋ฐ ํผ๋๋ฐฑ์ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋์ด์ ์ ๋ฐ์ํ ์ ์๋๋ก ํ์์ต๋๋ค. ์ปจ๋ฒค์ ๊ท์น, ๋ธ๋์น ์ ๋ต ๋ฑ๋ ๋ ธ์ ์ ๊ธฐ๋กํ์ฌ ๋ชจ๋๊ฐ ํญ์ ํ์ธํ ์ ์๋๋ก ๊ด๋ฆฌํ์ต๋๋ค.
๋งค์ผ ์์นจ 9์์ ์ด์ ํ๋ ์ผ, ์ค๋ ํ ์ผ, ์ด์๋ฅผ ๊ฐ์ ์ ๋ฆฌํด์ 5~10๋ถ ๋์ ์๋ก ๊ณต์ ํ๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค. Scrum์ ํตํด ํ์๋ค์ ํ์ฌ ์ํฉ์ ๊ณต์ ํ์ฌ ํ๋ก์ ํธ์ ๋ํด์ ๊พธ์คํ ๋ชจ๋ํฐ๋ง์ ํ ์ ์์์ต๋๋ค. ๋งค์ผ ์งํํ๋ Scrum ํ์๋ก์ Notion์ ์ ๋ฆฌํ์ต๋๋ค.
- ์ ๊ทํ๋ฅผ ๊ฑฐ์น Diagram ์ ๋๋ค.
PORT | ์ด๋ฆ |
---|---|
443 | HTTPS |
80 | HTTP - HTTPS๋ก ๋ฆฌ๋ค์ด๋ ํธ(ํ๋ก ํธ ํ์ด์ง์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ) |
8443 | Openvidu |
8379 | Redis |
3306 | MySQL |
8081 | Jenkins |
8080 | Spring boot Docker Container |
3000 | React, NginX Docker Container |
- ํ์1
- openvidu๋ฅผ ํตํ WebRTC ๊ธฐ๋ฅ ๊ตฌํ
- ๋ฐฑ์๋ ๋ฐฉ ๊ด๋ฆฌ API ๊ตฌํ(๋ฐฉ ๋ง๋ค๊ธฐ/๋น ๋ฅธ ์์/๋ฐฉ ์ฐพ๊ธฐ/๋ฐฉ ๋๊ฐ๊ธฐ/๋ฐฉ์ฅ ๋ถ์ฌ)
- ๋ฐฑ์๋ ๊ด๋ฆฌ์ API ๊ตฌํ
- ์คํ๋น๋ ์๋ฒ ๋ฐฐํฌ
- styled-component์ material-ui๋ฅผ ํตํ css ์คํ์ผ๋ง
- ํ์2
- react์ redux-toolkit์ ํ์ฉํ์ฌ SPA ๊ตฌํ
- ํ๋ก ํธ ๊ฐ๋ฐ(ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ํ์์ ๋ณด ์์ , ๋ฉ์ธ ํ๋ฉด, ๋ญํน, ํํ ๋ฆฌ์ผ, ๋ง์ดํ์ด์ง, ๋ฐฉ๋ง๋ค๊ธฐ, ๋ฐฉ์ฐพ๊ธฐ๋ฑ, ๊ด๋ฆฌ์ ํ์ด์ง ๊ตฌํ)
- styled-components์ material-ui๋ฅผ ํตํ ์ปดํฌ๋ํธ ๋ ์ด์์ ๊ตฌํ ๋ฐ css ์คํ์ผ๋ง
- ํ์3
- Teachable Machine์ ํตํ ์ด๋ ์ธ์ ๊ตฌํ
- ์ด๋๋ณ ๋ก์ง์ ํตํ ์ด๋ ์นด์ดํธ ๊ธฐ๋ฅ ๋ฐ ํํ ๋ฆฌ์ผ ๊ตฌํ
- Openvidu๋ฅผ ํตํ ๊ฒ์ ๋ด๋ถ ์ ๋ณด ์ค์๊ฐ ํต์
- ๊ฒ์ ์์, ์ข ๋ฃ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ์ค์๊ฐ ๋ญํน, ์ฑํ ๊ธฐ๋ฅ ๊ตฌํ
- styled-component์ material-ui๋ฅผ ํตํ css ์คํ์ผ๋ง
- ํ์ฅ(๋ณธ์ธ)
- Spring security, JWT, JPA๋ฅผ ์ด์ฉํ ์ด๋ฉ์ผ ์ธ์ฆ(ํผ ๊ตฌํ)ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ (์ธ์ฆ, ์ธ๊ฐ)
- JWT, Redis ์บ์ฑ์ ์ด์ฉํ ๋ญํน ์กฐํ ์ ๋ณด ์บ์ฑ ์ฒ๋ฆฌ ๊ตฌํ
- JWT, Redis๋ฅผ ์ด์ฉํด ๋ก๊ทธ์์๋ ํ ํฐ ์ฌ์ฌ์ฉ ๋ถ๊ฐ ์ฒ๋ฆฌ ๊ตฌํ
- ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ๋๋ค์ ๋ณ๊ฒฝ, ํ์ ์ ๋ณด CRUD ๊ตฌํ
- ์ฐ์ ์ด๋์ผ ์ ์กฐํ, 1์ผ 1ํ๋ ์กฐํ, ๋ฐฉ์ฅ ๊ฒ์ ์์ ๊ธฐ๋ฅ, ๊ฒ์ ๋ ๊ธฐ๋ฅ, ๋ญํน ํ์ด์ง ๊ธฐ๋ฅ, ์ต๊ณ ๊ธฐ๋ก ์กฐํ, ๋ฑ์ง ์กฐํ ๋ฑ์ Spring Boot ๋ฐฑ์๋ ๊ธฐ๋ฅ ๊ตฌํ
- Jenkins, Docker๋ฅผ ์ด์ฉํ CD ๊ตฌํ - Docker๋ก nginx+react container, spring boot container ์์ฑํ์ฌ ๋ฐฐํฌ
- Nginx ๋ฆฌ๋ค์ด๋ ํธ ์ค์ ๋ฐ ๋ฐฑ์๋ ๋ฐ ํ๋ก ํธ์๋ url ๋ถ๊ธฐ ์ฒ๋ฆฌ (/, /api/**)
- react๋ฅผ ์ด์ฉํ ํ๋ก ํธ์๋ ํ๋กํ ์ค์ ๋ฐ ํ๋กํ ๋ณ๊ฒฝ ๊ธฐ๋ฅ, ํ๋กํ ๋ณ๊ฒฝ ๋ฐ 1์ผ 1ํ๋ ํธ๋ฒ ํดํ ๊ตฌํ
- ๊ฒ์ ๋ฐ ์ฑํ ๊ธฐ๋ฅ javascript โ react๋ก migration
- styled-component๋ฅผ ํตํ css ์คํ์ผ๋ง
๐HomeDong ๊ธฐ์ ๋ธ๋ก๊ทธ ๋ณด๋ฌ๊ฐ๊ธฐ ๐
- ์๋๋ ๊ฒ์ ํจ๊ป ํด๊ฒฐํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
- ์ฝ๋ ๋ฆฌ๋ทฐ ๊ผผ๊ผผํ ํ์
- ๊ธ์ ์ ์ธ ๋ง๋ก ํ ๋ถ์๊ธฐ๋ฅผ ๋ง๋ค์ด๊ฐ์
- ๋ฌธ์ํ๋ฅผ ์ ํ์!
์์ธํ ํ๊ณ ๋ ๋ธ๋ก๊ทธ์์ ์์ธํ ๋ณด์ค ์ ์์ต๋๋ค.