๐ ๋ฎค๋ ๋ฐ๋ก๊ฐ๊ธฐ ๐ ๋ฎค๋ ๊ฐ๋ฐ ์ผ์ง
ํด๋น ์๋น์ค๋ฅผ ์ด์ฉํด๋ณด์ค ์ ์๋ ํ
์คํธ ๊ณ์ ์
๋๋ค.
ID : [email protected]
PW : Mudig011
ID : [email protected]
PW : Mudig012
ID : [email protected]
PW : Mudig013
ID : [email protected]
PW : Mudig014
ID : [email protected]
PW : Mudig015
- ๊ฐ์
- ๊ธฐ๋ฅ
a. ์ฃผ์ ๊ธฐ๋ฅ - ๊ธฐ์ ์คํ ๋ฐ ๋ฐฐํฌ URL
- ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๊ฐ๋ฐ ์ผ์
a. ERD
b. ์๊ตฌ์ฌํญ ์ ์์
c. API ๋ช ์ธ์
d. URL ์ค๊ณ
e. Architecture
f. ๊ฐ๋ฐ ์ผ์
g. git ์ ๋ต - ๊ตฌํ ๊ธฐ๋ฅ ์์ฐ
- ๊ฐ๋ฐํ๋ฉฐ ๋๋์
a. OpenAPI Specification
b. CI/CD
c. Restful API
d. Oauth - ์ธ๋ถ ์ดํ๋ฆฌ์ผ์ด์
a. ChatGPT
b. Karlo
c. Youtube Data API - ์ฌ์ฉ์ ํผ๋๋ฐฑ ํ ๋ฐ์
2๏ธโฃ AI์ ๋ํ ๋ถ์ ์ ์ธ ์์ ์ ๋ฎ์ถ๊ณ , ์ฌ๋๋ค๊ณผ ์นํด์ง๋ ๊ณ๊ธฐ๋ฅผ ์ ๊ณตํ์!
ํ์ฌ AI ๊ธฐ์ ์ ์ฌ๋๋ค์๊ฒ ๋ง์ ๊ด์ฌ์ ๋ฐ๊ณ ์์ง๋ง
์์ง๋ ๋ง์ ์ฌ๋๋ค๊ณผ๋ ์นํด์ง์ง ์์์ต๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ์ ์๋น์ค๋ฅผ ํตํด ์ข๋ ์นํด์ง ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์์ต๋๋ค.
์๋ ํ์ธ์. ๐โโ๏ธ
๋ฎค๋(Mudig, Music Digging ์ดํ ๋ฎค๋)์ ์ฌ์ฉ์๋ค์ด ์๋ก์ด ์์ ์ ๋ฐ๊ฒฌํ๊ณ , ์ถ์ฒ๋ฐ์ผ๋ฉฐ, ๊ณต์ ํ ์ ์๋ ํ๋ซํผ์ ๋งํฉ๋๋ค.
GPT (Generative Pretrained Transformer) ๊ธฐ์ ๊ณผ Karlo(T2I, Text to Image)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ธํ๋ ์์ ์ถ์ฒ๊ณผ ์ธํฐ๋ ํฐ๋ธํ ๊ฒฝํ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋๋ค.
๋ฎค๋์
- ์์ฒด ํ์๊ฐ์ ๋ฟ๋ง ์๋๋ผ ๊ตฌ๊ธ, ์นด์นด์ค๋ฅผ ์ด์ฉํ ์์ ๋ก๊ทธ์ธ์ ์ง์ํ๊ณ ์์ต๋๋ค.
- ์ธ๊ณต์ง๋ฅ์ ํตํด ์๋ก์ด ์์ ์ ์ฐพ๋ ์ฆ๊ฑฐ์์ ๋๋ฆด ์ ์์ต๋๋ค.
- ์์ ๋ง์ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๊ณต์ ํ๊ณ , ์ํตํ๋ฉฐ ๋ฌด๋ฃํ ์ผ์์ ์์ํจ ์ฆ๊ฑฐ์์ ๋๋ ์ ์๋๋ก ์ฅ์๋ฅผ ์ ๊ณตํด๋๋ฆฝ๋๋ค.
โ๋๊น
โ์ด๋ย ์๋ ๋์ ์ด๊ฐ ์์ ์ ๊ณต์ฐ ๋ฆฌ์คํธ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด์
์์
์ ์ฐพ๋ ํ์๋ฅผย ์๋ฏธํ๋, ํ์ฌ๋ ์์ ์ ํน์์๋ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์ง๋ ๊ฒ์ผ๋ก
๊ทธ ์๋ฏธ๊ฐ ํ๋ ๋์ด ์ผ๋ฐ์ธ๋ค๋ ์ฌ์ฉํ๋ ์ธ์ด๊ฐ ๋์์ต๋๋ค.
๊ฐํ์ฐ | ๊น์ฌ์ฃผ | ์ฌ์๋ด | ์ฌ๋ฏผ์ | ํฉ๋ด์ |
---|---|---|---|---|
๐ Hyunwooz | ๐ kimyeoju | ๐ su0797 | ๐ MJ-SIM | ๐ bnbbbb |
์๋
ํ์ธ์ ๐โโ๏ธ
์ ํฌ๋ Mudig์ ์ฃผ๋์ด ๊ฐ๋ฐ์ ๋ฐฑ์๋ ํ ์
๋๋ค.
Estsoft์์ ์ฃผ๊ดํ๋ ๋ฐฑ์๋ ์ค๋ฅด๋ฏธ ๊ต์ก๊ณผ์ ์์ ๋ง๋ ๋น์ ๊ณต์์ ์ ๊ณต์๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์๋ก์ด ๊ธฐ์ ์ ๋ฐ์๋ค์์ ์์ด์ ์ด๋ฆฐ ๋ง์์ ๊ฐ์ง ๋ถ๋ค์ด ๋ชจ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ์์ต๋๋ค.
๊ธฐ์ ์ ์ผ๋ก ๋ถ์กฑํ ์๋ ์์ง๋ง ์ต์ ์ ๋คํด ์ค๋นํ์ต๋๋ค.
์๋ถํ๋๋ฆฝ๋๋ค :)
๐ Notion , ๐ฑ Discord
ํด๋น ํ๋ก์ ํธ๋ฅผ Github์ผ๋ก ๊ด๋ฆฌ๋ฅผ ํ๋ฉด์ Commit Log๋ฅผ ํ์ ๋ฉ์ ์ ๋ก ์ฌ์ฉํ๊ณ ์๋ Discord์์ ์๋ฆผ์ ๋ฐ์ ์ ์๋๋ก ์ฐ๋ ํ์์ต๋๋ค.
๊ตฌํ ์ฝ๋
# CI ์ฑ๊ณต ๋ฉ์ธ์ง ๋ฐ์ก
build-CI-Success:
needs: CI
runs-on: ubuntu-latest
if: success()
steps:
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "
## CI ์งํ\n
### ๐ Status\n
> **Success** โ
\n
### โ๏ธ Commit message\n
> ${{ github.event.commits[0].message }}\n"
# ๋ฐฐํฌ ์ฑ๊ณต ๋ฉ์ธ์ง ๋ฐ์ก
build-Deploy-Success:
needs: deploy
runs-on: ubuntu-latest
if: success()
steps:
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "
## Deploy ์งํ\n
### ๐ Status\n
> **Success** โ
\n
### โ๏ธ Commit message\n
> ${{ github.event.commits[0].message }}\n
### ๐ซก See changes\n
> https://github.com/${{ github.repository }}/commit/${{github.sha}}\n"
# CI ์คํจ ๋ฉ์ธ์ง ๋ฐ์ก
build-CI-failure:
needs: CI
runs-on: ubuntu-latest
if: failure()
steps:
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "
## CI ์งํ\n
### ๐ Status\n
> **Failure** โ\n
### โ๏ธ Commit message\n
> ${{ github.event.commits[0].message }}\n
### ๐ See Error Message\n
> https://github.com/MusicDigging/Mudig_BE/actions\n"
#๋ฐฐํฌ ์คํจ ๋ฉ์ธ์ง ๋ฐ์ก
build-Deploy-failure:
needs: deploy
runs-on: ubuntu-latest
if: ${{ needs.deploy.outputs['result'] == 'failure' }}
steps:
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "
## Deploy ์งํ\n
### ๐ Status\n
> **Failure** โ\n
### โ๏ธ Commit message\n
> ${{ github.event.commits[0].message }}\n
### ๐ See Error Message\n
> https://github.com/MusicDigging/Mudig_BE/actions\n"
-
ํ์๊ฐ์ ๋ฐ ๋ก๊ทธ์ธ , ์์ ๋ก๊ทธ์ธ (Kakao, Google)
๋ฎค๋ ์๋น์ค๋ ์ด๋ฉ์ผ๋ก ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ฉฐ, ์นด์นด์ค์ ๊ตฌ๊ธ์ ํ์ฉํ ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์์ต๋๋ค. ๋ํ, ๋ง์ด ํ์ด์ง์์๋ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ํ์ํํด, ๋ก๊ทธ์์๊ณผ ๊ฐ์ ์ฃผ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด๋ฅผ ์์ฝ๊ฒ ํ์ธ ๋ฐ ์์ ํ ์ ์์ต๋๋ค.
-
์ด๋ฉ์ผ๋ก ํตํ ํ์๊ฐ์ ์ ๋ฉ์ผ ์ธ์ฆ
์ด๋ฉ์ผ๋ก ํ์๊ฐ์ ์, ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด SMTP ์๋ฒ๋ฅผ ํ์ฉํ์ฌ ๋ฉ์ผ ์ธ์ฆ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์์ฑํ ์ด๋ฉ์ผ ์ฃผ์๋ก ์ ์ก๋๋ ์ธ์ฆ๋ฒํธ๋ฅผ ํตํด์ ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๊ณ , ์ ํํ ์ธ์ฆ๋ฒํธ ์ ๋ ฅ ์์๋ง ํ์๊ฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
-
JSON Web Token ์ธ์ฆ ๋ฐฉ์
๋ก๊ทธ์ธ ์ ๋ฐ๊ธ๋ Access Token์ ํ์ฉํ์ฌ ์ ์ ์ธ์ฆ์ ์ํํ๋ฉด์, ๋์์ ์ง์์ ์ธ ์ธ์ ์ ์ง๋ฅผ ์ํด Refresh Token์ ์ ๊ณตํฉ๋๋ค. Refresh Token ๊ฐฑ์ ์ ๋ณ๋์ URL์ธ โapi/token/refresh/โ ๋ฅผ ํตํด ์ด๋ค์ง๋ฉฐ, Access Token์ ๋ง๋ฃ ์ ์ ์๋์ผ๋ก ์๋ก์ด Access Token์ ํ๋ํฉ๋๋ค. ์ด๋ก์จ ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ง์ํ๋ฉด์ Mudig ์๋น์ค๋ฅผ ๋ณด๋ค ์์ ํ๊ฒ ์ฆ๊ธธ ์ ์์ต๋๋ค.
-
ํ๋กํ CRU
ํ์๊ฐ์ ํ ์์ ์ ๋ํํ๋ ํ๋กํ์ ๊พธ๋ฐ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ํ๋กํ ์ด๋ฏธ์ง์ ํ์ค ์๊ฐ๋ฅผ ์์ฑ ๋ฟ๋ง์๋๋ผ ๊ด์ฌ ์ฅ๋ฅด, ๋ํ ํ๋ ์ด๋ฆฌ์คํธ ๋ฑ์ ์ค์ ๊ฐ๋ฅํฉ๋๋ค.
-
Follow / Unfollow ๊ธฐ๋ฅ
์์ ๊ณผ ๊ด์ฌ์ฌ๊ฐ ๋น์ทํ ์ ์ ์ ํ๋ก์๋ฅผ ๋งบ์ ์ ์์ต๋๋ค.
-
๋๋ค ๋ฎค๋น
์ฐ๋ฆฌ ์๋น์ค์์ ๋ณด์ ์ค์ธ Music ๋ชฉ๋ก์์ ๋๋ค์ผ๋ก 5๊ฐ์ ์์ ์ ์ถ์ฒํด๋๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ํด๋น ๊ธฐ๋ฅ์ ํตํด ์ฅ๋ฅด, ์ฐ๋์ ์๊ด์์ด ๋ค์ํ ์์ ์ ๋๋ค์ผ๋ก ๋ง๋๋ณด์ค ์ ์์ต๋๋ค.
-
ํ๋ ์ด๋ฆฌ์คํธ CRUD ๊ธฐ๋ฅ
์ฌ์ฉ์๋ค์ด ์ํ๋ ๋ด์ฉ์ ํ ๋๋ก ํ๋ ์ด๋ฆฌ์คํธ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์์ ์๋ ๊ณก ์์ ์ด๋, ๊ณก ์ญ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ํด๋น ๊ธฐ๋ฅ์ GPT API, YouTube Data API, Karlo ์ ์ฐ๊ด๋์ด ์์ต๋๋ค.
-
์ด๋ฒคํธ ํ๋ ์ด๋ฆฌ์คํธ ์์ฑ
์ฌ์ฉ์๋ค์ ํ์ฌ ์ํฉ,๊ธฐ๋ถ์ ๋ํ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด๋ฒคํธ์ฑ์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
-
ํ๋ ์ด๋ฆฌ์คํธ ์ข์์
๋ฎค๋ ์ด์ฉ ์ค ๋ฐ๊ฒฌํ ์ทจํฅ์ ๊ฒฉ ํ๋ ์ด๋ฆฌ์คํธ์ ์ข์์๋ฅผ ๋๋ฌ โ๋ง์ดํ์ด์ง - ์ข์์ ํ์ํ ํ๋ ์ด๋ฆฌ์คํธโ์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ ์ฅ๋ ๋ฆฌ์คํธ๋ ๋ด ํ๋กํ์ ๋ฐฉ๋ฌธํ ๋ค๋ฅธ ์ ์ ๋ค๋ ๋ณผ ์ ์์ด ์๋ก ๋ค์ํ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
-
ํ๋ ์ด๋ฆฌ์คํธ, ์ ์ ๊ฒ์ ๊ธฐ๋ฅ
์ํ๋ ํค์๋๋ฅผ ์ ๋ ฅ ํ ๊ฒ์ํ๋ฉด ํ๋ ์ด๋ฆฌ์คํธ์ ์ ๋ชฉ, ์ ์ ์ ๋๋ค์ ๋๋ ์๊ฐ๊ธ์ ํด๋น ํค์๋๊ฐ ํฌํจ๋ ํ๋ ์ด๋ฆฌ์คํธ์ ์ ์ ๋ฅผ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
-
๋๊ธ๊ณผ ๋๋๊ธ CRUD
๋๊ธ์ ์ด์ฉํ์ฌ ๊ฒ์๊ธ์ ๋ํ ์๊ฒฌ์ ๋จ๊ธธ ์๋ ์์ผ๋ฉฐ ๋๊ธ์ ๋๋๊ธ ๊ธฐ๋ฅ ๊น์ง ์ง์ํ๊ณ ์์ต๋๋ค. ๋๊ธ์ ์์ , ์ญ์ ํ๋ ๊ธฐ๋ฅ๊น์ง ์ ๊ณต ๋๊ณ ์์ต๋๋ค.
-
GPT API, YouTube Data API, Karlo
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ์ ํ ๋๋ก GPT API๊ฐ ์์ฑํ ๊ฒฐ๊ณผ๋ฌผ์ YouTube Data API V3๋ก ์ ์กํ์ฌ ํ๋ ์ด๋ฆฌ์คํธ์ ์ ๋ชฉ, ๋ ธ๋๋ค, Karlo ์ด๋ฏธ์ง ๊ฐ ๋ฑ์ ์์ฑํฉ๋๋ค.
์ฌ์ฉ ๊ธฐ์ |
|
๋ฐ์ดํฐ๋ฒ ์ด์ค |
|
์ ์ฅ์ |
|
๋ฐฐํฌ | |
API ๋ฌธ์ |
|
ํ์ |
|
IDE |
|
- https://api.mudig.co.kr/
- Back-End Repo : https://github.com/MusicDigging/Mudig_BE
- https://www.mudig.co.kr/
- Front-End Repo : https://github.com/MusicDigging/Mudig_FE
์๊ตฌ์ฌํญ ์ ์์ ๋ฐ๋ก๊ฐ๊ธฐ
๋ฎค๋์ ChatGPT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ AI ์์ ๋๊น ์๋น์ค์ ๋๋ค. ์ฌ์ฉ์๋ค์ AI๋ฅผ ํ์ฉํด ํ์ฌ ๊ธฐ๋ถ์ด๋ ์ ํธํ๋ ์์ ์ฅ๋ฅด ๋ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ํ, ์์ฑํ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๊ณต์ ํ๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ค๊ณผ ๋๊ธ๋ก ์ํตํ ์ ์์ต๋๋ค. ๋ฎค๋์ ์์ ์์ ๊ณต์ ํ๋ซํผ์ผ๋ก์ ๋ค์ํ ์์ ์ ํ์ํ๊ณ ์ํตํ ์ ์๋ ๊ณต๊ฐ์ผ๋ก, ์์ ์ ์ฆ๊ธฐ๋ ์ฆ๊ฑฐ์ด ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ฉ์ด | ์ ์ |
---|---|
ํ๋ ์ด๋ฆฌ์คํธ | ํ๋ ์ด๋ฆฌ์คํธ๋ ์์ ์ด๋ ๋น๋์ค, ์ฌ์ง, ํ ์คํธ ๋ฑ์ ๋ชจ์ ๋์ ๋ชฉ๋ก์ ๋งํฉ๋๋ค. ์ฃผ๋ก ์์ ์คํธ๋ฆฌ๋ฐ ์๋น์ค์์๋ ํ ํ ๋ง๋ ๋ถ์๊ธฐ์ ๋ง๊ฒ ๊ณก๋ค์ ๋ชจ์๋ ๋ชฉ๋ก์ผ๋ก ์ด์ฉ๋๋ฉฐ. ์ผ์์ ๋ฐฐ๊ฒฝ์์ ๋ถํฐ ๊ฐ์ฑ์ ์ธ ๋ถ์๊ธฐ๊น์ง, ๋ค์ํ ํ ๋ง๋ ์ทจํฅ์ ๋ฐ๋ผ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๊ณต์ ํ๊ฑฐ๋ ์ฆ๊ธธ ์ ์์ต๋๋ค. ์ข ์ข ์ฌ์ฉ์๋ค์ด ์ข์ํ๋ ์์ ์ด๋ ์ ๊ณก์ ๋ชจ์๋ ๋ชฉ๋ก์ผ๋ก๋ ์ฌ์ฉ๋ฉ๋๋ค. |
์ ์ | ์ ์ (User)๋ ํน์ ์น์ฌ์ดํธ, ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ์๋น์ค๋ฅผ ์ด์ฉํ๋ ๊ฐ์ธ์ด๋ ๊ธฐ์ ์ ๊ฐ๋ฆฌํต๋๋ค. ์ด์ฉ์๊ฐ ํด๋น ํ๋ซํผ์ ๋ฑ๋กํ๊ณ , ์๋น์ค๋ฅผ ์ด์ฉํ๋ ์ฌ๋๋ค์ ์๋ฏธํฉ๋๋ค. "์ฌ์ฉ์" ๋๋ "๊ณ ๊ฐ"๊ณผ ์ ์ฌํ ์๋ฏธ๋ก ์ฐ์ ๋๋ค. ์ ์ ๋ ๋ก๊ทธ์ธํ์ฌ ์๋น์ค์ ์ ๊ทผํ๊ณ , ์๋น์ค์ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉฐ, ๊ฐ์ธ์ ์ธ ํ๋กํ์ ์ค์ ํ๊ณ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. |
ํ์๊ฐ์ | ํ์๊ฐ์ ์ ์ด๋ค ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฑ๋ก๋์ด ๊ทธ ์๋น์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ํ์ํ ์ ์ฐจ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์๋ ์์ ์ ์ ๋ณด(์ด๋ฆ, ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ฑ)๋ฅผ ์ ๊ณตํ์ฌ ๊ณ์ ์ ์์ฑํ๊ณ , ํด๋น ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ ๊ถํ์ ์ป๊ฒ ๋ฉ๋๋ค. ํ์๊ฐ์ ์ ํตํด ์ฌ์ดํธ์ ๋ก๊ทธ์ธํ์ฌ ์๋น์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํน์ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค. |
๋ก๊ทธ์ธ | ๋ฑ๋ก๋ ์ ์ ๊ณ์ ์ผ๋ก ์์คํ ์ ์ ๊ทผํ์ฌ ์ ์ ์๋ณ์ ์ํํ๋ ๊ณผ์ ์ ๋๋ค. |
๋๊น (Digging) | ๋๊น ์ด๋ย ์๋ ๋์ ์ด๊ฐ ์์ ์ ๊ณต์ฐ ๋ฆฌ์คํธ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด์ ์์ ์ ์ฐพ๋ ํ์๋ฅผย ์๋ฏธํ๋, ํ์ฌ๋ ์์ ์ ํน์์๋ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ์ง๋ ๊ฒ์ผ๋ก ๊ทธ ์๋ฏธ๊ฐ ํ๋ ๋์ด ์ผ๋ฐ์ธ๋ค๋ ์ฌ์ฉํ๋ ์ธ์ด์ ๋๋ค. |
ChatGPT | ChatGPT๋ OpenAI๊ฐ ๊ฐ๋ฐํย ๋ํ ์ธ์ด ๋ชจ๋ธ(large language model, LLM)ย ์ฑ๋ด์ ๋ปํฉ๋๋ค. ChatGPT๋ ๋ํ ํํ๋ก ์ํธ์์ฉ์ ํ๋ฉฐ ๋๋ผ์ธ ์ ๋๋ก ์ธ๊ฐ๊ณผ ๋ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐ์์ ์ ๊ณตํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. |
ํด๋น ๋ฌธ์๋ ๋ฎค๋์ ์น ํ์ด์ง์ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ฃผ์ ์ ๋ณด๋ฅผ ๋ค๋ฃน๋๋ค. ์ฌ๊ธฐ์๋ ์ฃผ๋ก ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ๊ณผ ๊ธฐ์ ์ ์ฉ์ด๋ก ์์ฑ๋ ์๋น์ค์ ์ธ๋ถ ๊ธฐ๋ฅ์ ๊ดํ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค.
3.3.1. API ๋ช ์ธ์: https://api.mudig.co.kr/api/swagger/
๊ธฐ๋ฅ | URL | Method | ๋ด๋น |
---|---|---|---|
USER | |||
์ด๋ฉ์ผ ์ธ์ฆ | /user/otp | POST | ๊น์ฌ์ฃผ |
๋๋ค์ ์ค๋ณต ๊ฒ์ฌ | /user/checkname | POST | |
ํ์๊ฐ์ | /user/join | POST | |
๋ก๊ทธ์ธ | /user/login | POST | |
๋ก๊ทธ์์ | /user/logout | POST | |
์์ ๋ก๊ทธ์ธ | /user/login/{provider} | GET | |
์์ ๋ก๊ทธ์ธ ์ฝ๋ฐฑ | /user/login/{provider}/callback | POST | |
์์ ํ์ ๊ฐ์ | /user/socialjoin/ | POST | |
๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ | /user/changepassword | PUT | |
ํ์ ํํด | /user/withdrawal | DELETE | |
ํ๋กํ ์กฐํ | /user/profile | GET | ์ฌ๋ฏผ์ |
ํ ์ ์ ํ๋กํ ์กฐํ | /user/profile/int:user_id | GET | |
ํ๋กํ ์์ | /user/profile/edit | PUT | |
ํ๋ก์ฐ | /user/int:user_id/follow | POST | |
์ธํ๋ก์ฐ | /user/int:user_id/unfollow | DELETE | |
ํ๋ก์ ๋ชฉ๋ก ์กฐํ | /user/int:user_id/followers | GET | |
ํ๋ก์ ๋ชฉ๋ก ์กฐํ | /user/int:user_id/following | GET | |
PLAYLIST | |||
ํ๋ฆฌ ์กฐํ | /playlist | GET | ํฉ๋ด์ |
ํ๋ฆฌ ์์ฑ | /playlist/create | POST | |
ํ๋ฆฌ ์ญ์ | /playlist/delete/int:playlist_id | DELETE | |
ํ๋ฆฌ ์์ | /playlist/detail/int:playlist_id/edit | PUT | |
ํ๋ฆฌ ์์ธ๋ณด๊ธฐ | /playlist/detail/int:playlist_id | GET | |
๊ธฐ์กด ํ๋ฆฌ์ ๊ณก ์ถ๊ฐ | /playlist/add | PUT | |
๋ด ํ๋ฆฌ ๋ณด๊ธฐ (์์ ์ถ๊ฐ ํ ๋) | /playlist/myplaylist | GET | |
๋ชจ๋ ์์ (์์ ์ถ๊ฐํ ๋) | /playlist/music | GET | |
ํ๋ฆฌ ๊ฒ์ | /playlist/search?query={string} | GET | ์ฌ์๋ด |
ํ๋ฆฌ ์ข์์ | /playlist/like | POST | |
ํ๋ฆฌ ๋๊ธ ์์ฑ | /playlist/comment/write | POST | |
ํ๋ฆฌ ๋๋๊ธ ์์ฑ | /playlist/recomment/write | POST | |
ํ๋ฆฌ ๋๊ธ ์์ | /playlist/comment/edit | PUT | |
ํ๋ฆฌ ๋๊ธ ์ญ์ | /playlist/comment/delete/int:comment_id | DELETE | |
๋๋ค ๋ฎค๋น | /playlist/random-mv | POST | ๊ฐํ์ฐ |
์ด๋ฒคํธ์ฑ ํ๋ฆฌ ์์ฑ | /playlist/event | POST |
๐ฆMudig_BE
โฃ ๐.github
โ โ ๐workflows
โ โ โ ๐main.yml
โฃ ๐mudig
โ โฃ ๐__pycache__
โ โฃ ๐asgi.py
โ โฃ ๐settings.py
โ โฃ ๐urls.py
โ โฃ ๐wsgi.py
โ โ ๐__init__.py
โฃ ๐playlist
โ โฃ ๐migrations
โ โฃ ๐__pycache__
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐gpt.py
โ โฃ ๐karlo.py
โ โฃ ๐models.py
โ โฃ ๐playlist_utill.py
โ โฃ ๐prompt.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐uploads.py
โ โฃ ๐urls.py
โ โฃ ๐views.py
โ โฃ ๐youtube.py
โ โ ๐__init__.py
โฃ ๐user
โ โฃ ๐migrations
โ โฃ ๐templates
โ โ โ ๐user
โ โ โ โ ๐email_template.html
โ โฃ ๐__pycache__
โ โฃ ๐admin.py
โ โฃ ๐apps.py
โ โฃ ๐models.py
โ โฃ ๐serializers.py
โ โฃ ๐tests.py
โ โฃ ๐urls.py
โ โฃ ๐utils.py
โ โฃ ๐views.py
โ โ ๐__init__.py
โฃ ๐.gitignore
โฃ ๐manage.py
โฃ ๐README.md
โ ๐requirements.txt
- 2023.11.03 ~ 2023.12.29
- ํ๋ก์ ํธ ํ์๋ก : https://www.notion.so/Mudig-4de021314fe54804a03d291908f3d508
- ์ผ์ ๊ด๋ฆฌ: https://github.com/orgs/MusicDigging/projects/2/views/1
Stable - Main (release) - Develop - ์์ ์๋ณ Branch
1. Stable : ์๋ฒ ๋ฐฐํฌ ๋จ๊ณ์์ ์์ ํ๋ ๋ฒ์
2. Main : ์๋ฒ ๋ฐฐํฌ ๋จ๊ณ
3. Develop : ๊ฐ ์์
์๋ณ ๋ธ๋์น์์ ๊ธฐ๋ฅ ๊ฐ๋ฐ ํ ๋ณํฉ ๋ฐ ๋๋ฒ๊น
์งํ
4. ์์
์๋ณ Branch : ๊ฐ์ ๋งก์ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์์ ์๋ณ Branch ์์ฑ ํ ๊ธฐ๋ฅ ๊ฐ๋ฐ ์งํ
- Develop Branch๋ก Push
- Develop Branch ๋ณํฉ ํ ๋๋ฒ๊น ์งํ
- Develop์์ ๋ฉ์ธ ๋ธ๋์น์ Push
- ์๋ฒ ๋ฐฐํฌ ์งํ
์ด๋ฉ์ผ ํ์๊ฐ์ | ์นด์นด์ค ํ์๊ฐ์ | ๊ตฌ๊ธ ํ์๊ฐ์ |
---|---|---|
![]() |
![]() |
![]() |
์ด๋ฉ์ผ ๋ก๊ทธ์ธ | ์นด์นด์ค ๋ก๊ทธ์ธ | ๊ตฌ๊ธ ๋ก๊ทธ์ธ |
---|---|---|
![]() |
![]() |
![]() |
๋ก๊ทธ์์ | ํ์ํํด | ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ |
---|---|---|
![]() |
![]() |
![]() |
ํ๋ก์ฐ ์ธํ๋ก์ฐ | ํ๋ก์ฐ ํ๋ก์ ๋ชฉ๋ก | ์๋ ํ๋กํ |
---|---|---|
![]() |
![]() |
![]() |
๋ง์ด ํ์ด์ง | ํ๋กํ ์์ | ๋ฉ์ธ ํ์ด์ง |
---|---|---|
![]() |
![]() |
![]() |
ํ๋ ์ด๋ฆฌ์คํธ ์์ฑ | ํ๋ ์ด๋ฆฌ์คํธ ์ญ์ | ํ๋ ์ด๋ฆฌ์คํธ ์์ธ๋ณด๊ธฐ |
---|---|---|
![]() |
![]() |
![]() |
ํ๋ ์ด๋ฆฌ์คํธ ์์ | ํ๋ ์ด๋ฆฌ์คํธ ์ข์์ | ์ด๋ฒคํธ ํ๋ฆฌ ์์ฑ |
---|---|---|
![]() |
![]() |
![]() |
ํ๋ฆฌ/๋ฎค์ง/์ ์ ๊ฒ์ | ๋๊ธ CRUD | ๋๋๊ธ CRUD |
---|---|---|
![]() |
![]() |
![]() |
๋๋ค ๋ฎค๋น | ๊ณก ์ถ๊ฐ | ์คํ๋์ฌ |
---|---|---|
![]() |
![]() |
![]() |
OpenAPI Specification์ ์น ์๋น์ค API๋ฅผ ์ค๋ช ํ๊ณ ๋ฌธ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์คํ๋ ํ์์ ๋งํฉ๋๋ค. ์ดํดํ ์ ์๋ API ์ค๋ช ์ ์ ๊ณตํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฉ์ดํ๊ฒ ๋ง๋ญ๋๋ค.
- OpenAPI Specification์ ์ฃผ๋ก YAML ๋๋ JSON ํ์์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๋ API ์ค๋ช ์ ์ฝ๊ฒ ์์ฑํ๊ณ ์ฝ์ ์ ์๋๋ก ํฉ๋๋ค.
- OpenAPI Specification์ API์ ์๋ํฌ์ธํธ, ๋งค๊ฐ๋ณ์, ์๋ต ํ์ ๋ฑ์ ๋ฌธ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ API๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ๋์ง ์ดํดํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
- OpenAPI Specification์ ์ฃผ๋ก RESTful API๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์น ์๋น์ค๋ฅผ ์ํ ํ์ค์ ์ธ ๋์์ธ ์์น์ ๋ฐ๋ฅด๋ API๋ฅผ ์ค๊ณํ ๋ ์ ์ฉํฉ๋๋ค.
- OpenAPI Specification์ ์ฌ์ฉํ๋ฉด API๋ฅผ ํธ์ถํ๋ ๋ฐ ํ์ํ ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ API๋ฅผ ๋ ์ฝ๊ฒ ํตํฉํ ์ ์๋๋ก ๋์์ค๋๋ค.
- ๋ค์ํ ๋๊ตฌ์ ํ๋ ์์ํฌ์์ OpenAPI Specification์ ํ์ฉํ์ฌ API๋ฅผ ์๋์ผ๋ก ๋ฌธ์ํํ๊ณ ํ ์คํธํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ ํฌ ์๋น์ค์ ๊ฒฝ์ฐ Swagger๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
- OpenAPI Specification์ API์ ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. API๊ฐ ์ ๋ฐ์ดํธ๋๋ฉด ์๋ก์ด ๋ฒ์ ์ ๋ช ์ธ๋ฅผ ์์ฑํ์ฌ ์ด์ ๋ฐ ํ์ฌ ๋ฒ์ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ช ํํ ํ ์ ์์ต๋๋ค.
OpenAPI Specification์ API ์ค๊ณ, ๋ฌธ์ํ, ๊ตฌํ, ํ ์คํธ ๋ฐ ์ ์ง ๋ณด์๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ง์ํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํ ๊ฐ์ ํ์ ์ ์ฉ์ดํ๊ฒ ํ๊ณ ๊ฐ๋ฐ์๊ฐ API๋ฅผ ๋น ๋ฅด๊ฒ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ์ ์๋๋ก ๋๋ ์ญํ ์ ํฉ๋๋ค.
CI/CD (Continuous Integration/Continuous Delivery)๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๊ณผ์ ์ ์๋ํํ์ฌ ๋น ๋ฅธ ์ฃผ๊ธฐ๋ก ๊ณ ๊ฐ์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. CI/CD์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ง์์ ์ธ ํตํฉ, ์ง์์ ์ธ ์๋น์ค ์ ๊ณต, ์ง์์ ์ธ ๋ฐฐํฌ์ ๋๋ค. ํนํ, CI/CD๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉ ๋ฐ ํ ์คํธ ๋จ๊ณ์์๋ถํฐ ์ ๊ณต ๋ฐ ๋ฐฐํฌ์ ์ด๋ฅด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ดํ์ฌ์ดํด ์ ์ฒด์ ๊ฑธ์ณ ์ง์์ ์ธ ์๋ํ์ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ ๊ณตํฉ๋๋ค.
CI๋ฅผ ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด, ๋น๋/ํ ์คํธ๋ฅผ ์๋ํ ํ๋ ๊ณผ์ ์ ๋งํ๋ฉฐ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ง์์ ์ธ ํตํฉ์ ์๋ฏธํฉ๋๋ค.
๊ฐ๋ฐ์๊ฐ ๋จ์๋ณ๋ก ๊ตฌํํ ๋ถ๋ถ์ ๋ณํฉํ ๋๋ง๋ค ์๋ํ๋ ๋น๋์ ํ ์คํธ ์คํ๋๋ฉฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํตํด ์ด๋ค ๋ถ๋ถ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๋ฐฐํฌ ์ ์ ํ์ธํ ์ ์์ต๋๋ค.
CI ์์
- ๊ฐ๋ฐ์๊ฐ ๊ตฌํํ ์ฝ๋๋ฅผ ๊ธฐ์กด ์ฝ๋์ ๋ณํฉ ( ์ฐ๋ฆฌ์ Mudig์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๋ณ Branch์์ Develop Branch์์ ๋ณํฉ ์งํ, ๋ก์ปฌ ํ ์คํ ํ Main์ ๋ณํฉ์ ์งํํฉ๋๋ค.)
- ๋ณํฉ๋ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๊ณ ๋น๋๋๋์ง ๊ฒ์ฆ
- ํ ์คํธ ๊ฒฐ๊ณผ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ค์ 1๋ฒ ๊ณผ์ ์งํ , ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๋ฐฐํฌ
Github Action์ ํ์ฉํ CI ๊ตฌํ
๊ตฌํ ์ฝ๋
CI:
runs-on: ubuntu-latest
env:
DJAGNO_SECRET: ${{ secrets.DJAGNO_SECRET }}
strategy:
max-parallel: 4
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run Tests
run: |
python manage.py test
CD๋ฅผ ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด, ๋ฐฐํฌ ์๋ํ ๊ณผ์ ์ ๋งํ๋ฉฐ ์ง์์ ์ธ ๋ฐฐํฌ๋ฅผ ์๋ฏธํ๋ฉฐ, CI๋ฅผ ํตํด์ ์๋ก์ด ์์ค์ฝ๋์ ๋น๋์ ํ ์คํธ ๋ณํฉ๊น์ง ์ฑ๊ณต์ ์ผ๋ก ์งํ๋ฌ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฐฐํฌํ๊ฒฝ๊น์ง ๋ฆด๋ฆฌ์ฆ ํ๋ ๊ฒ์ ๋งํ๊ณ ์์ต๋๋ค.
CD ์์
- CI๋ฅผ ํตํด ์๋ก์ด ์์ค์ฝ๋์ ๋น๋์ ํ ์คํธ ๋ณํฉ๊น์ง ์ฑ๊ณต
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฐฐํฌํ๊ฒฝ์ ๋ฆด๋ฆฌ์ฆ
Github Action์ ํ์ฉํ CD ๊ตฌํ
๊ตฌํ ์ฝ๋
deploy:
needs: CI
name: Deploy
runs-on: ubuntu-latest
if: success()
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master # appleboy๋ฅผ ํตํด ์ธ๋ถ ์๋ฒ์์ ssh ์ ์ ํ ์ปค๋งจ๋ ์คํ
with:
host: ${{ secrets.AWS_HOST }} # AWS ํธ์คํธ
username: ${{ secrets.AWS_USERNAME }} # AWS USERNAME
key: ${{ secrets.AWS_PEM_KEY }} # AWS PEM KEY
port: ${{ secrets.AWS_PORT }} # AWS SSH PORT
script_stop: true
script: |
whoami # ํ์ฌ ๋ด๊ฐ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅ ํฉ๋๋ค.
ls -al # ํ์ฌ์ ๋๋ ํ ๋ฆฌ์์ ํ์ผ ๋ชฉ๋ก์ ์ถ๋ ฅํ์ฌ ๋ณด์ฌ์ฃผ๋ ๋ช
๋ น์ด ์
๋๋ค.
cd Mudig_BE/ # ๋ฎค๋์ด ์ค์น๋ ํด๋๋ก ๋ค์ด๊ฐ๋๋ค.
/home/ubuntu/publish/pull_repository.sh # ์ฌ์ ์ ์ ์๋ ์์ ์คํํฉ๋๋ค.
REST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ API๋ฅผ ๋งํฉ๋๋ค.
๐ก REST๋
1. HTTP URI๋ฅผ ํตํด ์์์ ๋ช
์ํ๊ณ
2. HTTP Method(Post,Get,Put,Delete)๋ฅผ ํตํด
3. ํด๋น ์์์ ๋ํ *CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
Rest์ ๊ตฌ์ฑ ์์
- ์์ : HTTP URI
- ์์์ ๋ํ ํ์ : HTTP Method
- ์์์ ๋ํ ํ์์ ๋ด์ฉ : HTTP Message Pay Load
CRUD Operation
์ปดํจํฐ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ธฐ๋ฅ์ ๋ฌถ์ด์ ์ผ์ปซ๋ ๋ง์
๋๋ค.
- URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์
- ๋ง์ง๋ง์ ์ฌ๋์๋ฅผ ํฌํจํ์ง ์๋๋ค.
- ์ธ๋๋ฐ ๋์ ํ์ดํฐ
- ํ์ผํ์ฅ์๋ ํฌํจํ์ง ์๋๋ค.
- ํ์๋ฅผ ํฌํจํ์ง ์๋๋ค.
REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ๊ทธ ์๋๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
RESTful
REST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ ์ ์๋ฏธํฉ๋๋ค. REST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํจ ์์คํ ์ RESTful ํ๋ค ๋งํ ์ ์์ต๋๋ค.
ํน์ง
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ
- Stateless
- Cacheable (์บ์์ฒ๋ฆฌ ๊ฐ๋ฅ)
- ๊ณ์ธตํ
- ์ธํฐํ์ด์ค์ ์ผ๊ด์ฑ
OAuth(Open Authorization)์ ์น ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ๋กํ ์ฝ๋ก, ์ธํฐ๋ท ์ฌ์ฉ์์ ๋ฐ์ดํฐ ๋ฐ ์๋น์ค๋ฅผ ์์ ํ๊ฒ ์ 3์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ์๋น์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ์ ํ์ฉํ๋ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ํ๋ ์์ํฌ๋ก ์๋ํฉ๋๋ค.
OAuth์ ๊ตฌ์ฑ ์์
- Resource Owner : ๋ง ๊ทธ๋๋ก ๋ฆฌ์์ค ์์ ์์ด๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ๋๋ค.
- Resource Server : ์ฌ์ฉ์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์ ๊ณตํด์ฃผ๋ ์๋ฒ๋ก, ๊ตฌ๊ธ์ด๋ ํ์ด์ค๋ถ๊ณผ ๊ฐ์ ํ๋ซํผ์ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
- Client : ๋ฆฌ์์ค์ ์ ๊ทผํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค
- Authorization Server : ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์๋ฒ์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ํ์ํ Access Token์ ์ ๊ณตํ๋ ์๋ฒ์ ๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ๊ธฐํ์ ์ค์์ฑ์ ๋ํด์ ํฌ๊ฒ ๊นจ๋ซ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ธฐํ์ ์์ฑ๋๊ฐ ๊ฐ๋ฐ ์งํ ์๋์ ๋ง์ ๊ด์ฌ๋ฅผ ํ๋ค๋ ๊ฑธ ๋๋ ํ๋ก์ ํธ ์์ต๋๋ค. ํ๋ก ํธ์๋, ๋์์ด๋ ๋ถ๋ค๊ณผ ํ์ ํ ์ ์์๋ ์ข์ ๊ธฐํ์์ต๋๋ค. ๋งค์ฃผ ํ์๋ฅผ ํตํด ์๋ก ํ์ํ ๋ถ๋ถ์ ๋ํด์ ๋ํ๋ฅผ ๋๋๊ณ ์ค๋ฅ๋ฅผ ๊ฐ์ด ํด๊ฒฐํด ๋๊ฐ๋ ์ฆ๊ฑฐ์ด ๊ฒฝํ์ ํ ์ ์์์ต๋๋ค. ์ถํ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ถ, ๋์์ด๋๋ถ๋ค๊ณผ ์์ฌ์ํต์ ํ๋๋ผ๋ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ๊ฒฝํ์ผ์ ์์ฌ์ํต์ ์ ์ด์ด๋๊ฐ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ ์ฒ์์ผ๋ก ๋์ ํ๋ ๊ธฐ์ ๋ค์ด ์ฌ๋ฌ๊ฐ ์์์ต๋๋ค. Open Api Specification๋ฅผ ํตํด API ๋ฌธ์ ์๋ํ๋ฅผ ๋์ ํ๋ค๋๊ฐ Github Action์ ํตํ CI/CD ๊ตฌํ ๋ฑ๋ฑ ์ฒ์ ๋ค๋ฃจ๋ ๊ธฐ์ ๋ค์ด๋ผ ์กฐ๊ธ ๋ง์ด ์ํด์์ง๋ง, Open Api Specification์ ํ๋ก ํธ์๋ ๋ถ๋ค์ด ๋๋ฌด ์์ฌ์ฉํด์ฃผ์ ์ ์์ฒญ๋ ๋ฟ๋ฏํจ์ ๋๋ ์ ์์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ๋ฐํ์ผ๋ก ๋์ฑ ๋ ์ฑ์ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ฐฑ์๋ ์ด๊ด์ด๋ผ๋ ์ญํ ๋ก ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์ด๋์์ง๋ง ๋ง์ด ๋ถ์กฑํ ์ ๋ฅผ ๋๋ฌด๋๋ ์ ๋ฐ๋ผ์ฃผ์ ์ ๊ฐ์ฌํ์ต๋๋ค. ์ ์ ํจ๊ป ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํด์ฃผ์ ์ฐ๋ฆฌ ๋ฎค๋ํ ๋ถ๋ค!! ํ๋ก ํธ, ๋ฐฑ์๋, ๋์์ด๋๋ถ๋ค ๋๋ฌด๋๋ ๊ณ ์๋ง์ผ์ จ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์ด๋ฒ Mudig ํ๋ก์ ํธ๋ฅผ ํตํด ์ํํ ์์ฌ์ํต์ ์ค์์ฑ๊ณผ ํ์ํฌ์ ํ์ ๋ค์ ํ๋ฒ ๋๋ ์ ์์์ต๋๋ค. ๋งค์ฃผ ํ์๋ฅผ ํตํ ์ํต์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋๋ฐ ๋ณ์๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์ ์ํ ํด๊ฒฐ์ ๊ฐ๋ฅ์ผ ํ์๊ณ , ์ด๋ ๊ธฐํ์ ์์ฑ๋๋ฅผ ๋์ด๋ ์ค์ํ ๊ณผ์ ์ด์์ต๋๋ค. ํ๋ก์ ํธ ์งํ ์ํฉ, ์์ ์ผ์ , ์ค๋ฅ ๋ฑ์ ์ํตํจ์ผ๋ก์จ ๊ธฐํ์ ๋ณด๋ค ์ธ๋ฐํ๊ฒ ๊ณํํ๊ณ ์งํํ ์ ์์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์ ๋งก์ ๊ธฐ๋ฅ์ ์ด์ ์ ์๋ํด๋ณด์ง ์์๋ ์ฌ์ฉ์ ๊ธฐ๋ฅ์ด์์ต๋๋ค. ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ์์ ๋ก๊ทธ์ธ(์นด์นด์ค, ๊ตฌ๊ธ), ์ด๋ฉ์ผ ์ธ์ฆ๋ฒํธ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ, ํ์ํํด ๊ธฐ๋ฅ์ ๋ด๋นํ๊ฒ ๋์๊ณ , ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๊ธฐ๋ฅ์ ๋ํ ๋ก์ง์ ํ๋ฆ์ ์ ํํ ์ดํดํ๊ฒ ๋์์ต๋๋ค. ์ฌ์ฉ์์ ๊ธฐ๋ฅ์์ ๋ํ ์ผํ๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ถ๋ถ์ด ์๊ฐ๋ณด๋ค ๋ง์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ๋กํ ์ด๋ฏธ์ง, ๋๋ค์, ์๊ฐ, ์ฅ๋ฅด ๋ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ๋ ์ด๋ฏธ์ง์ ์กด์ฌ ์ฌ๋ถ์ ์๋ชป๋ ์ ๋ณด์ ๋ํ ์ฒ๋ฆฌ ๋ฑ ๋ํ ์ผํ ๋ถ๋ถ์ ๊ณ ๋ คํ์ฌ ๊ตฌํํ์์ต๋๋ค. ๋ํ ํ๋ก ํธ์๋ ํ๊ณผ์ ์์ฌ์ํต์ ํตํด ํ๋ก ํธ์๋์์ ๋ณด์ฌ์ง ์๋ต ๋ฉ์์ง์ ๋ํ ์ผํ ๋ถ๋ถ๋ ๊ณ ๋ คํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋์์ต๋๋ค. ํ๋ก ํธ์๋ ํ๊ณผ์ ํ์ ์ ํตํด ์ฝ๋ ์์ ์ฌํญ์ ๋น ๋ฅด๊ฒ ํ์ธํ๊ณ ๋ฐ์ํ ์ ์์์ผ๋ฉฐ, ์ด๋ฌํ ๋น ๋ฅธ ํผ๋๋ฐฑ๊ณผ ํ์ ์ ๊ฐ๋ฐ ์๋๋ฅผ ํฅ์์ํค๊ณ ์์ฑ๋๋ฅผ ๋์ผ ์ ์์์ต๋๋ค. ์ฒ์์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋งก๋ ๊ฒ์ ๋ํ ๊ฑฑ์ ์ด ์์์ง๋ง, ์ด๋ ค์ ๋ ๋ถ๋ถ์์ ์์ ์ ํํธ๊ฐ ์๋์๋ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋๋ก ๋์์ฃผ๋ ํ์๋ค์ด ์์๊ธฐ์ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๋๊น์ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ ์ ์์์ต๋๋ค. ์ฐ๋ฆฌ ๋ฐฑ์๋ ํ์๋ค ๊ฐ์ฌํฉ๋๋ค !! ๋ง์ง๋ง์ผ๋ก ๋์์ด๋ ํ, ํ๋ก ํธ์๋ ํ, ๋ฐฑ์๋ ํ Mudig ๊ตฌ์ฑ์ ๋ชจ๋ ์๊ณ ํ์ จ๊ณ ํ๋ก์ ํธ ํ๋ ๋์ ํ๋ณตํ์ต๋๋ค !!
์ด๋ฒ ๋ฎค๋ ํ๋ก์ ํธ๋ฅผ ๋์์ด๋, ํ๋ก ํธ์๋ ๋ถ๋ค๊ณผ ํจ๊ป ์งํํ๋ฉด์ ํ์ ์ ์ํต์ด ์ค์ํ๋ค๋ ๊ฒ์ ๋ค์ ํ๋ฒ ๋ฐฐ์ ์ต๋๋ค. ๋งค์ฃผ ๋ค ๊ฐ์ด ๋ชจ์ฌ์ ํ์๋ฅผ ๊ฐ์ด ์งํํด๋ ๊ธฐ๋ฅ ํ๋ํ๋๋ฅผ ๋ง๋ค์ด๊ฐ๋ ๊ณผ์ ์์๋ ๋น ๋ฅธ ์ํต๊ณผ ํผ๋๋ฐฑ์ด ํ์ํ๋๋ฐ ์ฒ์์๋ ์ด ๋ถ๋ถ์ด ์ฝ์ง ์์์ง๋ง ํ๋ก์ ํธ๊ฐ ์งํ๋ ์๋ก ์๋ก์ ํํธ์ ์ดํด๋๊ฐ ์๊ธฐ๋ฉด์ ์ ์ฐํ๊ฒ ์์ ์ ์งํํ ์ ์์์ต๋๋ค. ๋ํ ์์ธํ ๊ธฐํ์ ์ค์์ฑ์ ์๊ฒ ๋์์ต๋๋ค. ์ฒ์์๋ ์๋ฒฝํด ๋ณด์๋ ๊ธฐํ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ฌ๋ฌ ๋ฒ ์์ ๋๋ ๊ฑธ ๊ฒฝํํ๋ฉด์ ์ฒ์๋ถํฐ ์๋ฒฝํ์ง ์์๋ ๋ํ ์ผํ ์์๋ค์ ์์ธํ๊ฒ ๊ธฐํํ๋ ๊ฒ์ด ์ด๋ฐ์๋ ์๊ฐ์ด ์์๋๋๋ผ๋ ๊ธธ๊ฒ ๋ณด๋ฉด ํจ์จ์ ์ธ ์งํ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค.์ด๋ฒ ํ๋ก์ ํธ์์ ๊ฒ์๊ณผ ๋๊ธ๊ณผ ๋๋๊ธ CRUD, ํ๋ ์ด๋ฆฌ์คํธ ์ข์์ ๊ธฐ๋ฅ์ ๋ด๋นํ๊ฒ ๋์๋๋ฐ ์ฒ์์๋ ์ง๋ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ฝ๋๋ค๊ณผ ๋ณ๋ค๋ฅผ ๊ฒ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ง๋ง ๋ง์ ์์ ์ ์งํํ ์๋ก ๊ฐ์ ๋ฉ์๋๋ฅผ ๋น์ทํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ผ๋ ๋ํ ์ผ์ด ๋งค์ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์์ผ ๋๊ผ์ต๋๋ค.๋์์ด๋, ํ๋ก ํธ์๋ ๋ถ๋ค๊ณผ ํ์ ํ ํ๋ก์ ํธ๋ ์ด๋ฒ์ด ์ฒ์์ธ๋ฐ ๋๋ฌด๋๋ ๋ฐ์ด๋์ ํ์๋ถ๋ค์ ๋ง๋์ ์ ๋ฅ๋ ฅ ์ด์์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ ์ ์์์ต๋๋ค. ๋ถ์กฑํ ์ ์ค๋ ฅ์๋ ๋ฉ์ง ํ๋ก์ ํธ์ ๋ง์ง๋ง๊น์ง ์์ฃผํ ์ ์๊ฒ ๋์์ฃผ์ ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค!
์ฒ์์ผ๋ก ํ๋ก ํธ์๋, ๋์์ด๋ ๋ถ๋ค๊ณผ ํ์ ์ผ๋ก ์งํํ๋ ํ๋ก์ ํธ์๊ณ , ๋ถํธ์บ ํ๊ฐ ์๋ ์์จ์ ์ผ๋ก ์ฐธ์ฌํ๋ ํ๋ก์ ํธ ์์ต๋๋ค. ๊ทธ๋์ ์ค๋ ฅ์ ๋ํด ์์ ๊ฐ์ด ๋ง์ด ๋ถ์กฑํด์ "๋ด๊ฐ ์ค์ํ๊ฑฐ๋ ๋ชปํ๋ฉด ์ด๋กํ์ง" ๋ผ๋ ๊ฑฑ์ ์ด ์์ฐ๋๋ฐ ํ์๋ค์ ๊ฒฉ๋ ค๋ก ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ฒ ๋์๊ณ , ๊ฒฐ๋ก ์ ์ผ๋ก ํ์ธต ๋ ์ฑ์ฅํ ์ ์๋ ๊ฒฝํ์ ์ป์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๊ฐ ๋งก์ ํฌ์ง์ ์ ํ๋กํ CRUD, ํ๋ก์ฐ ๊ธฐ๋ฅ, ์กฐํ ๊ธฐ๋ฅ ๋ฑ์ด ์์ต๋๋ค. ์ฒ์ ํฌ์ง์ ์ ๋ถ๋ฐฐํ ๋ ์ ์ ํด๋ดค๋ ๋ก๊ทธ์ธ, ํ์๊ฐ์ ์ ํ๋ ค๊ณ ํ์ผ๋, ํ์๋ค์ ๊ถ์ ์ ์๋ก์ด ๊ฒ์ ๋์ ํ๋ ๊ฒ์ด ์ข ๋ ํฅ๋ฏธ๋กญ๊ณ ์ฑ์ฅํ๋๋ฐ ๋์์ด ๋ ๊ฒ ๊ฐ์ ์์ ๊ฐ์ ํฌ์ง์ ์ ๋งก์์ต๋๋ค.
์ด๋ ค์ ๋ ์ ์ ํ๋กํ ์์ ๋ถ๋ถ์์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฅ๊ณ s3์ ์ ์ฅํ๋๋ก ํ๋๋ฐ ์ด ๋ถ๋ถ์ ํ์๋ถ์ ๋์์ด ์์์ผ๋ฉด ์ฌ์ฉํ์ง ๋ชปํ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค๋๋ ํ๋ก ํธ์๋ ๋ถ๋ค์ ์๊ตฌ์ ๋ถํฉํ๋๋ก ๋์์๋ ์์ ์์ ์ด ํ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ด๋ ค์ด ์ ์ ๋งค ์ฃผ ํ์๋ฅผ ํตํ ์๊ฒฌ์ํต๊ณผ ํฉ์์ ์ ์ฐพ์๊ฐ๋ฉด์ ์ ์ฐจ ๋ง์ถฐ๋๊ฐ๋ ๊ณผ์ ์ด ์์๊ธฐ ๋๋ฌธ์ ํ ๋ค๊ธฐ๋ณด๋ค๋ ์คํ๋ ค ์์ ํ ์ํ๋ ๋ฐฉํฅ๋๋ก ์ฝ๋๊ฐ ๋์ํ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ชจ์์ ๊ฐ์ถฐ๋๊ฐ๋ ๋ถ๋ถ์์ ํฐ ํฌ์ด๊ฐ๊ณผ ์ฆ๊ฑฐ์์ ๋๋ ์ ์์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋งํ ๋๋ง๋ค ํจ๊ป ํด๊ฒฐํด์ฃผ๋ ค๋ ์ฐ๋ฆฌ ๋ฐฑ์๋ ํ์๋ถ๋ค๊ณผ ์ ๊ทน์ ์ผ๋ก ์ํต ํด์ฃผ์ ํ๋ก ํธ์๋, ๋์์ด๋๋ถ๋ค ์ ๋ง ์๊ณ ๋ง์ผ์ จ์ต๋๋ค!
ํญ์ ํ ํ๋ก์ ํธ๋ฅผ ํจ์ผ๋ก์จ ๋๋ผ๋ ๊ฑฐ๋ ์์ฌ์ํต์ ์ค์์ฑ์ธ ๊ฑฐ ๊ฐ๋ค. ์ฒ์์ผ๋ก ํ๋ก ํธ์๋ ๋ถ๋ค๊ณผ ๋์์ด๋๋ถ๋ค๊ณผ ํ์ ํ์ฌ ์งํํ์๋๋ฐ ์์ฌ์ํต์ด ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ์์ง๋ง ์๊ฐ๋ณด๋ค ๋ ๋ง์ ์์ฌ์ํต์ด ํ์ํ๊ณ , ๊ธฐํ์์ ์ญํ ๋ํ ์ค์ํ๋ค๊ณ ์๊ฐํ์์ต๋๋ค. ๋ชจ๋๊ฐ ๊ธฐํ์๊ฐ ๋์ด ํ์ ์์์ ๋ฐ๋ผ ์งํํ ์ ์ ๋ง์กฑํ๊ณ ์๋ค. ์งํํ๋ฉด์ ๋งค์ฃผ ํ์ ๋ํ ๋ง์กฑ์ค๋ฌ์ ๋ค. ํ์์ ์ํต์ ํจ์ผ๋ก์จ ํ๋ก ํธ์๋ ๋ถ๋ค๊ณผ ๊ธฐ์ ์ ์ผ๋ก ํ์ํ ๋ถ๋ถ์ ์ ๋ฌํด์ฃผ๋ ๊ณผ์ ์์ ์ฆ๊ฑฐ์์ ์ป์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ์ ๋ฌด๋ฅผ ๋๋๋ฉด์ ๊ฐ ํํธ๊ฐ ์ง๋ฉดํ๋ ์ด๋ ค์๊ณผ ์ฆ๊ฑฐ์์ ์ดํดํ ์ ์์์ต๋๋ค. API์ ์ฐ๋ํ๋ฉฐ ๋ฐฑ์๋์ ์ญํ ๊ณผ ํ๋ก ํธ์๋์ ๋์ ์๋ฆฌ๋ฅผ ๋ ์์ธํ ์ดํดํ ์ ์์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ฐ๋ฆฌ ๋ฐฑ์๋ ํ, ํ๋ก ํธ์๋ํ, ๋์์ธํ ๋ค๋ค ๋๋ฌด ๊ณ ์ํ์ จ์ต๋๋ค.
ChatGPT๋ OpenAI๊ฐ ๊ฐ๋ฐํ GPT-3.5 ๊ธฐ๋ฐ์ ย ๋ํ ์ธ์ด ๋ชจ๋ธ(large language model, LLM)ย ์ฑ๋ด์ ๋ปํฉ๋๋ค. ChatGPT๋ ๋ํ ํํ๋ก ์ํธ์์ฉ์ ํ๋ฉฐ ๋๋ผ์ธ ์ ๋๋ก ์ธ๊ฐ๊ณผ ๋ํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐ์์ ์ ๊ณตํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
API ์ฌ์ฉ์ ์ ๋ฃ์ด๋ฉฐ, ๋ํ์ ์ฌ์ฉ๋ ํ ํฐ(Tokens)์ ํฌ๊ธฐ(1,000ํ ํฐ ๋น $0.002(์ฝ 3์))์ ๋ฐ๋ผ ๊ณผ๊ธ๋ฉ๋๋ค.
- API ์ฌ์ฉ์๊ธ
- Model: gpt-3.5-turbo
- Usage: $0.002 / 1K tokens
์์ ์ฝ๋
import openai
openai.api_key = '${API_KEY}'
# ๋ชจ๋ธ - GPT 3.5 Turbo ์ ํ
model = "gpt-3.5-turbo"
# ์ง๋ฌธ ์์ฑํ๊ธฐ
query = "Django์ ๋ํด์ ๊ณต๋ถ๋ฅผ ์์ํ๋ ค๋๋ฐ, ๊ณํ ์ข ์ธ์์ค"
# ๋ฉ์์ง ์ค์ ํ๊ธฐ
messages = [
{"role": "system", "content": "๋๋ ๊ณต๋ถ ๊ณํ์ ์ธ์์ฃผ๋ ์คํฐ๋ ํ๋๋์ผ"},
{"role": "user", "content": query}
]
# ChatGPT API ํธ์ถํ๊ธฐ
response = openai.ChatCompletion.create(
model=model,
messages=messages
)
answer = response['choices'][0]['message']['content']
print(answer)
๊ฒฐ๊ณผ
Django์ ๋ํ ๊ณต๋ถ ๊ณํ์ ์ธ์๋ณด๊ฒ ์ต๋๋ค. ์๋๋ ์์์
๋๋ค.
1. Django ๊ฐ์ ๋ฐ ์ค์น
- Django์ ๊ฐ๋
๊ณผ ํน์ง์ ํ์ตํฉ๋๋ค.
- Django๋ฅผ ์ค์นํ๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํฉ๋๋ค.
2. Django ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ์น ๊ฐ๋ฐ ๊ธฐ์ด
- Django ํ๋ก์ ํธ์ ์ฑ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํฉ๋๋ค.
- URL ํจํด, ๋ทฐ, ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ์น ํ์ด์ง๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
3. Django ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Django์ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
์ ์์
ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
4. Django ๊ด๋ฆฌ์ ํ์ด์ง
- Django์ ๋ด์ฅ๋ ๊ด๋ฆฌ์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ปค์คํ
๋ชจ๋ธ ๊ด๋ฆฌ์ ๋ฐ ์ธ์ฆ๊ณผ ๊ถํ ์ค์ ์ ํ์ตํฉ๋๋ค.
5. Django ํผ๊ณผ ์ฌ์ฉ์ ์ธ์ฆ
- Django ํผ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์
๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค.
- Django์ ์ฌ์ฉ์ ์ธ์ฆ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ์ฌ์ฉ์ ๋ก๊ทธ์ธ, ํ์๊ฐ์
, ๋ก๊ทธ์์ ๋ฑ์ ๊ตฌํํฉ๋๋ค.
6. Django ํ
ํ๋ฆฟ๊ณผ ์ ์ ํ์ผ
- Django ํ
ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑํฉ๋๋ค.
- ์ ์ ํ์ผ(์ด๋ฏธ์ง, CSS, JavaScript ๋ฑ)์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
7. Django REST framework๋ฅผ ์ด์ฉํ API ๊ฐ๋ฐ
- Django REST framework๋ฅผ ์ฌ์ฉํ์ฌ RESTful API๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
- API์ ๋ํ ์ธ์ฆ, ๊ถํ ์ค์ ๋ฑ์ ๊ตฌํํฉ๋๋ค.
8. Django ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ฉ
- ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์กฐ์ ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
9. Django ํ
์คํธ ๋ฐ ๋๋ฒ๊น
- Django์ ํ
์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ํ
์คํธ๋ฅผ ์์ฑํฉ๋๋ค.
- ๋๋ฒ๊น
๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ค๋ฅ๋ฅผ ์ฐพ์ ์์ ํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
10. Django ๋ฐฐํฌ์ ์ด์
- Django ํ๋ก์ ํธ๋ฅผ ์๋น์ค ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
- ์๋ฒ ์ค์ , ๋ณด์ ๊ฐํ, ์ฑ๋ฅ ํฅ์์ ์ํ ์ต์ ํ ์์
์ ์ํํฉ๋๋ค.
์ด๋ ๊ฒ ๊ณํ์ ์ธ์๋ณด์๊ณ , ๊ฐ ๋จ๊ณ๋ง๋ค ํ์ํ ์ฐธ๊ณ ์๋ฃ๋ ์ฑ
์ ๊ตฌํด์ ๊ณต๋ถํ์๋ฉด ๋ฉ๋๋ค. ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค!
Karlo API๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฌธ์ฅ๊ณผ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์์ฑํ ์ธ๊ณต์ง๋ฅ(Artificial Intelligence, AI) Karlo๋ 3์ต ์ฅ ๊ท๋ชจ์ ์ด๋ฏธ์ง-ํ ์คํธ ํ์ต์ ํตํด ์ฌ์ฉ์๊ฐ ๋ฌ์ฌํ ๋ด์ฉ์ ์ดํดํ๊ณ , ํฝ์ ๋จ์๋ก ์์ ํ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํฉ๋๋ค. ๋ํ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ฝ์ ํธ์ ๋ง์ถฐ ์ฐฝ์ ํ๋์ ํ ์ ์๋๋ก ์ฌ๋ฌผ, ๋ฐฐ๊ฒฝ, ์กฐ๋ช , ๊ตฌ๋, ๋ค์ํ ํํ์ ์ง์ํฉ๋๋ค.
์ด์ฉ ์ ํ
์๊ฐ | ์ ํ |
---|---|
๋ถ๋น | ๊ฒฐ๊ณผ ์์ฑ ์ ๊ธฐ์ค 30๊ฑด |
์ผ๊ฐ | ๊ฒฐ๊ณผ ์์ฑ ์ ๊ธฐ์ค 3,000๊ฑด |
์๊ฐ | ๊ฒฐ๊ณผ ์์ฑ ์ ๊ธฐ์ค 600,000๊ฑด |
์์ ์ฝ๋
# REST API ํธ์ถ, ์ด๋ฏธ์ง ํ์ผ ์ฒ๋ฆฌ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
import requests
import json
import urllib
from PIL import Image
# [๋ด ์ ํ๋ฆฌ์ผ์ด์
] > [์ฑ ํค] ์์ ํ์ธํ REST API ํค ๊ฐ ์
๋ ฅ
REST_API_KEY = '${REST_API_KEY}'
# ์ด๋ฏธ์ง ์์ฑํ๊ธฐ ์์ฒญ
def t2i(prompt, negative_prompt):
r = requests.post(
'https://api.kakaobrain.com/v2/inference/karlo/t2i',
json = {
'prompt': prompt,
'negative_prompt': negative_prompt
},
headers = {
'Authorization': f'KakaoAK {REST_API_KEY}',
'Content-Type': 'application/json'
}
)
# ์๋ต JSON ํ์์ผ๋ก ๋ณํ
response = json.loads(r.content)
return response
# ํ๋กฌํํธ์ ์ฌ์ฉํ ์ ์์ด
prompt = "A cat with white fur"
negative_prompt = "sleeping cat, dog, human, ugly face, cropped"
# ์ด๋ฏธ์ง ์์ฑํ๊ธฐ REST API ํธ์ถ
response = t2i(prompt, negative_prompt)
# ์๋ต์ ์ฒซ ๋ฒ์งธ ์ด๋ฏธ์ง ์์ฑ ๊ฒฐ๊ณผ ์ถ๋ ฅํ๊ธฐ
result = Image.open(urllib.request.urlopen(response.get("images")[0].get("image")))
result.show()
๊ฒฐ๊ณผ
YouTube Data API๋ฅผ ์ฌ์ฉํ๋ฉด YouTube ์น์ฌ์ดํธ์์ ์ผ๋ฐ์ ์ผ๋ก ์คํ๋๋ ๊ธฐ๋ฅ์ ์์ ์ ์น์ฌ์ดํธ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ ์ ์์ต๋๋ค. ์๋ ๋ชฉ๋ก์ API๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ํ ์ ์๋ ๋ค์ํ ์ ํ์ ๋ฆฌ์์ค๋ฅผ ์๋ณํฉ๋๋ค. API๋ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ๋๋ถ๋ถ ์ฝ์ , ์ ๋ฐ์ดํธ, ์ญ์ ํ๋ ๋ฉ์๋๋ ์ง์ํฉ๋๋ค.
API Reference ย |ย YouTube Data API ย |ย Google for Developers
API ํธ์ถ
-
๋ชจ๋ ์์ฒญ์ API ํค (
key
ย ๋งค๊ฐ๋ณ์ ํฌํจ)๋ฅผ ์ง์ ํ๊ฑฐ๋ OAuth 2.0 ํ ํฐ์ ์ ๊ณตํด์ผ ํฉ๋๋ค. API ํค๋ ํ๋ก์ ํธ์ย Developer Console์ ์๋ย API ์ก์ธ์คย ์ฐฝ์์ ํ์ธํ ์ ์์ต๋๋ค. -
๋ชจ๋ ์ฝ์ , ์ ๋ฐ์ดํธ, ์ญ์ ์์ฒญ์ ๋ํดย ๋ฐ๋์ย ์น์ธ ํ ํฐ์ ์ ์กํด์ผ ํฉ๋๋ค. ๋ํ ์ธ์ฆ๋ ์ฌ์ฉ์์ ๋น๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ชจ๋ ์์ฒญ์ ๋ํด ์ธ์ฆ ํ ํฐ์ ๋ณด๋ด์ผ ํฉ๋๋ค.
๋ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ์ผ๋ถ API ๋ฉ์๋๋ ์ธ์ฆ์ด ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ํ๊ฑฐ๋ ์์ฒญ์ด ์ธ์ฆ๋ ๋ ์ถ๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์ ๋ก๋ํ ๋์์์ ๊ฒ์ํ๋ ์์ฒญ์๋ ํน์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ์ธ์ฆํ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ ๋์์๋ ํฌํจ๋ ์ ์์ต๋๋ค.
-
API๋ OAuth 2.0 ์ธ์ฆ ํ๋กํ ์ฝ์ ์ง์ํฉ๋๋ค. OAuth 2.0 ํ ํฐ์ ๋ค์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
2023๋ 12์ 31์ผ๋ถํฐ 2024๋ 1์ 4์ผ๊น์ง ์ด 5์ผ ๊ฐ ์ฝ 40๋ช ์ ์ ์ ๋ถ๋ค๋ก ๋ถํฐ ๋ฎค๋์ด ๋ณด์ํด์ผํ ์ ๊ณผ ๊ฐ์ ํด์ผํ ์ ๋ฑ์ ๋ํด์ ์๊ฒฌ์ ๋ฐ์๋ณด์์ต๋๋ค.
์ ๊ทน์ ์ผ๋ก ํ ์คํธ์ ์ํด์ฃผ์๊ณ ์ ํฌ ํ๋ก์ ํธ๊ฐ ๋ฐ์ ํ ์ ์๋๋ก ์ข์ ํผ๋๋ฐฑ์ ์ฃผ์ ๋ชจ๋ ๋ถ๋ค์๊ฒ ๊ฐ์ฌ์ธ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค!
์ ํฌ๊ฐ ์ฌ์ฉ์ ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ๋ก ํ ๋ชฉ์ ์ ํผ๋๋ฐฑ์ ์์งํ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์งํ์ค์ธ ํ๋ก์ ํธ์์ ์ด๋ค ๋ถ๋ถ์ด ์ฑ๊ณต์ ์ธ์ง, ๊ฐ์ ์ด ํ์ํ ๋ถ๋ถ์ ์ด๋์ธ์ง ํ์ ํ๋๋ฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ค์ํ ์๊ฐ์์ ๋ฐ๋ผ๋ณผ ์ ์๊ฒ ํด์ค ๋ฟ๋ง์๋๋ผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ธ ๋ถ๋ถ์ ๊ฐ์ ํ๋ ๋ฐ ์์ด ์ข์ ํจ๊ณผ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์์ต๋๋ค.
์ ํฌ๋ ์ฌ์ฉ์๋ถ๋ค์ ์๊ฒฌ์ ์ฝ๊ฒ ์์งํ ์ ์๋๋ก Google Forms์ ์ด์ฉํ์์ต๋๋ค.
์ ํฌ๋ ์๋ ์ด์ ๋ฅผ ๊ทผ๊ฑฐ๋ก, ํ์คํ๋ ๋ถ๋ฅ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
1. ์ฌ์ฉ์ ๋ฌธ์ ์ ๋ํ ์๋ต ์๊ฐ ๋จ์ถ
2. ๋ฌธ์ ์ ๋ํด ํ์คํ๋ ์ฐ์ ์์ ์ ์ฉ
3. ํ์ ๋ ์์์ ๊ฐ์ฅ ํ์ํ๊ณ ์ํฅ์ด ํฐ ๋ณ๊ฒฝ ์์
์ ํฌ์
4. ์์ฒญ๋ ์์
์ด ๋ฏธ์ฒ๋ฆฌ ์ํ๋ก ๊ณ์ ๋จ์ ์๋ ๊ฒ์ ๋ฐฉ์ง
ํผ๋๋ฐฑ์ผ๋ก ๋ฐ์ ๋ฌธ์ ๋ฅผ ์๋ 3๊ฐ์ง ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด ๊ตฌ์ฒด์ ์ธ ์๊ตฌ์ฌํญ์ ์ ์ํ์์ต๋๋ค.
1. ์ด ๋ฌธ์ ๊ฐ ์ ํจํ๊ฐ?
2. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋๊ฐ?
3. ์ด ๋ฌธ์ ๊ฐ ์ผ๋ง๋ ์ค์ํ๊ฐ?
์ด๋ฌํ ์ง๋ฌธ์ ํตํด ์กฐ์น ๊ฐ๋ฅํ ์ฌ์ฉ์ ํผ๋๋ฐฑ๊ณผ ์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ๊ฑฐ๋ ๋ฌด์ํ ์ ์๋ ํผ๋๋ฐฑ์ ๊ตฌ๋ถํ๋๋ฐ ํฐ ๋์์ด ๋์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ ํจํ๊ฐ?
์ข์ ์๋๋ฅผ ๊ฐ์ง๊ณ ํผ๋๋ฐฑ์ ์ฃผ์ จ์ง๋ง, ์ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ๊ด๋ จ์ด ์๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ค๋ช ํ๋ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ํด๊ฒฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ํผ๋๋ฐฑ์ผ๋ก ์ ์๋ ๋ฌธ์ ๋ฅผ ํ๊ฐํ ๋ '์ ๋ขฐํ๋ ํ์ธ'ํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๋๊ฒ ์ข๊ฒ ๋ค ํ๋จํ์์ต๋๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋๊ฐ?
ํผ๋๋ฐฑ์ ์ ์ฉํ ์ ์๋ค๊ณ ํ๋จํ๋ค๋ฉด ํผ๋๋ฐฑ์ด ์กฐ์น ๊ฐ๋ฅํ์ง ์ ํ๋ ๊ฒ์ด ๋ค์ ์์์์ต๋๋ค. ์๋ ์ธ๊ฐ์ง๋ฅผ ๊ทผ๊ฑฐ๋ก ํ๋จํ์์ต๋๋ค.
1. ์ค๋ณต๋์ง ์์ ์ง
2. ์ฌํ์ด ๊ฐ๋ฅํ ์ง
3. ๋ฒ์๊ฐ ์ ํด์ ธ์๋ ์ง
๋ฒ์๊ฐ ๋๋ฌด ํฌ๊ฑฐ๋ ๋ง์ฐํ ํผ๋๋ฐฑ์ผ ๊ฒฝ์ฐ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋ ํผ๋๋ฐฑ์ด ์๋๋ผ ํ๋จํ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ผ๋ง๋ ์ค์ํ๊ฐ?
๋ง์ง๋ง์ผ๋ก๋ ํผ๋๋ฐฑ์ ์กฐ์น ์ฐ์ ์์๋ฅผ ์ ํ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์ผ๋ง๋ ์ค์ํ์ง, ์ผ๋ง๋ ๋นจ๋ฆฌ ํด๊ฒฐํด์ผ ํ๋์ง๋ฅผ ๊ทผ๊ฑฐ๋ก ํ๋จํ์์ต๋๋ค. ์ ํฌ์ ๊ฒฝ์ฐ 5๋จ๊ณ๋ก ๋ฌธ์ ๋ฅผ ๊ตฌ๋ถํ์์ต๋๋ค.
- ๊ฒ์ ๊ฒฐ๊ณผ - ์์ ์ฐพ๊ธฐ ์ถ๊ฐ
- ํ๋ฆฌ/์ ์ ๊ฒ์ ๋ฟ๋ง ์๋๋ผ ์์ ๊ฒ์๋ ๊ฐ๋ฅํ๊ฒ ๋์๊ณ , ์ฌ์ฉ์๋ค์ ํน์ ์์ ์ ๊ฒ์ํ์ฌ ์์ ์ ํ๋ ์ด๋ฆฌ์คํธ์ ํด๋น ์์ ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ด๋ก์จ ๋ ๋ค์ํ ์์ ๊ฒฝํ๊ณผ ์์ ๋ง์ ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๋ง๋ค ์ ์๋ ์ฆ๊ฑฐ์ด ๊ฒฝํ์ ๋๋ ์ ์๊ฒ ๋์์ต๋๋ค.
- ์์ ์์ฑ ๊ฒฐ๊ณผ 7~10๊ฐ ๋๋ค์ผ๋ก ๋ณ๊ฒฝ , ๋ฎค๋น ์ ๋ชฉ 15์ ์ด๋ด๋ก, ์ค๋ช ์ 3์ค ์ด๋ด๋ก
- ๊ธฐ์กด 5๊ฐ๋ก ๊ณ ์ ๋์ด ์๋ ์์ ์ ์๋ฅผ ์ต๋ 10๊ฐ๋ก ๋๋ฆฌ๊ณ 7~ 10๊ฐ ์ฌ์ด๋ก ๋๋ค ๊ฐฏ์๋ฅผ ๋ถ์ฌํจ์ผ๋ก์จ ๋ฑ๋ฑํ ๋๋์ ๋ฒ์ด๋ ํ๋ ์ด๋ฆฌ์คํธ ์์ฑ ๊ฒฝํ์ ๋ ๋ค์ฑ๋กญ๊ณ ์๋๊ฐ ์๊ฒ ๋ณ๊ฒฝํ์์ต๋๋ค.
- ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๊ธฐ๋ฅ ์ถ๊ฐ
- ์ ์ ๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์์ด๋ฒ๋ ธ์ ๋ ๋๋นํ์ฌ, ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. ์ด์ ์ ์ ๋ค์ ์์ ์ ๊ณ์ ์ ์ฐ๊ฒฐ๋ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํตํด ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณต๊ตฌํ๊ณ ์ฌ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ ๋ค์ด ๋ถํธํจ ์์ด ๊ณ์ ์ ์ ์ํ ์ ์๋๋ก ๋ณ๊ฒฝํ์์ต๋๋ค.
- ํ๋ ์ด๋ฆฌ์คํธ ์ธ๋ค์ผ ์ด๋ฏธ์ง ๋ณ๊ฒฝ ์ถ๊ฐ
- ์ ์ ๋ค์ ์ธํฐ๋ ํฐ๋ธํ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ์์ฑ๋ ํ๋ ์ด๋ฆฌ์คํธ ์ธ๋ค์ผ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค.