기본 콘텐츠로 건너뛰기

방송대 HTML5웹프로그래밍 4강: 폼 데이터 흐름과 접근 가능한 입력 설계

HTML5웹프로그래밍 4강 - HTML 표현: 웹 폼

방송대 HTML5웹프로그래밍 4강: 폼 데이터 흐름과 접근 가능한 입력 설계

웹 폼은 입력 상자를 모아 놓은 화면이 아니라, 사용자의 의도를 이름 있는 데이터로 바꾸어 서버에 전달하는 과정입니다. 이 글은 ‘웹 워크숍 신청서’ 한 장을 단계별로 완성하면서 form의 전송 설정, 입력 타입 선택, 레이블과 그룹, 유효성 검사, 선택 목록, 파일과 버튼을 하나의 흐름으로 연결합니다.

전송 버튼을 누른 뒤의 일을 먼저 그린다

좋은 폼은 네 조건을 함께 만족해야 합니다. 관련 입력이 구조적으로 묶여야 하고, 사용자의 입력 경험이 자연스러워야 하며, 잘못된 값은 검증해야 하고, 서버에서는 보안을 다시 확인해야 합니다. 어느 하나만 갖추어도 충분한 것이 아닙니다. 예를 들어 화면에 이메일 칸이 있어도 name이 없으면 전송 데이터에 포함되지 않고, 브라우저의 required를 통과해도 서버 검증을 생략할 수 없습니다.

  1. 의도 정의: 무엇을 왜 묻는지 정한다.
  2. 컨트롤 선택: 값의 성격에 맞는 요소와 type을 고른다.
  3. 의미 연결: label, fieldset, legend로 이름과 관계를 밝힌다.
  4. 브라우저 검사: required, pattern, min, max 등으로 기본 오류를 빠르게 알린다.
  5. 직렬화·전송: 전송 가능한 컨트롤의 name=value 쌍을 method와 enctype에 따라 보낸다.
  6. 서버 재검증: 값의 형식·권한·파일 종류와 크기를 신뢰하지 않고 다시 확인한다.

이번 글의 중심 사례는 이름, 이메일, 참여 방식, 관심 주제, 경력 연수, 희망일, 포트폴리오를 받는 워크숍 신청서입니다. 각 칸을 따로 외우지 않고, 한 값이 이 여섯 단계를 통과하는지 추적하면 속성의 역할이 선명해집니다.

한 줄 모델: 사용자가 보는 설명은 label, 문서 안 식별자는 id, 서버가 받는 변수명은 name, 실제로 전송되는 내용은 value가 담당합니다.

1단계: form으로 수집 범위와 운송 방법을 정한다

form은 여러 폼 컨트롤을 하나의 제출 단위로 묶습니다. 폼 안에 또 다른 폼을 중첩해서는 안 됩니다. action은 데이터를 처리할 주소, method는 전송 방식, enctype은 인코딩 형식을 지정합니다. autocomplete은 자동 완성 사용 여부를 조절하고, novalidate는 브라우저 기본 검증을 끕니다. 마지막 속성은 검증을 별도로 완전히 구현한 특별한 상황에서만 신중하게 사용합니다.

상황설정이유와 주의점
검색·조회method="get"값이 URL 질의 문자열에 붙어 결과 주소를 공유하기 쉽다. 민감한 값에는 부적합하다.
회원가입·글쓰기method="post"요청 본문으로 보낸다. 단, POST 자체가 암호화는 아니므로 HTTPS와 서버 보안이 필요하다.
파일 업로드method="post"와 enctype="multipart/form-data"파일 바이트와 일반 필드를 함께 전송할 수 있다.
<form id="workshop-form"
      action="/applications"
      method="post"
      enctype="multipart/form-data"
      autocomplete="on">
  <!-- 폼 컨트롤이 들어갈 자리 -->
</form>

action을 생략하면 현재 문서 주소가 제출 대상이 됩니다. JavaScript로 비동기 전송을 하더라도 HTML의 의미와 기본 동작을 먼저 설계한 뒤 제출 이벤트를 보완하는 편이 안전합니다. 폼 밖의 컨트롤도 form="workshop-form"처럼 대상 폼의 id를 가리키면 해당 폼에 연결할 수 있습니다.

