
👩🏫 <form> 태그 또한 앞서 설명했던 블록 레벨 요소에 속하지만,
다루어야 할 내용이 많아 별도의 문서에서 설명하려 합니다.
덧붙여, <form>과 관련된 다양한 요소들 또한
앞의 두 문서에서 구분하여 여기서 자세히 알아봅시다!
조금 더 구체적인 form 요소의 동작 방법
1️⃣ <form>이 포함된 웹 페이지에서 <form>에 대응하는 값을 입력한다.
2️⃣ 웹 브라우저는 입력된 데이터를 모두 웹 서버로 보낸다.
3️⃣ 웹 서버는 이 값을 웹 프로그램으로 넘겨 처리하도록 한다.
4️⃣ 웹 프로그램은 처리한 결과에 따른 새로운 HTML 페이지를 웹 서버로 보낸다.
5️⃣ 웹 서버는 받은 HTML 페이지를 웹 브라우저로 보낸다.
6️⃣ 웹 브라우저는 받은 HTML 페이지를 화면에 보여준다.
form이 submit 되었을 때 데이터가 향하는 주소, 경로를 의미한다.
양식 데이터를 처리할 프로그램의 URL을 입력한다.
데이터를 서버에 전송할 때 사용할 HTTP 방식을 정의한다.
메소드는 웹 브라우저로부터 form 데이터를 가져와 웹 서버로 보내는 기능을 수행한다.
-메소드에는 get, post 두 종류가 있는데 전달 방식에 차이가 있다.
주소에 데이터를 실어서 전달하는 방식으로 action URL과 ? 뒤에 데이터를 이어 붙여서 전송한다.
데이터가 Header에 위치한다.
post 방식과 달리 body가 별도로 존재하지 않고
URL 끝에 데이터를 직접 붙여 전송하므로 데이터가 외부에 노출되어 보안에 취약하다.
예) 백엔드 서버 주소가 www.jw.com/api/user/signup일때
www.jw.com/api/user/signup?user_email=a@naver.com&user_password=1234
user_email이라는 key에 a@naver.com이라는 value, user_password라는 key에 1234라는 value를 담고, 보내야 할 key와 value가 여러 개인 경우 단순히 &를 사용해 이어주기 때문에 ID와 비밀번호라는 중요한 개인정보가 노출될 가능성이 높다.
따라서 get 방식은 지정된 리소스로부터 정보를 읽어올 때 주로 사용한다.
보안이 필요 없는 상품 정보 조회 등이 그 예시이다.
http request message의 body 안에 데이터를 실어 전달하는 방식이다.
데이터가 Body에 존재한다.
예) 백엔드 서버 주소가 www.jw.com/api/user/signup일때
www.jw.com/api/user/signup
백엔드에 데이터를 요청할 수 있는 다양한 라이브러리 등의 등장으로 JSP와 같은 서블릿이 아니라면 action과 method는 거의 사용하지 않는 속성이 되었다.
그럼에도 form 태그가 사용되는 주된 이유는 submit 이벤트 발생 시 form 내부 input의 값을 가져올 수 있고, enter 키를 누르면 submit 이벤트를 자동으로 실행시키기 때문이다.
따라서 enter 키를 누르면 알림 창을 노출시키는 등의 이벤트를 발생시키기 위해 form 태그가 자주 사용된다.
더 나아가 form 요소를 구성하는 다양한 요소들이 존재한다.
input에 사용할 수 있는 다양한 속성들
태그 모양을 다양하게 변경할 수 있다.
이 속성을 통해 해당 input이 어떠한 기능을 하고 있는 태그인지 명확히 명시해 줄 수 있다.
단일속성으로 자식을 가질 수 없다.
해당 태그를 필수태그로 지정한다.
해당 태그에 대한 값을 입력하지 않고 submit 버튼을 누르면 에러 메세지가 화면에 출력된다.
클릭 가능한 버튼을 나타내는 인라인 요소이다.
default type = "submit"
button의 type을 submit 액션이 일어나지 않는 'button'으로 지정할 수 있다.
<button type="button">버튼</button>
1)
<button>...</button> (type="submit")
2)
<button type="button">...</button>
3)
<input type="button"/>
button 태그가 존재하지 않았던 HTML 4.0 표준 이전에 사용된 방식이다.
button은 이 코드가 하던 역할을 이어 받아 나중에 탄생한 태그이다.
button을 사용한 버튼과 input을 사용한 버튼의 기능은 동일하지만 활용성 측면에서 button이 더 우월하다.
사용자 인터페이스 요소들의 설명을 정의할 때 사용하는 인라인 요소이다.
for 속성을 사용하여 다른 요소와 결합할 수 있다.
<input type="radio" name="gender" value="0"/> 남성
<input type="radio" name="gender" value="1" id="female"/>
<label for="female"> 여성 </label>

