๋จผ์ ํผ์ด ์์ ํ๊ฒ ์ ์ถ๋์์ ๋ ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์์ ๊ฒ์ด๋ค.
์ฅ์ : ํผ์ด ์์ ํ๊ฒ ์ ์ถ๋ ๋ค์ ์ ํจ์ฑ ๊ฒ์ฆ์ ํ ๋์๋ ์ฌ์ฉ์๊ฐ ์ ํจํ ๊ฐ์ ์ ๋ ฅํ๊ฒ ํ ์ ์๋ค. ๋ค์ ๋งํ์๋ฉด ์ฌ์ฉ์๊ฐ ์ด๋ฉ์ผ ์ ๋ ฅ ์นธ์ ์ ๋ ฅํ๋ ์ค์ ์์ ํ ์ ๋ ฅํ์ง๋ ์์๋๋ฐ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ง ์์ ์ ์๋ค๋ ์ด์ผ๊ธฐ๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅ์ ๋ง์น ๋๊น์ง ์ถฉ๋ถํ ๊ธฐ๋ค๋ฆฐ ๋ค์ ํผ์ ์ ์ถ ํ๊ณ ์๋ฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ฏ๋ก ๋ถํ์ํ ๊ฒฝ๊ณ ๋ฅผ ์ค์ผ ์ ์์ด์ ๊ฝค ๊ด์ฐฎ์ ๋ฐฉ๋ฒ์ด๋ผ ํ ์ ์๋ค.
๋จ์ : ๋จ์ ์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ์ ๋ ฅ ํ ํผ์ ์ ์ถํ๊ณ ๋ ๋ค์ ๋ฌธ์ ๊ฐ ์๋ ๋ถ๋ถ์ ์๋ ค์ฃผ๊ฒ ๋๋ค๋ฉด ์ฌ์ฉ์๋ ์๋ชป๋ ์ ๋ ฅ ๊ฐ์ด ์๋ ์๊ธฐ๋ก ๋์๊ฐ์ ๊ฐ์ ๋ค์ ์ ๋ ฅํด์ผ๋ง ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์์ฒญ๋ ๋ฌธ์ ๋ ์๋์ง๋ง ์ต์ข ์ ์ผ๋ก ์ ๊ณตํ๊ณ ์ ํ๋ ์ฌ์ฉ์ ๊ฒฝํ ๋ํ ์๋ ๊ฒ์ด๋ค.
์ฌ์ฉ์๊ฐ ๊ฐ์ ์ ๋ ฅํ๊ณ ๋ ๋ค์ input ์์์์ ํฌ์ปค์ค๋ฅผ ์์์ ๋ ์ฌ์ฉ์๊ฐ ๋ฌด์์ ์ ๋ ฅํ๋์ง๋ฅผ ํ์ธํ๊ณ ์ ํจ์ฑ์ ๊ฒ์ฆํ ์ ์์ ๊ฒ์ด๋ค.
์ฅ์ : input ์์์์ ํฌ์ปค์ค๋ฅผ ์์์ ๋ ์ ๋ ฅ ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ฒฝ์ฐ, ์ ์ฒด ํผ์ด ์ ์ถ๋๊ณ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ ์ฌ์ฉ์๊ฐ ์ ํจํ ๊ฐ์ ์ ๋ ฅํ ์ ์๋ค. ํน์ ์ฌ์ฉ์๊ฐ ํน์ ์ ๋ ฅ์ ๋๋ด์๋ง์ ๋ฐ๋ก ๊ทธ ์์ ์ ๋ฐ๋ก ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์๋ค. ์ฆ, ์ ์ฒด ํผ์ด ์ ์ถ๋๊ธฐ ์ ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ํ๋์ ํน์ ํ ์ ๋ ฅ์ ๋ง์น ๋ ๊น์ง๋ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ๊ฐ์ ์์ฑํ์ง ์์์ ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
๋จ์ : input ์์์์ ํฌ์ปค์ค๋ฅผ ์์์ ๋ ์ ๋ ฅ ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ๊ทธ ์ ์ ์ ํจํ์ง ์์ ๊ฐ์ ์ ๋ ฅํ๊ณ ๋์ ๊ณ ์น๋ ์ค์๋ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ด ์ ํจํ์ง ์๋์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ์๋ ค์ค ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ฌ์ฉ์๊ฐ input ์์ ์์์ ํค๋ฅผ ํ ๋ฒ์ฉ ์น ๋๋ง๋ค ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ด๋ input ์์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๊ฒ์ฆํ ์ ์์ ๊ฒ์ด๋ค.
์ฅ์ : input ์์ ์์์ ํค๋ฅผ ํ ๋ฒ์ฉ ์น ๋๋ง๋ค ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ์ ํจ์ฑ์ ๋ํด ๋ฐ๋ก ํผ๋๋ฐฑ์ ์ฃผ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ์ผ๋ก ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ด ์ ํจํ์ง ์๋์ง๋ฅผ ์๋ ค์ค ์ ์๋ค.
๋จ์ : input ์์ ์์์ ํค๋ฅผ ํ ๋ฒ์ฉ ์น ๋๋ง๋ค ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ์ ํจ์ฑ์ ๋ํด ๋ฐ๋ก ํผ๋๋ฐฑ์ ์ฃผ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ ํจํ ๊ฐ์ ์ ๋ ฅํ๊ธฐ๋ ์ ์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค. ์ฆ, ํค๋ฅผ ํ ๋ฒ์ฉ ์น ๋๋ง๋ค ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ํด๋น ํผ์ ์๋ฌด๋ฐ ๊ฒ๋ ์ ๋ ฅํ์ง ์์ ์ํ์์๋ ๊ทธ ์ํ์์๋ ๋ชจ๋ ๊ฐ์ด ์ ํจํ์ง ์์๋ฐ๋ค๊ฐ ์ฌ์ฉ์๋ ์์ง ์๋ก์ด ๊ฐ์ ์ ๋ ฅํ ๊ธฐํ์กฐ์ฐจ ๋ฐ์ง ๋ชปํ์ผ๋ฏ๋ก ์ ๋ง์ ์๋ฌ๋ค์ ๋ง์ฃผํ๊ฒ ๋๋ค.
์ง๊ธ๊น์ง ํผ์ด ๋ณต์กํด์ง ์ด์ ์ ์ ๋ ฅ ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ๋ํ ์๊ธฐ๋ฅผ ์ดํด๋ณด์๋ค. ์์ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ํ์ธํ๋ ์๊ธฐ์ ๋ํด์๋ ์ ๋ง๋ค ์ฅ/๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์กฐ๊ฑด๋ค์ ๊ณ ๋ คํด์ ๋ฐฉ๋ฒ์ ๋ค์ํ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ ฅ ๊ฐ์ด ์ ํจํ์ง ์๊ฒ ๋์์ ๋ ํค ์ ๋ ฅ๋ง๋ค ์ ํจ์ฑ ๊ฒ์ฆ์ ํ๋ค๋ฉด ํผ๋๋ฐฑ์ ์ค์๊ฐ์ผ๋ก ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ์ด ์ ํจํด์ง ์๊ฐ ์ฌ์ฉ์์๊ฒ ์๋ฆด ์ ์๋ค๋ฉด ์ด๋จ๊น? ๋ณด๋ค ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ ๊ฒ์ด๋ค.
SimpleInput
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์, ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ๊ณ ๊ทธ ์
๋ ฅ ๊ฐ์ ๋ํ ์ ํจ์ฑ์ ๊ฒ์ฆํ์ฌ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋์๋ณผ ๊ฒ์ด๋ค.const SimpleInput = (props) => {
return (
<form>
<div className="form-control">
<label htmlFor="name">Your Name</label>
<input type="text" id="name" />
</div>
<div className="form-actions">
<button>Submit</button>
</div>
</form>
);
};
useState
๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ ํค ์
๋ ฅ ๋ง๋ค ํ์ธํ๊ณ ํด๋น ์
๋ ฅ ๊ฐ์ ์ด๋ค ์ํ(state) ๋ณ์์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ๋ ๋ฒ์งธ๋ก๋ useRef
๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ชจ๋ ์
๋ ฅํ์ ๋ ์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.useState
useState
๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด๋ค.import { useState } from "react";
const SimpleInput = (props) => {
const [enteredName, setEnteredName] = useState("");
...
}
useState
๋ฅผ import ํ๊ณ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ํธ์ถํ๋ค. ํด๋น ์ํ(state)์ ์ด๋ฆ์ enteredName
์ผ๋ก ์ง์ ํ๋ค. ํด๋น ์ํ๋ ๋ฌธ์์ด๋ก ๋ฐ์ ๊ฒ์ด๊ธฐ์ ์ด๊ธฐ๊ฐ์ ""๋ก ์ค์ ํ๋ค.const nameInputChangeHandler = (event) => {
setEnteredName(event.target.value);
};
enteredName
์ํ๋ฅผ ์
๋ฐ์ดํธํด์ค ์ ์๋๋ก nameInputChangeHandler
์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ ํจ์๋ฅผ ๋ฐ๊ณ , ์ํ ์
๋ฐ์ดํธ ํจ์(setEnteredName
)์ target.value
๊ฐ์ผ๋ก ๋ฐ์์ฌ ์ ์๋๋ก ํ๋ค.
nameInputChangeHandler
ํจ์์event
๋งค๊ฐ๋ณ์๋event
๊ฐ์ฒด๋ก ๋ฐ๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ๋ฐฉ์์์ ๊ธฐ์ตํ์.nameInputChangeHandler
ํจ์๋ฅผ input ์์์onChange
์ ์ฐ๊ฒฐํด์ฃผ๊ณ ๋๋ฉด ์๋์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ค๋ช ํ๋event
๊ฐ์ฒด๋ฅผ ์ป์ ์ ์์ผ๋ฉฐ, ์ดevent
๊ฐ์ฒด๋ฅผ ํตํด์ ์ ๋ ฅ๋ ๊ฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ฆ,event.target.value
๋ ๋ฆฌ์กํธ๊ฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ด๋ฉฐ ์ฐ๊ฒฐ๋ input ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉดevent.taget
์ผ๋กใน ์ ๊ทผํ์ฌvalue
๊ฐ์ ์ป์ ์ ์๋๋ก ํ๋ค.
<input type="text" id="name" onChange={nameInputChangeHandler} />
onChange
์ด๋ฒคํธ๋ก nameInputChangeHandler
ํจ์๋ฅผ ํฌ์ธํฐ ํด์ค๋ค.const formSubmitssionHandler = (event) => {
event.preventDefault();
};
formSubmitssionHandler
์ ์ถ๊ฐํ๋ค. ์ด ํจ์๋ ํผ์ด ์ ์ถ๋ ๋ ์๋ํ๋ ํจ์๊ฐ ๋ ๊ฒ์ด๋ค. ์ด ํจ์๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ก ๋ง๋ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์๋ก event
๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ ์๋๋ก ์์ฑํด์ค๋ค.<form onSubmit={formSubmitssionHandler}>...</form>
form
์์์ onSubmit
์ด๋ฒคํธ๋ก ํด๋น ํจ์๋ฅผ ์ฐ๊ฒฐํด์ค๋ค.event.preventDafult()
๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ์ด์ const formSubmitssionHandler = (event) => {
event.preventDefault();
};
form
์์์ ์ ์ถ(onSubmit
)ํ๋ ํจ์์์ event.preventDafult()
๋ฅผ ์ ์ถ๊ฐํด์ผ๋ง ํ๋ ๊ฑธ๊น? ์๋ํ๋ฉด ์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ํผ ์์ ์๋ ๋ฒํผ์ ํตํด์ ํผ ์์์ ์ ์ถ(onSubmit
)ํ๊ฒ ๋๋ฉด, ์น์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ ์๋ฒ๋ก HTTP ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค. ์ด ๊ณผ์ ์ ๋ชจ๋ ์๋์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด๊ธฐ์ ์ค์ ๋ก ํ ์์ ์์ ์ฐ๋ฆฌ์ ์ดํ๋ฆฌ์ผ์ด์
์์๋ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ ์๋ฒ๊ฐ ์๋ ์ํ์ด๊ณ HTML๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์ ์กํ๋ ์ ์ ์๋ฒ๋ง ์๋ ์ํ์ด๋ฉด ์ด ์๋ํ ๊ณผ์ ์ ํฐ ๋ฌธ์ ๊ฐ ๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์๋๊ธฐ ์ ์ event.preventDafult()
๋ฅผ ํตํด์ ์๋์ ์ผ๋ก ์์ฒญ์ด ๋ณด๋ด์ง์ง ์๋๋ก ํด์ผํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, event.preventDafult()
๊ฐ ํ์ํ ์ด์ ๋ ์ด๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํผ์ ์ ์ถํ๊ฒ ๋๋ฉด ์๋์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ HTTP ์์ฒญ์ด ๋ณด๋ด๊ฒ ๋๋ฉด์ ๊ฒฐ๊ตญ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋ ๊ฒ์ด๊ณ , ์ด๋ ๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ ๋ถ ์ฌ์์๋๋ค๋ ๊ฒ์ ์๋ค. ๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์
์ด ์ฌ์์ ๋๋ฉด์ ์ฐ๋ฆฌ๊ฐ ๋ฃ์ด๋ ์ํ(state)๋ค์ ์ด๊ธฐํ๋ ๊ฒ์ด๊ณ , ์ํ๋ ๋๋ก ์๋ํ์ง ์์ ํ๋ฅ ์ด ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํผ ์์์ ์ ์ถํ ๋์๋ event.preventDafult()
๋ฅผ ํตํด์ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๊ณผ์ ์ธ HTTP ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ก ๋ช
๋ นํด์ค์ผ ํ๋ค.
const formSubmitssionHandler = (event) => {
event.preventDefault();
console.log(enteredName);
};
useRef
ref
๋ฅผ ์ค์ ํจ์ผ๋ก์จ ํ์ํ ๋ input ์์๋ก๋ถํฐ ๊ฐ์ '์ฝ์ด'์ค๋ ๊ฒ์ด๋ค.import { useState, useRef } from "react";
const SimpleInput = (props) => {
const nameInputRef = useRef();
};
useRef
๋ฅผ import ํด์จ ํ, nameInputRef
๋ผ๋ ์ด๋ฆ์ผ๋ก useRef
๋ฅผ ํธ์ถํ๋ค.<input
ref={nameInputRef}
type="text"
id="name"
onChange={nameInputChangeHandler}
value={enteredName}
/>
ref
prop์ ์์ฑํ๊ณ nameInputRef
๋ฅผ ํฌ์ธํฐํด์ค๋ค.const formSubmitssionHandler = (event) => {
event.preventDefault();
console.log("useState :", enteredName);
const enteredValue = nameInputRef.current.value;
console.log("useRef :", enteredValue);
};
onSubmit
)๋๋ฉด ์ด ์
๋ ฅ๋ ๊ฐ(value
)์ nameInputRef
์ current
์์ฑ์ผ๋ก ์ ๊ทผํ์ฌ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋์๋ค. ref
๋ ํญ์ current
์์ฑ์ ๊ฐ๋ '๊ฐ์ฒด' ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ์์ ref
๋ ์ธ์ ๋ current
์์ฑ์ผ๋ก value
๊ฐ์ ์ ๊ทผํ ์ ์๋ค.์๋ฐ์คํฌ๋ฆฝํธ์์ input ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์ฒ๋ผ ์๋ํ๋ฉฐ, input ์์๋ ํญ์ value ๋ผ๋ ์์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
ref
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ ๋์์ง๋ ๋ชจ๋ฅธ๋ค. ๋ฐ๋ฉด ์ฆ๊ฐ์ ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฆ์ ํด์ผ๋ง ํ๋ค๋ฉด, ๊ทธ๋ฌ๋๊น ํค ์
๋ ฅ ๋ง๋ค ์
๋ ฅ ๊ฐ์ด ํ์ํ๋ค๋ฉด ref
๋ก๋ ํด๋น ์์
์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ํ(state)๋ฅผ ์ด์ฉํ๋ ๊ฒ ๋ ๋์ ๊ฒ์ด๋ค. ๋ํ ์
๋ ฅ๋ ๊ฐ์ ์ด๊ธฐํ ํ ๋๋ref
nameInputRef.current.value = "";
useState
setEnteredName("");
ref
๋ ์ด์ ๋์ผํ๊ฒ ์ถ๋ ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ๋ฐ๋์งํ ๋ฐฉ๋ฒ์ ์๋๋ค. ์ง์ ์ ์ผ๋ก DOM
์ ์กฐ์ํ๋ ๋ฐฉ์์ด๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ด์ฉํด์ DOM
์ ์ง์ ์กฐ์ํ๋ ๊ฒ์ ์ง์ํด์ผํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐ๋ฆฌ๋ ๋ฆฌ์กํธ๋ก๋ง DOM
์ ์กฐ์ํด์ผ ํ๊ณ , ref
๋ฅผ ํตํด์ ์
๋ ฅ ๊ฐ์ ์ด๊ธฐํํ๋ ๋ฐฉ์์ ๊ฒฐ์ฝ ์ข์ ๋ฐฉ๋ฒ์ด๋ผ ํ ์ ์์ ๊ฒ์ด๋ค.๐จ ํด๋น ํฌ์คํ ์ Udemy์ โReact ์๋ฒฝ ๊ฐ์ด๋โ ๊ฐ์๋ฅผ ๋ฒ ์ด์ค๋ก ํ ๊ธฐ๋ก์ ๋๋ค.
โ๐ป ๊ฐ์ git repo ๋ฐ๋ก๊ฐ๊ธฐ