전송 추적법: 컨트롤이 화면에 보이는지만 확인하지 말고, 폼에 연결되었는지, name이 있는지, 비활성 상태가 아닌지를 차례대로 확인합니다.

2단계: 값의 성격에 맞는 입력 도구를 고른다

input은 type에 따라 키보드, 선택 UI, 기본 검증 방식이 달라집니다. 이름처럼 짧은 일반 문자열은 text, 가려서 입력할 비밀번호는 password, 기본 이메일·URL 검증이 필요한 값은 email·url, 계산할 수치는 number가 출발점입니다. 전화번호의 tel은 전화 입력에 알맞은 UI를 제공하지만 형식을 자동으로 확정하지 않으므로 필요하면 pattern을 더합니다.

묻는 값주요 선택판단 기준
짧은 문자열·검색어text, search일반 문자열인지 검색 목적의 입력인지 구분한다.
긴 의견textarea여러 줄 입력이 필요한가를 본다. 초기값은 시작·종료 태그 사이에 쓴다.
정확한 수량number증감과 산술 계산이 의미 있는 수치인지 확인한다.
대략적 수준range정확한 숫자보다 범위 안의 상대적 선택이 중요한지 본다.
하나 또는 여러 선택radio, checkbox상호 배타적인 한 개 선택인지, 독립적인 복수 선택인지 구분한다.
날짜·시간date, month, week, time, datetime-local서버에 필요한 시간 정밀도를 정한다.

입력 타입과 키보드 힌트를 혼동하지 않기

inputmode는 모바일 키보드 배열을 제안할 뿐 데이터의 의미나 유효성을 바꾸지 않습니다. 인증번호처럼 숫자 모양이지만 덧셈하지 않고 앞자리 0도 보존해야 하는 식별자는 type="text" inputmode="numeric"가 더 알맞을 수 있습니다. 반면 참가 인원처럼 계산 대상인 값은 type="number"와 min·max·step을 사용합니다.

<label for="code">6자리 인증번호</label>
<input type="text" id="code" name="verification_code"
       inputmode="numeric" pattern="[0-9]{6}"
       maxlength="6" required>

placeholder는 입력 예시나 짧은 힌트일 뿐 레이블을 대신하지 못합니다. 사용자가 값을 입력하면 사라지고, 보조 기술과 자동 번역 환경에서도 일관된 이름이 되기 어렵기 때문입니다. autofocus 역시 페이지가 열릴 때 초점을 갑자기 이동시키므로 꼭 필요한 한 곳에서만 사용합니다.

3단계: label과 fieldset으로 질문의 의미를 연결한다

명시적 레이블은 label의 for 값과 컨트롤의 id를 같게 작성합니다. 레이블을 클릭해도 입력 칸이나 선택 항목에 초점이 가므로 클릭 영역이 넓어지고, 보조 기술은 컨트롤의 이름을 파악할 수 있습니다. id는 페이지 안에서 고유해야 하지만, 라디오 버튼의 name은 같은 그룹끼리 같아야 합니다.

<label for="applicant-email">답변 받을 이메일</label>
<input type="email" id="applicant-email" name="email"
       autocomplete="email" required>

서로 관련된 라디오 버튼과 체크박스는 fieldset으로 묶고 첫 부분의 legend로 그룹 질문을 제시합니다. 각 항목에도 개별 label이 필요합니다. fieldset disabled는 안의 컨트롤을 한꺼번에 비활성화할 때 쓸 수 있습니다.

<fieldset>
  <legend>참여 방식</legend>
  <input type="radio" id="mode-online" name="mode" value="online" required>
  <label for="mode-online">온라인</label>
  <input type="radio" id="mode-offline" name="mode" value="offline">
  <label for="mode-offline">오프라인</label>
</fieldset>

역할 분리: legend는 그룹 전체의 질문, 각 label은 개별 답안의 이름입니다. 둘 중 하나만 써서는 관계를 온전히 전달하기 어렵습니다.

4단계: 브라우저 검증과 전송 상태를 구분한다

공통 속성은 목적별로 묶어 기억하면 쉽습니다. placeholder, autocomplete, list, spellcheck는 입력 경험을 돕고, required, pattern, min, max, minlength, maxlength는 브라우저 검증 조건을 제시합니다. value, checked, readonly, disabled는 초기값과 상태를 다룹니다.

