๋ฆฌ์กํธ๋ก ๋ก๊ทธ์ธ/ํ์๊ฐ์ Project๋ฅผ ๊ตฌํํ๋ค ๋ฌธ๋ form ํ๊ทธ์ ๋ํด ๋ด๊ฐ ์ ๋ชจ๋ฅด๊ณ ์๋ ๊ฒ ๊ฐ์ ์กฐ๊ธ ๋ ๊ณต๋ถํ๊ณ ์ถ๋จ ์๊ฐ์ด ๋ค์๋ค.
form ํ๊ทธ์ ๋ํด ์์๋ณด์.
form ํ๊ทธ๋ ์ฌ๋ฌ ๊ฐ์ง ์ ๋ณด๋ค์ ๋ณด๋ด๋ ์์์ด๋ค.
์ฌ๋ฌ input tag ๋ฐ button๊ณผ ํจ๊ป ํด๋น ํ๊ทธ์ ์ ๋ณด๋ค์ ์ง์ ํ ์๋ฒ์ ๋ณด๋ผ ์ ์๊ฒ ํ๋ ํ๊ทธ์ด๋ค.
<form>
<input/>
<button>์ ์ถ</button>
</form>
๊ทธ๋ ๋ค๋ฉด form tag์ attributes๋ค์ ์ดํด๋ณด์.
action attribute๋ ๋ฐ์ดํฐ๋ค์ด ์ด๋๋ก ๋ณด๋ด์ง์ง๋ฅผ ์ ์ํ๋ค.
๊ฐ์ผ๋ก ์ ๋์ ์ธ ๊ฒฝ๋ก๋ก ์ง์ ํ ์ ์๊ณ ์๋์ ์ธ ๊ฒฝ๋ก๋ก ์ง์ ํ ์ ์๋ค.
์ ๋์ ์ธ ๊ฒฝ๋ก๋ ๊ฐ์ผ๋ก ์
๋ ฅํ ๊ฒฝ๋ก๋ก ๋ฐ์ดํฐ๋ก ๋ณด๋ผ ์ ์๊ณ
์๋์ ์ธ ๊ฒฝ๋ก๋ ํ์ฌ ๋ด ์๋ฒ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ ์๋์ ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ง์ ํํ ์ ์๋ค.
absolute URL
<!--๋ฐ์ดํฐ๊ฐ https://example.com๋ก ๋ณด๋ด์ง๋ค. -->
<form action="https://example.com">
relative URL
<!--๋ฐ์ดํฐ๊ฐ ๋์ ์๋ฒ ์ค /somewhere_else๋ก ๋ณด๋ด์ง๋ค. -->
<form action="/somewhere_else">
๋ง์ฝ action attribute๊ฐ ์ฃผ์ด์ง์ง ์๋๋ค๋ฉด form tag๊ฐ ์กด์ฌํ๋ ํ์ฌ ํ์ด์ง๋ก ๋ณด๋ด์ง๊ฒ ๋๋ค.
๋ง์ฝ localhost:3000์ธ ๋ก์ปฌ ์๋ฒ์ ์ฐ๊ฒฐ๋์๋ค๋ฉด ๋ก์ปฌ ์๋ฒ๋ก ํด๋น ๋ฐ์ดํฐ๊ฐ ๋ณด๋ด์ง๊ฒ ๋๋ค.
์ ์์ ์์ ๋ณด๋ฏ์ด http๋ฟ๋ง ์๋๋ผ https๋ก๋ ๋ณด๋ผ ์ ์๋ค.
https๋ก ๋ณด๋ธ๋ค๋ฉด ๋ฐ์ดํฐ๋ค์ด ์ํธํ๋์ด ๋ณด๋ด์ง๋ค.
์ด ๋ ํผ ํ๊ทธ๊ฐ ์์ ํ์ง ์์ ํ์ด์ง์ ์๋๋ผ๋ ๋ฐ์ดํฐ๋ค์ด ์ํธํ๋์ด ๋ณด๋ด์ง๋ค.
ํํธ formํ๊ทธ๊ฐ ์๋ ํ์ด์ง๊ฐ ์์ ํ๋๋ผ๋ protocol์ด http์ธ url๋ก ๋ณด๋ธ๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ๋๋ง๋ค ๋ณด์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
<form action ="https://example.com" method="get">
</form>
method attribute๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ๋ณด๋ผ์ง๋ฅผ ์ ์ํ๋ค.
์ฃผ์ ๋ฉ์๋๋ get,post์ด๋ค.
get ๋ฉ์๋๋ ์ฃผ๋ก ์๋ฒ์๊ฒ ์ด๋ ํ ๋ฆฌ์์ค๋ฅผ ์ป์ด์ค๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ์์ฒญ์ ๋ณด๋ผ ๋ body๋ถ๋ถ์ด ๋น์ด์๋ ์ํ๋ก ๋ณด๋ด๊ฒ ๋๋ค.
์ด ๋ body๋ถ๋ถ์ด ๋น์ด์๋ ์ํ๋ก ๋ณด๋ด๊ฒ ๋๋ฉด url์ ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ๋ํ๋๊ฒ ๋๋ค.
(body๋ ์๋ฒ์ ์์ฒญ์ ํ ๋ ์๋ฒ์๊ฒ ์์ฒญํ๋ ๋ถ๋ถ์ ์ด๋ ํ ์์ผ๋ก ๊ฐ๊ณตํด๋ฌ๋ผ๋ผ๋ ์ต์
์ ์ค์ ํ ์ ์๋ ๋ถ๋ถ์ด๋ค.)
๋ค์ ์์๋ฅผ ์ดํด๋ณด์.
<form action="http://www.foo.com" method="GET">
<div>
<label for="say">What greeting do you want to say?</label>
<input name="say" id="say" value="Hi">
</div>
<div>
<label for="to">Who do you want to say it to?</label>
<input name="to" id="to" value="Mom">
</div>
<div>
<button>Send my greetings</button>
</div>
</form>
GET ๋ฉ์๋์ ํจ๊ป ๋ณด๋ธ๋ค๋ฉด URL์ ๋ณด๋ธ ๋ฐ์ดํฐ์ ์ ๋ณด๊ฐ ๋ํ๋๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ key์ value์ ์์ผ๋ก ๋ณด๋ด์ง๊ฒ ๋๋๋ฐ key=value์ด๋ฌํ ํํ๋ก ๋ํ๋๊ฒ ๋๋ค.
์ฆ, ์๋ฒ๊ฐ ์๋ต์ ํด์ค ๋์ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ URL์ ํฌํจํ์ฌ ๋ณด๋ด์ค๋ค๋ ๊ฒ์ด๋ค.
POST๋ GET๊ณผ ๋ฌ๋ฆฌ ์๋ฒ์๊ฒ ์์ฒญ์ ํ ๋ body๋ถ๋ถ์ ๊ณ ๋ คํ์ฌ ์์ฒญํ๊ฒ ๋๋ค.
body๋ถ๋ถ๊ณผ ํจ๊ป ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ด server์ body์์ ์์ฒญํ ์ฃผ๋ฌธ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์ด์ ๋ฐ๋ผ server ์์ฒญํ๋๋ก ์๋ต์ ํด์ค๋ค.(์์ฒญํ ๋์ request.body์ ๋ฐ์ดํฐ๊ฐ ๋ด์ ๋ณด๋ด์ง๊ฒ ๋๋ค.)
์๋ ์์ ๋ฅผ ์ดํด๋ณด์.
<form action="http://www.foo.com" method="POST">
<div>
<label for="say">What greeting do you want to say?</label>
<input name="say" id="say" value="Hi">
</div>
<div>
<label for="to">Who do you want to say it to?</label>
<input name="to" id="to" value="Mom">
</div>
<div>
<button>Send my greetings</button>
</div>
</form>
GET๊ณผ ๋ฌ๋ฆฌ URL์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ง ์๋๋ค.
๋ํ request body์ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ ์๋ฒ๋ก ๋ณด๋ด์ง๋ค.
POST / HTTP/2.0
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
say=Hi&to=Mom
Content-Length๋ body์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๊ณ Content-type์ ์๋ฒ๋ก ๋ณด๋ด์ง ๋ฆฌ์์ค ํ์ ์ ๋ํ๋ธ๋ค.
์์ ์ ๋ณด๋ค์ ๋ณด์์ ๋ GET/METHOD์ ์ฌ์ฉํ ๋ ์ฃผ์์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ณด์์ด ์ ์ง๋์ผํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋์๋ GET๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค.(๋ฐ์ดํฐ๊ฐ URL์ ๋ํ๋๊ธฐ ๋๋ฌธ์)
form ํ๊ทธ ์์ด input๊ณผ button์ ๊ตฌ์ฑํด๋ ์ ์ถ์ด ๋ ๊น?
formํ๊ทธ์์ด input๊ณผ button์ ๊ตฌ์ฑํ๋ฉด submit์ด ๋์ง ์๋๋ค.
form tag ์์ฒด์ ์๋ฒ๋ก ์ ์กํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ด์ฌ๋์ด ์๋ฒ๋ก ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด form ํ๊ทธ๋ด์์ input,button ๋ฑ์ ์ฌ์ฉํด์ผํ๋ค.
๋ํ ๋ง์ฝ ํด๋ผ์ด์ธํธ์ธก์์ js๋ก ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ์ ๊ฐ๊ณตํ์ฌ ๋ณด๋ธ๋ค๊ฑฐ๋ ์ค๊ฐ์์ ์ด๋ ํ ๊ธฐ๋ฅ์ ์ถ๊ฐ,์ ๊ฑฐ,์์ ์ ํ์ฌ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด formํ๊ทธ๋ฅผ selectํ์ฌ onsubmit์ด๋ฒคํธ๋ฅผ listenํ์ฌ ๋ณด๋ผ ์ ์๋ค.
const form = document.querySelector("form")
form.addEventListener("submit",(e)=> {~~~})
input์ label๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์ด๊ณ name attribute๋ ์ ๋ฌ๊น?
์ฐ์ input์ name attribute๋ ์๋ฒ์์ input์ ์ฐธ์กฐํ ์ ์๊ฒ ํ๊ณ js์์ input์ name์ ์ฐธ์กฐํ ์ ์๊ฒ ํด์ค๋ค.
๋ง์ฝ input์ name์ด ์๋ ์ํ๋ก ์ ์ถ์ด ๋๋ค๋ฉด input์ value๊ฐ์ ์๋ฒ๋ก ์ ์ก๋์ง ์๋๋ค.
<label for="peas">Do you like peas?</label>
<input type="checkbox" name="peas" id="peas">
input์ label๊ณผ ๊ฐ์ด ์ฐ๋ ์ด์ ๋ ์น ์ ๊ทผ์ฑ์ ์ํด์์ด๋ค.
๊ธฐ์ ์ ๋์์ด ํ์ํ ์ฌ๋๋ค์๊ฒ ์ ์ฉํ๋ฉฐ ๋ํ label๋๋ฅผ ๋์ input์ focus,check ๋ฑ์ ์ด๋ฒคํธ์ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์ด element์ ๋ํ ์ ๊ทผ์ฑ๋ ๋์ผ ์ ์๋ค.
form ํ๊ทธ๋ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ง element์ด๋ฉฐ ์์ฒด์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ํ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ์ฌ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ํด๋น form์ ์ ํํ์ฌ ๋ณด๋ผ ์ ์๋ค.
method atrribute๋ฅผ ์ง์ ํ๋๋ฐ์ ์์ด ๋ง์ ์์ ๋ฐ์ดํฐ์ ๋ณด์์ ์ ์ง๋์ด์ผํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค๋ฉด POST๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ฐ์ดํฐ์ ์์ด ์ ๊ฑฐ๋ ๋ณด์์ ๋ ธ์ถ๋๋ ๋ฌธ์ ๊ฐ ์๋ ๋ฐ์ดํฐ๋ผ๋ฉด GET๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก input๋ฉ์๋์๋ label ๋ฉ์๋๋ฅผ ๋ถ์ด๋ ์ต๊ด๋ ์ค์ํ๋ค.
formํ๊ทธ๋ฅผ ์ ๋งคํ๊ฒ ์๊ณ ์์๋๋ฐ ์ ํํ๊ฒ ๊ณต๋ถํ์ฌ ์๊ฒ ๋๋ ์์ผ๋ก ์ฌ์ฉํ ๋ ๋ฌธ์ ์์ด ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label#accessibility_concerns