폼과 입력


무언가를 처리해주는 웹사이트라면, 검색창이든 로그인이든 결제든 댓글 입력창이든, 거의 모두 폼을 기반으로 만들어집니다. 폼은 페이지가 방문자에게 말만 하는 것을 멈추고 방문자의 말을 듣기 시작하는 방식입니다. 즉 누군가가 입력하거나, 체크하거나, 선택한 것을 모아서 처리할 수 있도록 넘겨주는 역할을 합니다. 이 장에서는 이것을 가능하게 하는 HTML을 다룹니다.
form 엘리먼트
**폼(form)**은 방문자가 채워 넣는 것들을 한데 묶는 컨테이너입니다. <form> 엘리먼트 안에 입력 필드들과 버튼을 감싸 넣으면, 폼은 방문자가 다 채웠을 때 모든 것을 모아 한꺼번에 전송하는 역할을 합니다.
<form>
<label>Your name</label>
<input>
<button>Send</button>
</form>병원에서 작성하는 종이 접수 양식을 떠올려 보세요. 그 종이 한 장에 여러 칸이 있고, 각 칸에 내용을 적은 다음, 맨 아래에서 그 종이 전체를 한 번에 제출합니다. <form> 엘리먼트가 바로 그 종이입니다.
<form>은 입력 필드들과 버튼을 담는 컨테이너이며, 누군가 제출하면 모든 것을 한꺼번에 보냅니다. 책상 위 종이 접수 양식을 떠올려 보세요. 종이 한 장에 여러 칸이 있고, 한 번에 제출합니다. 필드들을 폼으로 감싸기만 하면 별다른 수고 없이 이런 수집-후-전송 동작을 얻게 됩니다. 입력과 레이블
<input>은 방문자가 입력하는 상자입니다. 하지만 그 자체만으로는 무엇을 위한 것인지 알 수 없는 빈 상자일 뿐입니다. 바로 이때 **레이블(label)**이 필요합니다. 레이블은 방문자에게 이 상자에 무엇을 넣어야 하는지 알려주는 텍스트입니다.
<label for="city">City</label>
<input id="city">모든 입력에는 레이블이 필요합니다. 두 요소는 입력에 id를 부여하고, 레이블에서 for로 같은 값을 지정해서 서로 연결합니다. 이렇게 연결해 두면 레이블을 클릭했을 때 커서가 상자 안으로 이동하는데, 이런 작은 배려가 폼을 모두에게 더 쓰기 편하게 만들어 줍니다.
<input>은 사람들이 입력하는 상자이고, <label>은 그 안에 무엇을 넣어야 하는지 알려주는 텍스트입니다. for와 id를 일치시켜 연결하면 레이블을 클릭하는 것만으로 바로 상자로 이동합니다. 모든 입력 하나하나에 레이블을 달아주세요. 옆에 아무 설명도 없는 외로운 상자는 사람들을 헷갈리게 만들 뿐입니다. 그 밖의 컨트롤
모든 것이 평범한 텍스트 상자로 표현되는 건 아닙니다. 어떤 질문은 체크하거나, 고르거나, 목록에서 선택하는 방식이 더 잘 맞습니다. 체크 상자(checkbox)는 켜짐/꺼짐을 나타내는 스위치이고, 드롭다운은 여러 옵션 중 하나를 고르게 해줍니다.
<label>
<input type="checkbox"> Send me the newsletter
</label>
<label for="size">Size</label>
<select id="size">
<option>Small</option>
<option>Medium</option>
<option>Large</option>
</select>지금 이걸 외울 필요는 없습니다. 여기서 중요한 것은, 폼이 상황에 맞는 방식으로 질문할 수 있다는 점입니다. 입력받거나, 체크받거나, 목록에서 고르게 하거나.
<input type="checkbox">이고, 드롭다운은 <option> 항목들을 담은 <select>입니다. 외울 필요 없습니다. 질문에 필요하다면 폼은 평범한 상자보다 더 다양한 표현 방법을 갖고 있다는 것만 알면 됩니다. 폼 데이터는 어떻게 이름 붙여지고 전송되는가
폼이 전송될 때, 각 답변에는 그것을 받는 쪽이 어느 상자에서 온 값인지 알 수 있도록 레이블이 필요합니다. 그 레이블이 바로 입력의 name입니다. 한 번 설정해두면 값과 함께 따라다닙니다.
<label for="city">City</label>
<input id="city" name="city">방문자가 그 상자에 "리스본"이라고 입력하면, 폼은 "city는 리스본이다"라는 짝을 전송합니다. name은 받는 쪽이 여러 답변을 서로 구분할 수 있게 해주는 수단입니다. name이 없는 입력은 제출 결과에서 아예 빠져버리므로, 이 작은 속성이 실제로 데이터가 화면에 나타나게 만드는 주인공입니다.
name은 그 답변에 붙는 태그이므로, 받는 쪽은 어떤 값이 city 상자에서 왔고 어떤 값이 email 상자에서 왔는지 알 수 있습니다. name을 설정하면 상자의 값이 이름이 붙은 짝으로 전송됩니다. 잊어버리면 그 필드는 조용히 빠져버리는데, 이 때문에 폼이 처음으로 아무것도 돌려주지 않을 때 많은 사람들이 헤매게 됩니다. 