readonly와 disabled 전송 실험

<label for="member-grade">회원 등급</label>
<input id="member-grade" name="grade" value="student" readonly>

<label for="internal-note">내부 메모</label>
<input id="internal-note" name="note" value="review" disabled>

두 칸 모두 사용자가 수정할 수 없지만 결과는 다릅니다. readonly인 grade=student는 일반적인 폼 제출에 포함되고, disabled인 note는 포함되지 않습니다. 화면에 값이 보인다는 사실과 서버가 값을 받는다는 사실은 같지 않습니다.

속성사용자 수정폼 제출대표 목적
readonly불가포함확인용 값을 보여 주되 함께 보낼 때
disabled불가제외현재 단계에서 사용할 수 없는 기능일 때
required가능유효한 값 요구빈 제출을 브라우저 단계에서 막을 때

브라우저 검증은 빠른 피드백을 제공하지만 최종 방어선이 아닙니다. 요청은 개발자 도구나 별도 프로그램으로 바뀔 수 있으므로 서버는 필수 여부, 길이, 범위, 허용 목록, 사용자 권한을 다시 검사해야 합니다. hidden 값도 화면에 안 보일 뿐 신뢰할 수 있는 비밀값은 아닙니다.

5단계: 입력과 선택의 정도를 맞춘다

정확한 값, 대략적 값, 계산 결과

number는 정확한 수치를 받고, range는 최솟값과 최댓값 사이에서 대략적인 수준을 고르게 합니다. 범위 컨트롤은 현재 숫자가 눈에 드러나지 않을 수 있으므로 output과 연결하면 이해하기 쉽습니다. 다음 예에서 기본 경력은 3년이고, 1년 단위로 0년부터 10년까지 선택합니다.

<label for="experience">관련 경력</label>
<input type="range" id="experience" name="experience"
       min="0" max="10" step="1" value="3"
       oninput="experienceValue.value = value">
<output id="experienceValue" for="experience">3</output>년

output은 계산 결과를 나타내며, for에는 결과 계산에 관여하는 컨트롤의 id를 연결할 수 있습니다. min, max, step, value를 함께 읽어 선택 가능한 값의 집합을 확인합니다.

한 개 선택과 복수 선택

라디오 버튼은 같은 name을 공유하는 선택지 중 하나만 고르게 합니다. 한번 선택하면 빈 상태로 돌아가기 어렵기 때문에 ‘선택 안 함’도 유효한 답이라면 그 항목을 명시적으로 제공합니다. 체크박스는 각 항목이 독립적이므로 여러 관심 주제를 동시에 고를 수 있습니다. 초깃값을 선택해 둘 때는 checked를 사용합니다.

<fieldset>
  <legend>관심 주제(복수 선택)</legend>
  <input type="checkbox" id="topic-html" name="topics" value="html">
  <label for="topic-html">HTML</label>
  <input type="checkbox" id="topic-a11y" name="topics" value="accessibility">
  <label for="topic-a11y">웹 접근성</label>
</fieldset>

고정 목록과 추천 목록

select는 준비된 option에서만 선택하게 하고, datalist는 제안을 보여 주면서 목록 밖의 텍스트도 입력할 수 있게 합니다. 따라서 서버가 정확한 코드만 받아야 한다면 select, 도시나 검색어처럼 추천 밖의 답도 허용한다면 datalist가 알맞습니다. 선택지가 많으면 optgroup으로 시각적 범주를 만들 수 있습니다.

<label for="session">참여 세션</label>
<select id="session" name="session" required>
  <option value="" disabled selected>선택하세요</option>
  <optgroup label="오전">
    <option value="html-basics">HTML 기초</option>
    <option value="form-a11y">폼 접근성</option>
  </optgroup>
</select>

<label for="city">접속 도시</label>
<input type="text" id="city" name="city" list="cities">
<datalist id="cities">
  <option value="서울">
  <option value="부산">
  <option value="제주">
</datalist>

option의 화면 텍스트와 value가 다르면 서버에는 value가 전송됩니다. select에는 placeholder가 없으므로 빈 값을 가진 첫 옵션을 비활성·초기 선택 상태로 두어 안내 문구처럼 구성할 수 있습니다. multiple을 켠 기본 다중 선택 UI는 조작이 불편할 수 있어, 경우에 따라 체크박스 목록이 더 명확합니다.

