폼 (HTML)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
HTML 폼은 사용자가 데이터를 입력하고 선택할 수 있도록 다양한 종류의 컨트롤(입력 요소)을 제공하며, 웹 페이지에서 사용자 입력을 수집하는 데 사용되는 HTML 요소이다. 텍스트 입력, 선택형 컨트롤, 버튼, 파일 선택 등 다양한 종류의 컨트롤을 포함하며, `
폼 (HTML) |
---|
2. 주요 컨트롤 종류와 기능
HTML 폼은 사용자가 정보를 입력하고 선택할 수 있도록 다양한 컨트롤(입력 요소)을 제공한다. 주요 컨트롤은 다음과 같다.[1]
- 텍스트 입력: 한 줄 또는 여러 줄의 텍스트를 입력할 수 있다.
- 선택형 컨트롤: 체크 상자, 라디오 단추, 메뉴, 드롭다운 목록 등을 통해 여러 항목 중 하나 또는 여러 개를 선택할 수 있다.
- 버튼: 제출 버튼(폼에 입력된 내용을 서버로 전송), 리셋 버튼(폼의 내용을 초기값으로 되돌림), 푸시 버튼(미리 작성된 클라이언트 사이드 스크립트 실행) 등이 있다.
- 기타 컨트롤: 파일 선택 (클라이언트 컴퓨터에 있는 파일을 서버에 업로드), 히든 컨트롤 (웹 브라우저 화면에는 렌더링되지 않지만, 값은 서버로 전송), 오브젝트 컨트롤(표준에서 정의되지 않은 컨트롤도 사용 가능) 등이 있다.
HTML 폼은 `<form>` 요소로 묶이며, 입력된 데이터가 제출될 통신 종점과 HTTP 요청의 HTTP 메서드(GET 또는 POST)를 지정한다.
2. 1. 텍스트 입력
사용자가 텍스트를 입력할 수 있는 컨트롤은 다음과 같다.- `<text>`: 한 줄의 텍스트 입력을 허용하는 간단한 텍스트 상자이다.
- `<email>`: 이메일 주소를 입력하는 `<text>` 유형으로, 부분적인 유효성 검사가 필요하다.
- `<number>`: 숫자를 입력하는 `<text>` 유형이다.
- `<password>`: `<text>`와 유사하며, 입력된 문자가 보이지 않거나 `*`와 같은 기호로 대체되어 보안 목적으로 사용된다.
- `<textarea>`: 여러 줄의 텍스트를 표시하고 입력할 수 있는 입력 필드이다.
- 텍스트 입력 (text input영어): 사용자에게 한 줄 혹은 여러 줄의 텍스트를 입력하게 한다.[1]
HTML5는 이메일 주소를 입력하기 위한 `<email>`, 전화번호를 위한 `<tel>`, 숫자 값을 위한 `<number>` 등 특정 데이터를 입력하고 유효성을 검사하기 위한 여러 입력 태그를 도입했다.[2][3]
2. 2. 선택형 컨트롤

사용자가 여러 항목 중 하나 또는 여러 개를 선택할 수 있는 컨트롤은 다음과 같다.
- '''체크 상자(checkbox영어)''' : 여러 선택지 중에서 원하는 만큼 선택할 수 있다.[1]
- '''라디오 단추(radio buttons영어)''' : 여러 선택지 중에서 하나만 선택할 수 있다.[1]
- '''메뉴(menu영어)''' : 선택 항목 중에서 하나 또는 여러 개를 선택할 수 있다.[1]
- '''드롭다운 목록''' : 사용자가 선택할 수 있는 항목 목록이 아래로 펼쳐지는 방식이다. `<select>` 태그를 사용한다.
오른쪽 샘플 이미지에서 선택형 컨트롤의 예를 확인할 수 있다.
- 성별을 선택하는 라디오 버튼 한 쌍
- 눈 색깔을 선택하는 드롭다운 목록 (선택 상자)
- 해당하는 항목을 선택하는 체크 박스 한 쌍
2. 3. 버튼
- 제출 버튼(submit button영어): 사용자가 실행하면 폼에 입력된 내용을 서버로 전송한다.[1]
- 리셋 버튼(reset button영어): 사용자가 실행하면 폼의 내용을 초기값으로 되돌린다.[1]
- 푸시 버튼(push button영어): 사용자가 실행하면 미리 작성된 클라이언트 사이드 스크립트를 실행한다.[1]
2. 4. 기타 컨트롤
- 제출 버튼(submit button영어): 사용자가 실행하면 폼에 입력된 내용을 서버로 전송한다.
- 리셋 버튼(reset button영어): 사용자가 실행하면 폼의 내용을 초기값으로 되돌린다.
- 푸시 버튼(push button영어): 사용자가 실행하면 미리 작성된 클라이언트 사이드 스크립트를 실행한다.
- 체크 상자(checkbox영어): 사용자에게 여러 선택지 중에서 원하는 만큼 선택하게 한다.
- 라디오 단추(radio buttons영어): 사용자에게 여러 선택지 중에서 하나만 선택하게 한다.
- 메뉴(menu영어): 사용자에게 선택 항목 중에서 하나 또는 여러 개를 선택하게 한다.
- 텍스트 입력(text input영어): 사용자에게 한 줄 또는 여러 줄의 텍스트를 입력하게 한다.
- 파일 선택(file select영어): 클라이언트 컴퓨터에 있는 파일을 서버에 업로드한다.
- 히든 컨트롤(hidden control영어): 웹 브라우저 화면에는 렌더링되지 않지만, 값은 서버로 전송된다. 주로 프로그램 간의 정보 전달에 사용된다.
- 오브젝트 컨트롤(object control영어): 표준에서 정의되지 않은 컨트롤도 사용할 수 있다.[1]
3. HTML 태그
HTML 폼은 `<form>` 태그를 사용하여 정의하며, `<input>`, `<textarea>`, `<select>` 등의 태그를 사용하여 다양한 폼 컨트롤을 생성한다.[1]
폼은 표준 그래픽 사용자 인터페이스 요소로 구성될 수 있다. 오른쪽 샘플 이미지는 이러한 요소의 예를 보여준다.
- 이름을 묻는 텍스트 상자
- 성별 값을 선택하는 라디오 버튼 쌍
- 선택할 눈 색깔 목록을 제공하는 선택 상자
- 해당되는 경우 클릭할 수 있는 한 쌍의 체크 박스
- 운동 능력을 설명하는 텍스트 영역
- 현재 폼 값을 서버로 보내는 제출 버튼
이러한 기본 요소는 가장 일반적인 그래픽 사용자 인터페이스(GUI) 요소를 제공하지만, 트리 뷰 또는 그리드 뷰와 같은 요소는 없다.
그리드 뷰는 각 셀에 텍스트 입력 요소가 포함된 표준 HTML 테이블을 사용하여 비슷하게 만들 수 있다. 트리 뷰는 중첩된 테이블 또는 중첩된 목록을 통해 비슷하게 만들 수 있다. 두 경우 모두 서버 측 프로세스가 정보를 처리하고, 자바스크립트가 사용자 상호 작용을 처리한다. 이러한 인터페이스 요소의 구현은 jQuery와 같은 자바스크립트 라이브러리를 통해 사용할 수 있다.
3. 1. <form> 태그

폼은 HTML `<form>` 요소로 묶입니다. 이 HTML 요소는 폼에 입력된 데이터가 제출되어야 하는 통신 종점(`action` 속성)과 데이터를 제출하는 HTTP 요청의 HTTP 메서드(`method` 속성 - `GET` 또는 `POST`)를 지정합니다.[1]
3. 2. <input> 태그
`<input>` 태그는 대부분의 폼 컨트롤을 생성하는 데 사용되며, `type` 속성을 통해 컨트롤 종류를 지정한다. `<input>` 태그의 `type` 속성에 따른 다양한 컨트롤 종류는 다음과 같다.- `<text>`: 한 줄의 텍스트 입력을 허용하는 간단한 텍스트 상자이다.
- `<email>`: 이메일 주소를 입력하는 `<text>` 유형으로, 부분적인 유효성 검사를 지원한다.
- `<number>`: 숫자를 입력하는 `<text>` 유형이다.
- `<password>`: 입력된 문자가 보이지 않거나 `*`와 같은 기호로 대체되어 보안 목적으로 사용되는 `<text>` 유형이다.
- `<radio>`: 라디오 버튼이다.
- `<file>`: 파일을 업로드하기 위한 파일 선택 컨트롤이다.
- `<reset>`: 활성화되면 브라우저에게 현재 폼의 값을 초기 값으로 복원하도록 지시하는 재설정 버튼이다.
- `<submit>`: 브라우저에게 폼에 대한 작업을 수행하도록 지시하는 버튼 (일반적으로 서버로 전송)이다.
- `<date>`: 사용자가 날짜 또는 날짜 범위를 선택할 수 있는 달력을 표시한다.[2][3]
- `<color>`: 입력된 값이 색상의 올바른 16진수 표현인지 확인하는 텍스트 입력으로 표현되거나, 색상 선택 위젯으로 표현될 수 있다.[4]
HTML 5는 `<email>`, `<tel>`, `<number>`와 같이 특정 데이터를 입력하고 유효성을 검사하기 위한 여러 입력 태그를 도입했다. 또한, 필수 필드, 키보드 포커스, 자리 표시자 텍스트 등을 지정하는 추가 속성도 지원한다.
3. 3. <textarea> 태그
`<textarea>`는 텍스트 상자 입력 필드와 매우 유사하지만, 여러 행의 데이터를 표시하고 입력할 수 있다는 점에서 차이가 있다.[1] 즉, 여러 줄의 텍스트 입력을 위한 컨트롤을 생성한다.3. 4. <select> 태그
`4. 데이터 전송 및 처리
양식은 HTML `<form>` 요소로 묶인다. 이 HTML 요소는 양식에 입력된 데이터가 제출되어야 하는 통신 종점과 데이터를 제출하는 HTTP 요청의 HTTP 메서드인 `GET` 또는 `POST`를 지정한다.
HTML 폼에 입력된 데이터가 제출되면, 폼 요소의 이름과 값은 인코딩되어 HTTP 요청 메시지를 사용하여 GET 또는 POST 방식으로 서버로 전송된다. 역사적으로는 이메일 전송 방식도 사용되었다.[5] 기본 MIME 타입인 `application/x-www-form-urlencoded`는 일반 URI 퍼센트 인코딩 규칙의 초기 버전을 기반으로 하며, 줄 바꿈 정규화 및 공백을 "%20" 대신 "+"로 대체하는 등 여러 가지 수정 사항이 적용되었다. 또 다른 가능한 인코딩 방식인 인터넷 미디어 유형 `multipart/form-data`도 사용 가능하며 POST 기반 파일 제출에 일반적으로 사용된다.
PHP는 서버 측 "프로그래밍"에 사용되는 매우 일반적인 언어 중 하나이며, 웹 프로그래밍을 위해 특별히 만들어진 몇 안 되는 언어 중 하나이다.[6][7]
HTML 폼에서 PHP를 사용하려면, PHP 스크립트의 URL이 폼 태그의 `action` 속성에 지정된다. 그런 다음 대상 PHP 파일은 폼에서 전달된 데이터에 접근하는데, 폼에 사용된 `method` 속성의 값에 따라 PHP의 `$_POST` 또는 `$_GET` 변수를 통해 접근한다. 다음은 `first_name` 입력 필드의 내용을 페이지에 표시하는 기본 폼 핸들러 PHP 스크립트이다.
'''`form.html`'''
```html
```
'''`form_handler.php`'''
```html+php
// "first_name" 외부 변수의 값을 요청하고 필터링합니다.
$firstName = filter_input(INPUT_GET, "first_name", FILTER_SANITIZE_STRING);
?>
```
위의 샘플 코드는 PHP의 `filter_input()` 함수를 사용하여 페이지에 삽입하기 전에 사용자 입력을 정제한다. 보안 폼 프로세서에서 사용자 입력을 먼저 확인하지 않고 단순히 브라우저에 출력(echoing)하는 것은 피해야 한다. 만약 사용자가 `firstname` 필드에 JavaScript 코드 ``을 입력하면, 브라우저는 개발자가 코딩한 것처럼 `form_handler.php` 페이지에서 해당 스크립트를 실행한다. 이런 방식으로 악성 코드가 실행될 수 있다. `filter_input()`는 PHP 5.2에서 도입되었다. 이전 PHP 버전을 사용하는 사용자는 `htmlspecialchars()` 함수 또는 정규 표현식을 사용하여 사용자 입력을 처리하기 전에 정제할 수 있다.
5. 프로그래밍 언어와의 연동
폼은 프로그래밍 언어로 작성된 프로그램과 결합되어 소프트웨어 개발자가 동적인 웹사이트를 만들 수 있도록 한다. 가장 인기 있는 언어는 클라이언트 측 및/또는 서버 측 언어를 모두 포함한다.[6]
어떤 프로그래밍 언어든 서버에서 폼의 데이터를 처리하는 데 사용할 수 있지만, 가장 일반적으로 사용되는 언어는 스크립트 언어이다. 스크립트 언어는 C와 같은 프로그래밍 언어보다 강력한 문자열 처리 기능을 가지고 있으며, 버퍼 오버런 공격을 방지하는 데 도움이 되는 자동 메모리 관리 기능도 갖추고 있다.[6] 웹 사이트의 사실상 표준 클라이언트 측 스크립트 언어는 자바스크립트이다.[6]
자바스크립트를 문서 객체 모델 (DOM)에서 사용하면 브라우저 내에서 웹 페이지를 동적으로 생성하고 수정할 수 있는 동적 HTML 방식이 구현된다.[6]
폼과 함께 사용되는 클라이언트 측 언어는 제한적이지만, 종종 폼 데이터의 사전 데이터 유효성 검사를 수행하거나 서버 측 프로그램으로 전송할 폼 데이터를 준비하는 데 사용될 수 있다. 그러나 이러한 사용법은 HTML5의 새로운 `input` 필드 유형과 `required` 속성으로 대체되고 있다.[6] 서버 측 코드는 기술적 또는 보안상의 이유로 클라이언트 측 코드가 할 수 없는 다양한 작업을 수행하여 동적 웹 사이트를 만들 수 있다. 예를 들어, 로그인 인증, 데이터베이스에서 데이터를 검색하고 저장하는 작업, 맞춤법 검사 기능, 이메일 전송 등이 있다. 서버 측 실행의 중요한 장점은 다양한 기능을 일관되고 웹 표준 방식으로 구현하기 위해 여러 웹 브라우저에 의존하기보다는 서버에 기능을 집중시키는 것이다. 또한, 서버에서 양식을 처리하면 서버 측 실행이 클라이언트가 제공한 데이터를 신뢰하지 않도록 설계되고 HTML 정리와 같은 기술을 포함하는 경우 보안이 강화되는 경우가 많다. 서버 측 코드의 한 가지 단점은 확장성이다. 모든 사용자에 대한 서버 측 처리는 서버에서 발생하지만 클라이언트 측 처리는 개별 클라이언트 컴퓨터에서 발생한다.[6]
웹 개발에서 대화형 폼을 설계하는 데 일반적으로 사용되는 인터프리터 언어는 PHP, 파이썬, 루비, 펄, JSP, 어도비 콜드퓨전 등이 있으며, 일반적으로 사용되는 컴파일 언어는 자바와 C#과 ASP.NET이 있다.[6] PHP는 서버 측 "프로그래밍"에 사용되는 매우 일반적인 언어 중 하나이며, 웹 프로그래밍을 위해 특별히 만들어진 몇 안 되는 언어 중 하나이다.[6][7]
6. 보안
폼 데이터 처리 시에는 보안에 유의해야 한다. 서버 측 실행은 다양한 기능을 일관되고 웹 표준 방식으로 구현하기 위해 여러 웹 브라우저에 의존하기보다는 서버에 기능을 집중시킨다. 서버에서 양식을 처리하면 서버 측 실행이 클라이언트가 제공한 데이터를 신뢰하지 않도록 설계되고, HTML 정리와 같은 기술을 포함하는 경우 보안이 강화되는 경우가 많다.[5]
7. 역사
HTML 폼은 Viola 브라우저에 의해 처음 구현되었다.[9] 폼-투-이메일 스크립트 중 하나는 Matt's Script Archive에서 제작한 [http://www.scriptarchive.com/formmail.html "FormMail.pl"]이었다. 오늘날 이 스크립트는 업데이트 부족, 보안 문제 및 구성의 어려움으로 인해 새로운 개발에 널리 사용되지 않는다.
참조
[1]
웹사이트
HTML/Elements/label
http://www.w3.org/wi[...]
2023-05-19
[2]
웹사이트
Better Web Forms with HTML5 Forms
http://msdn.microsof[...]
Microsoft
2011-11
[3]
웹사이트
Forms – HTML5
http://www.w3.org/TR[...]
W3C
2014-02-20
[4]
웹사이트
input type
[5]
문서
User-agent support for email based [[Hypertext Markup Language|HTML]] form submission, using a 'mailto' [[Uniform Resource Locator|URL]] as the form action, was proposed in RFC 1867 section 5.6, during the HTML 3.2 era. Various web browsers implemented it by invoking a separate email program, using their own rudimentary [[Simple Mail Transfer Protocol|SMTP]] capabilities, or by becoming [[Internet suite]]s by implementing entire [[Email client]]s. Although sometimes unreliable, it was briefly popular as a simple way to transmit form data without involving a web server or [[Common Gateway Interface|CGI]] scripts.
[6]
웹사이트
PHP: Hypertext Preprocessor
http://www.php.net/
[7]
웹사이트
Encyclopedia Web
http://www.lampfire.[...]
[8]
웹사이트
Intro to Online Forms and Form Builders
https://blitzen.com/[...]
[9]
웹사이트
ViolaWWW
https://www.webdesig[...]
Web Design Museum
2022-02-17
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com