이러한 특성을 사용하여, checkbox의 속성을 그대로 유지하되 모양만 바꾸려 할 때 해당 체크박스가 보이지 않게 CSS 로 설정한 후 해당 위치에 label 태그를 두어 별도로 설정한 다른 이미지 영역을 클릭해도 label과 연결된 기존의 checkbox가 클릭되는 효과가 나게 할 수 있다.
또는 label 요소를 결합하고자 하는 요소 내부에 위치시키면 for 속성 없이도 해당 요소와 결합시킬 수 있다.
웹 양식의 여러 컨트롤과 label을 묶을 때 사용하는 블록 레벨 요소이다.
form 안에서 form의 요소들을 그룹화할 때 사용한다.
<form>
<fieldset>
<legend>Your Favorite Sports</legend>
<input type="radio" id="soccer" name="sports" value="0"/>
<label for="soccer">soccer</label> <br>
<input type="radio" id="baseball" name="sports" value="1"/>
<label for="baseball">baseball</label> <br>
<input type="radio" id="basketball" name="sports" value="2"/>
<label for="basketball">basketball</label> <br>
</fieldset>
</form>

항목을 선택할 수 있는 드롭다운 메뉴를 정의하는 인라인 요소이다.
선택됐을 때 값으로써 사용할 value라는 속성을 가진다.
지정된 value 값이 없는 경우 안의 텍스트를 값으로 사용한다.
예) 이메일 회원가입 시 이메일을 선택하는 드롭다운 메뉴
select 태그 안의 목록들을 그룹화할 때 사용한다.
optgroup 하위에 option 요소들이 포함된다.
<div>
취미:
<select>
<option value="0">농구</option>
<option value="1">축구</option>
<option value="2">야구</option>
</select>
</div>

여러 줄을 입력받기 위해 사용하는 인라인 요소이다.
rows 속성으로 줄을, cols 속성으로 한 줄에 입력받을 크기를 설정한다.
<textarea placeholder="작성해주세요" cols="50" rows="50">
<!--엔터 친 만큼 textarea 안에 빈칸으로 표시-->
반갑습니다.
<!--엔터 친 만큼 textarea 안에 빈칸으로 표시-->
</textarea>


검색이 가능한 (미리보기가 가능한) input(사용자 입력) 태그이다. (인라인 요소)
텍스트 상자에 입력할 값 후보 목록을 설정해둘 수 있다.
// list = datalist 태그의 id 속성값
<input type="text" list="data" />
// id = 속성값
<datalist id="data">
<option>축구</option>
<option>농구</option>
<option>야구</option>
</datalist>

닫을 수 있는 경고창, 대화 상자 등 상호작용 가능한 요소를 만들기 위해 사용하는 블록 레벨 요소이다.
dialog를 사용하여 웹 페이지 상에 팝업 창을 만들 수 있다.
open 속성을 통해 해당 요소가 활성화 상태이고 상호작용이 가능함을 나타낸다.