6단계: 날짜·파일·버튼에서 서버 경계를 확인한다

날짜와 시간은 전송 형식을 맞춘다

타입전송 값 형식예
dateYYYY-MM-DD2026-09-12
monthYYYY-MM2026-09
weekYYYY-Www2026-W37
timeHH:mm14:30
datetime-localYYYY-MM-DDTHH:mm2026-09-12T14:30

운영체제와 브라우저에 따라 화면에 보이는 달력·시계 모양은 달라도 제출 값은 정해진 형식을 따릅니다. min·max로 범위를, step으로 간격을 제한할 수 있고, 초기 value도 해당 타입의 형식을 정확히 맞춰야 합니다.

파일 선택은 허용 힌트일 뿐 보안 검사가 아니다

<label for="portfolio">포트폴리오 PDF</label>
<input type="file" id="portfolio" name="portfolio"
       accept="application/pdf,.pdf">

accept는 파일 선택 화면에서 원하는 유형을 골라 보이게 하는 힌트입니다. 다른 파일을 억지로 보낼 가능성까지 차단하지 않으므로 서버가 실제 파일 유형과 크기를 재검사해야 합니다. 여러 파일이면 multiple을 쓰고, 모바일 기기의 직접 촬영을 제안하는 capture는 기기·브라우저 지원 차이가 있음을 고려합니다. 파일이 있는 폼은 앞서 본 multipart/form-data가 필요합니다.

버튼에는 목적을 명시한다

button은 텍스트뿐 아니라 아이콘 같은 내용을 담을 수 있어 표현이 유연합니다. 폼 안의 button은 type을 생략하면 제출 버튼으로 동작하므로, 단순히 미리보기를 여는 버튼에는 반드시 type="button"을 지정합니다. type="reset"은 사용자가 입력한 내용을 한 번에 잃게 할 수 있어 일반적인 폼에서는 피하는 편이 좋습니다.

<button type="button" id="preview-button">입력 내용 미리보기</button>
<button type="submit">워크숍 신청하기</button>

경계 확인: HTML은 입력 의도, 기본 UI, 기본 검증, 제출 구조를 제공합니다. 업무 규칙과 보안 검증은 서버가 최종 책임을 집니다.

완성 사례: 한 신청값이 서버 변수로 바뀌는 과정

<form action="/applications" method="post"
      enctype="multipart/form-data">
  <label for="name">이름</label>
  <input type="text" id="name" name="applicant_name"
         autocomplete="name" required>

  <label for="email">이메일</label>
  <input type="email" id="email" name="email"
         autocomplete="email" required>

  <fieldset>
    <legend>참여 방식</legend>
    <input type="radio" id="online" name="mode" value="online" required>
    <label for="online">온라인</label>
    <input type="radio" id="offline" name="mode" value="offline">
    <label for="offline">오프라인</label>
  </fieldset>

  <label for="date">희망일</label>
  <input type="date" id="date" name="preferred_date"
         min="2026-09-01" max="2026-12-31" required>

  <label for="portfolio-final">포트폴리오 PDF</label>
  <input type="file" id="portfolio-final" name="portfolio"
         accept="application/pdf,.pdf">

  <button type="submit">신청하기</button>
</form>

사용자가 이름 ‘김하늘’, 이메일 ‘sky@example.com’, 온라인, 희망일 ‘2026-09-12’를 선택하면 서버 관점의 핵심 데이터는 applicant_name=김하늘, email=sky@example.com, mode=online, preferred_date=2026-09-12처럼 해석됩니다. 화면의 ‘참여 방식’ 문구가 아니라 선택된 라디오의 name과 value가 전송된다는 점이 핵심입니다.

값이 사라질 때의 디버깅 순서

  1. 컨트롤에 name이 있는지 확인합니다.
  2. 대상 form 안에 있거나 form 속성으로 연결되었는지 확인합니다.
  3. disabled 상태인지 확인합니다.
  4. 라디오·체크박스가 실제로 선택되었는지 확인합니다.
  5. 파일이 있다면 POST와 multipart/form-data인지 확인합니다.
  6. 서버가 기대하는 변수명과 name이 일치하는지 확인합니다.

이 순서는 ‘화면은 정상인데 서버에 값이 없다’는 문제를 DOM 구조, 성공적으로 제출되는 컨트롤, 전송 설정, 서버 계약으로 좁혀 줍니다. 폼을 작성할 때도 같은 순서를 거꾸로 적용하면 누락을 줄일 수 있습니다.

핵심 정리

  • form은 수집 범위이며 action, method, enctype이 전송 방식을 결정합니다.
  • 컨트롤의 type은 사용자의 입력 의도에 맞추고, inputmode는 키보드 힌트로 구분합니다.
  • label은 개별 컨트롤의 이름, fieldset과 legend는 관련 선택지의 그룹 의미를 제공합니다.
  • name 없는 값과 disabled인 값은 제출되지 않으며, readonly 값은 제출됩니다.
  • 라디오는 하나, 체크박스는 복수 선택에 맞고, select는 고정 목록, datalist는 자유 입력을 허용하는 추천 목록입니다.
  • 브라우저 검증과 accept는 사용자 경험을 돕지만, 서버 검증과 보안을 대신하지 않습니다.
  • 폼 안의 button에는 submit 또는 button처럼 목적을 명시합니다.

학습 전략: 폼 요소를 이름별로 외우기보다 ‘무엇을 묻는가 → 어떤 컨트롤이 맞는가 → 질문과 답을 어떻게 연결하는가 → 어느 조건에서 전송되는가 → 서버가 무엇을 다시 검사하는가’의 순서로 코드를 읽으세요. 이 흐름을 설명할 수 있으면 새로운 입력 타입을 만나도 역할과 위험을 스스로 판단할 수 있습니다.

이해도 점검 퀴즈

1. 화면에는 값이 보이지만 일반적인 폼 제출 데이터에서 빠지는 직접적인 원인으로 가장 알맞은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: id는 문서 안 식별과 레이블 연결에 쓰이며 값이 빠지는 원인이 아닙니다.
  • ② 정답: 서버에 보낼 변수명을 나타내는 name이 없으면 해당 값은 제출 데이터의 이름·값 쌍을 만들지 못합니다.
  • ③ 오답: 레이블 연결은 이름과 접근성을 제공하지만 제출을 막지 않습니다.
  • ④ 오답: 자동 완성 설정은 입력 경험을 조절하며 전송 여부를 결정하지 않습니다.

2. PDF 포트폴리오가 포함된 지원서를 서버에 보내는 폼 설정으로 가장 적절한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: GET은 파일 업로드에 필요한 인코딩과 맞지 않고 값이 URL에 노출됩니다.
  • ② 오답: POST는 맞지만 text/plain은 파일과 필드를 나누어 보내는 형식이 아닙니다.
  • ③ 오답: multipart/form-data가 있어도 파일 제출에는 POST 방식이 필요합니다.
  • ④ 정답: 파일과 일반 필드를 함께 전송하는 표준적인 조합입니다.

3. readonly와 disabled의 차이를 바르게 설명한 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 두 상태의 가장 중요한 제출 차이를 정확히 설명합니다.
  • ② 오답: 전송 여부를 서로 반대로 설명했습니다.
  • ③ 오답: 두 속성 모두 사용자가 값을 직접 수정하지 못하게 합니다.
  • ④ 오답: disabled 컨트롤은 제출되지 않으며, 제출되는 값에는 name이 필요합니다.

4. ‘참여 방식’에서 온라인과 오프라인 중 하나만 고르게 하는 접근 가능한 구조는?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: 체크박스는 둘 다 선택될 수 있고 placeholder는 레이블이 아닙니다.
  • ② 오답: id는 고유해야 하며 레이블이 없으면 각 선택의 이름도 약해집니다.
  • ③ 정답: 그룹 질문, 개별 이름, 단일 선택 동작을 모두 표현합니다.
  • ④ 오답: 정해진 두 값 중 하나를 받는 목적에 자유 텍스트는 불필요한 오류를 만듭니다.

5. inputmode="numeric"에 대한 설명으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ③

  • ① 오답: inputmode는 값의 자료형을 변환하지 않습니다.
  • ② 오답: 키보드 힌트일 뿐 완전한 입력 제한이나 검증 규칙이 아닙니다.
  • ③ 정답: 키보드 편의를 제공하고, 형식 검증은 pattern이나 서버 검사 등으로 보완합니다.
  • ④ 오답: 숫자 컨트롤과 키보드 힌트는 목적과 동작이 다릅니다.

6. min="0" max="10" step="2" value="4"인 범위 입력에서 증가 버튼을 두 번 적용한 값은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 4에서 한 번에 2씩 두 번 증가하므로 4 + 2 + 2 = 8입니다.
  • ② 오답: 6은 step을 한 번만 적용한 값입니다.
  • ③ 오답: 10은 최댓값이지만 두 번 증가한 결과는 아닙니다.
  • ④ 오답: 계산도 맞지 않고 max="10" 범위를 넘습니다.

7. 관심 주제는 여러 개, 참여 방식은 하나만 고르게 할 때 올바른 조합은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 단일·복수 선택 목적을 서로 뒤바꿨습니다.
  • ② 오답: 체크박스는 참여 방식도 복수 선택되게 합니다.
  • ③ 오답: 라디오의 name이 다르면 서로 배타적인 한 그룹이 되지 않습니다.
  • ④ 정답: 독립적인 복수 선택과 상호 배타적인 단일 선택을 각각 알맞게 구현합니다.

8. 추천 도시를 보여 주되 사용자가 목록에 없는 도시도 직접 입력하게 하려면?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ②

  • ① 오답: select는 준비된 옵션 밖의 새 값을 직접 입력하기 어렵습니다.
  • ② 정답: datalist는 추천값을 제공하면서 연결된 입력의 자유 입력을 유지합니다.
  • ③ 오답: option은 select나 datalist 안에서 사용합니다.
  • ④ 오답: select에는 placeholder 속성이 없습니다.

9. accept="application/pdf"를 지정한 파일 입력에 대한 판단으로 옳은 것은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ④

  • ① 오답: 클라이언트 속성은 우회될 수 있어 보안 경계가 될 수 없습니다.
  • ② 오답: 파일 이름과 확장자도 조작 가능하므로 내용 유형과 크기 등을 재검사해야 합니다.
  • ③ 오답: accept와 폼의 전송 인코딩은 서로 다른 역할입니다.
  • ④ 정답: 사용자 선택을 돕는 힌트와 서버의 최종 검증 책임을 정확히 구분합니다.

10. 폼 안의 ‘입력 내용 미리보기’ 버튼을 눌렀더니 신청서가 서버로 제출되었다. 가장 직접적인 수정은?

정답입니다.

오답입니다. 답안을 다시 선택해 보세요.

정답 및 해설 보기

정답: ①

  • ① 정답: 폼 안에서 단순 동작을 수행하는 버튼임을 명시해 기본 제출 동작을 막습니다.
  • ② 오답: 제출 변수명까지 없애 데이터 전송 자체를 망가뜨립니다.
  • ③ 오답: 초기화 버튼은 사용자가 입력한 값을 지우므로 문제를 더 키웁니다.
  • ④ 오답: 브라우저 검증을 끌 뿐 버튼의 기본 제출 유형은 바꾸지 않습니다.

참고 자료와 작성 기준

이 글은 해당 차시 강의자료 55쪽 전체를 확인한 뒤, 표지·개요·구분 화면·정리·다음 강의 예고를 본문과 구분하고 학습 흐름에 맞게 재구성한 비공식 학습자료입니다. 강의자료의 개념 범위 안에서 전송 과정, 직접 구성한 워크숍 신청 사례, 상태 비교 실험, 디버깅 절차와 선택지별 해설을 새로 구성했습니다.

  • 작성·편집: 올에이클래스 학습연구팀
  • 주요 근거: 한국방송통신대학교 HTML5웹프로그래밍 4강 「웹 폼」 강의자료 :codex-file-citation{path="K1. 컴퓨터과학과/1. 재검토필요/2-1 HTML5웹프로그래밍/1. 강의록/HTML5웹프로그래밍_04_강의록.pdf" purpose="source"}
  • 보충 자료: 외부 자료를 사용하지 않았으며, 강의자료의 설명 범위 안에서 예제와 판단 절차를 재구성했습니다.
  • 편집 원칙: 올에이클래스 편집 정책
  • 최종 내용 검토: 2026-09-05

댓글