폼 (HTML)
1. 개요
HTML 폼은 사용자가 데이터를 입력하고 선택할 수 있도록 다양한 종류의 컨트롤(입력 요소)을 제공하며, 웹 페이지에서 사용자 입력을 수집하는 데 사용되는 HTML 요소이다. 텍스트 입력, 선택형 컨트롤, 버튼, 파일 선택 등 다양한 종류의 컨트롤을 포함하며, `
-
HTML 태그 -
HTML 요소
HTML 요소는 HTML 문서의 기본 단위로서, 시작 태그와 종료 태그, 그리고 콘텐츠를 포함하며, 일반 요소, 원시 텍스트 요소, 빈 요소로 나뉘고 콘텐츠 범주에 따라 포함 가능한 콘텐츠 종류가 결정된다. -
HTML 태그 -
캔버스 요소
캔버스 요소는 HTML 내에서 그래픽을 그릴 수 있는 영역으로, 자바스크립트를 사용하여 그림을 그리며, 그래프, 애니메이션, 게임 등에 활용되고 래스터 기반으로 즉시 모드로 그려진다. -
HTML -
Alt 속성
`alt` 속성은 HTML의 `img` 및 `area` 태그에서 이미지를 로드할 수 없을 때 대체 텍스트를 지정하며, 스크린 리더 및 SEO에 영향을 미치고, W3C 지침에 따라 이미지의 의미를 전달하거나 장식용 이미지는 빈 문자열로 지정해야 한다. -
HTML -
폰트 패밀리 (HTML)
폰트 패밀리(HTML)는 CSS 스타일 시트, 인라인 CSS, HTML `font` 태그를 통해 웹 페이지 글꼴을 지정하는 방법으로, 사용자 기기에 설치된 글꼴에 따라 표현이 달라지며, CSS의 `font-family` 속성은 글꼴 모양을 식별하고 제네릭 폰트와 글꼴 대체 메커니즘을 통해 일관된 글꼴 표현을 가능하게 한다. -
그래픽 사용자 인터페이스 -
메트로 (디자인 언어)
마이크로소프트가 스위스 그래픽 디자인과 런던 지하철 표지판에서 영감을 받아 개발한 메트로 디자인 언어는 큰 텍스트, 간결한 타이포그래피, 라이브 타일 등의 특징을 가지며 Windows, Xbox, Microsoft Office 등 다양한 제품에 적용되었고, 상표권 문제와 함께 명칭 변경 및 MDL2로 진화하며 사용자 경험에 대한 엇갈린 평가를 받았다. -
그래픽 사용자 인터페이스 -
작업 표시줄
작업 표시줄은 윈도우 운영체제에서 화면 하단에 위치하여 프로그램 실행, 창 관리, 시스템 상태 확인 기능을 제공하는 사용자 인터페이스 요소이며, 윈도우 95부터 도입되어 다양한 사용자 정의 설정을 지원하며 발전해 왔다.
2. 주요 컨트롤 종류와 기능
HTML 폼은 사용자가 정보를 입력하고 선택할 수 있도록 다양한 컨트롤(입력 요소)을 제공한다. 주요 컨트롤은 다음과 같다.
* 텍스트 입력: 한 줄 또는 여러 줄의 텍스트를 입력할 수 있다.
* 선택형 컨트롤: 체크 상자, 라디오 단추, 메뉴, 드롭다운 목록 등을 통해 여러 항목 중 하나 또는 여러 개를 선택할 수 있다.
* 버튼: 제출 버튼(폼에 입력된 내용을 서버로 전송), 리셋 버튼(폼의 내용을 초기값으로 되돌림), 푸시 버튼(미리 작성된 클라이언트 사이드 스크립트 실행) 등이 있다.
* 기타 컨트롤: 파일 선택 (클라이언트 컴퓨터에 있는 파일을 서버에 업로드), 히든 컨트롤 (웹 브라우저 화면에는 렌더링되지 않지만, 값은 서버로 전송), 오브젝트 컨트롤(표준에서 정의되지 않은 컨트롤도 사용 가능) 등이 있다.
HTML 폼은 `<form>` 요소로 묶이며, 입력된 데이터가 제출될 통신 종점과 HTTP 요청의 HTTP 메서드(GET 또는 POST)를 지정한다.
2.1. 텍스트 입력
사용자가 텍스트를 입력할 수 있는 컨트롤은 다음과 같다.
* `<text>`: 한 줄의 텍스트 입력을 허용하는 간단한 텍스트 상자이다.
* `<email>`: 이메일 주소를 입력하는 `<text>` 유형으로, 부분적인 유효성 검사가 필요하다.
* `<number>`: 숫자를 입력하는 `<text>` 유형이다.
* `<password>`: `<text>`와 유사하며, 입력된 문자가 보이지 않거나 `*`와 같은 기호로 대체되어 보안 목적으로 사용된다.
* `<textarea>`: 여러 줄의 텍스트를 표시하고 입력할 수 있는 입력 필드이다.
* 텍스트 입력 (text input영어): 사용자에게 한 줄 혹은 여러 줄의 텍스트를 입력하게 한다.
HTML5는 이메일 주소를 입력하기 위한 `<email>`, 전화번호를 위한 `<tel>`, 숫자 값을 위한 `<number>` 등 특정 데이터를 입력하고 유효성을 검사하기 위한 여러 입력 태그를 도입했다.
2.2. 선택형 컨트롤
사용자가 여러 항목 중 하나 또는 여러 개를 선택할 수 있는 컨트롤은 다음과 같다.
* 체크 상자(checkbox영어) : 여러 선택지 중에서 원하는 만큼 선택할 수 있다.
* 라디오 단추(radio buttons영어) : 여러 선택지 중에서 하나만 선택할 수 있다.
* 메뉴(menu영어) : 선택 항목 중에서 하나 또는 여러 개를 선택할 수 있다.
* 드롭다운 목록 : 사용자가 선택할 수 있는 항목 목록이 아래로 펼쳐지는 방식이다. `<select>` 태그를 사용한다.
오른쪽 샘플 이미지에서 선택형 컨트롤의 예를 확인할 수 있다.
* 성별을 선택하는 라디오 버튼 한 쌍
* 눈 색깔을 선택하는 드롭다운 목록 (선택 상자)
* 해당하는 항목을 선택하는 체크 박스 한 쌍
2.3. 버튼
* 제출 버튼(submit button영어): 사용자가 실행하면 폼에 입력된 내용을 서버로 전송한다.
* 리셋 버튼(reset button영어): 사용자가 실행하면 폼의 내용을 초기값으로 되돌린다.
* 푸시 버튼(push button영어): 사용자가 실행하면 미리 작성된 클라이언트 사이드 스크립트를 실행한다.
2.4. 기타 컨트롤
* 제출 버튼(submit button영어): 사용자가 실행하면 폼에 입력된 내용을 서버로 전송한다.
* 리셋 버튼(reset button영어): 사용자가 실행하면 폼의 내용을 초기값으로 되돌린다.
* 푸시 버튼(push button영어): 사용자가 실행하면 미리 작성된 클라이언트 사이드 스크립트를 실행한다.
* 체크 상자(checkbox영어): 사용자에게 여러 선택지 중에서 원하는 만큼 선택하게 한다.
* 라디오 단추(radio buttons영어): 사용자에게 여러 선택지 중에서 하나만 선택하게 한다.
* 메뉴(menu영어): 사용자에게 선택 항목 중에서 하나 또는 여러 개를 선택하게 한다.
* 텍스트 입력(text input영어): 사용자에게 한 줄 또는 여러 줄의 텍스트를 입력하게 한다.
* 파일 선택(file select영어): 클라이언트 컴퓨터에 있는 파일을 서버에 업로드한다.
* 히든 컨트롤(hidden control영어): 웹 브라우저 화면에는 렌더링되지 않지만, 값은 서버로 전송된다. 주로 프로그램 간의 정보 전달에 사용된다.
* 오브젝트 컨트롤(object control영어): 표준에서 정의되지 않은 컨트롤도 사용할 수 있다.
3. HTML 태그
HTML 폼은 `<form>` 태그를 사용하여 정의하며, `<input>`, `<textarea>`, `<select>` 등의 태그를 사용하여 다양한 폼 컨트롤을 생성한다.
폼은 표준 그래픽 사용자 인터페이스 요소로 구성될 수 있다. 오른쪽 샘플 이미지는 이러한 요소의 예를 보여준다.
* 이름을 묻는 텍스트 상자
* 성별 값을 선택하는 라디오 버튼 쌍
* 선택할 눈 색깔 목록을 제공하는 선택 상자
* 해당되는 경우 클릭할 수 있는 한 쌍의 체크 박스
* 운동 능력을 설명하는 텍스트 영역
* 현재 폼 값을 서버로 보내는 제출 버튼
이러한 기본 요소는 가장 일반적인 그래픽 사용자 인터페이스(GUI) 요소를 제공하지만, 트리 뷰 또는 그리드 뷰와 같은 요소는 없다.
그리드 뷰는 각 셀에 텍스트 입력 요소가 포함된 표준 HTML 테이블을 사용하여 비슷하게 만들 수 있다. 트리 뷰는 중첩된 테이블 또는 중첩된 목록을 통해 비슷하게 만들 수 있다. 두 경우 모두 서버 측 프로세스가 정보를 처리하고, 자바스크립트가 사용자 상호 작용을 처리한다. 이러한 인터페이스 요소의 구현은 jQuery와 같은 자바스크립트 라이브러리를 통해 사용할 수 있다.
3.1. <form> 태그
폼은 HTML `<form>` 요소로 묶입니다. 이 HTML 요소는 폼에 입력된 데이터가 제출되어야 하는 통신 종점(`action` 속성)과 데이터를 제출하는 HTTP 요청의 HTTP 메서드(`method` 속성 - `GET` 또는 `POST`)를 지정합니다.
3.2. <input> 태그
`<input>` 태그는 대부분의 폼 컨트롤을 생성하는 데 사용되며, `type` 속성을 통해 컨트롤 종류를 지정한다. `<input>` 태그의 `type` 속성에 따른 다양한 컨트롤 종류는 다음과 같다.
* `<text>`: 한 줄의 텍스트 입력을 허용하는 간단한 텍스트 상자이다.
* `<email>`: 이메일 주소를 입력하는 `<text>` 유형으로, 부분적인 유효성 검사를 지원한다.
* `<number>`: 숫자를 입력하는 `<text>` 유형이다.
* `<password>`: 입력된 문자가 보이지 않거나 `*`와 같은 기호로 대체되어 보안 목적으로 사용되는 `<text>` 유형이다.
* `<radio>`: 라디오 버튼이다.
* `<file>`: 파일을 업로드하기 위한 파일 선택 컨트롤이다.
* `<reset>`: 활성화되면 브라우저에게 현재 폼의 값을 초기 값으로 복원하도록 지시하는 재설정 버튼이다.
* `<submit>`: 브라우저에게 폼에 대한 작업을 수행하도록 지시하는 버튼 (일반적으로 서버로 전송)이다.
* `<date>`: 사용자가 날짜 또는 날짜 범위를 선택할 수 있는 달력을 표시한다.
* `<color>`: 입력된 값이 색상의 올바른 16진수 표현인지 확인하는 텍스트 입력으로 표현되거나, 색상 선택 위젯으로 표현될 수 있다.
HTML 5는 `<email>`, `<tel>`, `<number>`와 같이 특정 데이터를 입력하고 유효성을 검사하기 위한 여러 입력 태그를 도입했다. 또한, 필수 필드, 키보드 포커스, 자리 표시자 텍스트 등을 지정하는 추가 속성도 지원한다.
3.3. <textarea> 태그
`<textarea>`는 텍스트 상자 입력 필드와 매우 유사하지만, 여러 행의 데이터를 표시하고 입력할 수 있다는 점에서 차이가 있다. 즉, 여러 줄의 텍스트 입력을 위한 컨트롤을 생성한다.
3.4. <select> 태그
`
3.5. <label> 태그
HTML 4는 사용자 인터페이스에서 캡션을 나타내기 위한 `<label>` 태그를 도입했으며, 레이블 태그의 `for` 속성에서 컨트롤의 `id` HTML 속성을 지정하여 특정 폼 컨트롤과 연결할 수 있다. 이렇게 하면 창 크기가 조정될 때 레이블이 해당 요소와 함께 유지되고, 라디오 버튼 또는 체크박스의 레이블을 클릭하면 관련 입력 요소가 활성화되는 등 더 데스크톱과 유사한 기능을 사용할 수 있다.
4. 데이터 전송 및 처리
양식은 HTML `<form>` 요소로 묶인다. 이 HTML 요소는 양식에 입력된 데이터가 제출되어야 하는 통신 종점과 데이터를 제출하는 HTTP 요청의 HTTP 메서드인 `GET` 또는 `POST`를 지정한다.
HTML 폼에 입력된 데이터가 제출되면, 폼 요소의 이름과 값은 인코딩되어 HTTP 요청 메시지를 사용하여 GET 또는 POST 방식으로 서버로 전송된다. 역사적으로는 이메일 전송 방식도 사용되었다. 기본 MIME 타입인 `application/x-www-form-urlencoded`는 일반 URI 퍼센트 인코딩 규칙의 초기 버전을 기반으로 하며, 줄 바꿈 정규화 및 공백을 "%20" 대신 "+"로 대체하는 등 여러 가지 수정 사항이 적용되었다. 또 다른 가능한 인코딩 방식인 인터넷 미디어 유형 `multipart/form-data`도 사용 가능하며 POST 기반 파일 제출에 일반적으로 사용된다.
PHP는 서버 측 "프로그래밍"에 사용되는 매우 일반적인 언어 중 하나이며, 웹 프로그래밍을 위해 특별히 만들어진 몇 안 되는 언어 중 하나이다.
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. 프로그래밍 언어와의 연동
폼은 프로그래밍 언어로 작성된 프로그램과 결합되어 소프트웨어 개발자가 동적인 웹사이트를 만들 수 있도록 한다. 가장 인기 있는 언어는 클라이언트 측 및/또는 서버 측 언어를 모두 포함한다.
어떤 프로그래밍 언어든 서버에서 폼의 데이터를 처리하는 데 사용할 수 있지만, 가장 일반적으로 사용되는 언어는 스크립트 언어이다. 스크립트 언어는 C와 같은 프로그래밍 언어보다 강력한 문자열 처리 기능을 가지고 있으며, 버퍼 오버런 공격을 방지하는 데 도움이 되는 자동 메모리 관리 기능도 갖추고 있다. 웹 사이트의 사실상 표준 클라이언트 측 스크립트 언어는 자바스크립트이다.
자바스크립트를 문서 객체 모델 (DOM)에서 사용하면 브라우저 내에서 웹 페이지를 동적으로 생성하고 수정할 수 있는 동적 HTML 방식이 구현된다.
폼과 함께 사용되는 클라이언트 측 언어는 제한적이지만, 종종 폼 데이터의 사전 데이터 유효성 검사를 수행하거나 서버 측 프로그램으로 전송할 폼 데이터를 준비하는 데 사용될 수 있다. 그러나 이러한 사용법은 HTML5의 새로운 `input` 필드 유형과 `required` 속성으로 대체되고 있다. 서버 측 코드는 기술적 또는 보안상의 이유로 클라이언트 측 코드가 할 수 없는 다양한 작업을 수행하여 동적 웹 사이트를 만들 수 있다. 예를 들어, 로그인 인증, 데이터베이스에서 데이터를 검색하고 저장하는 작업, 맞춤법 검사 기능, 이메일 전송 등이 있다. 서버 측 실행의 중요한 장점은 다양한 기능을 일관되고 웹 표준 방식으로 구현하기 위해 여러 웹 브라우저에 의존하기보다는 서버에 기능을 집중시키는 것이다. 또한, 서버에서 양식을 처리하면 서버 측 실행이 클라이언트가 제공한 데이터를 신뢰하지 않도록 설계되고 HTML 정리와 같은 기술을 포함하는 경우 보안이 강화되는 경우가 많다. 서버 측 코드의 한 가지 단점은 확장성이다. 모든 사용자에 대한 서버 측 처리는 서버에서 발생하지만 클라이언트 측 처리는 개별 클라이언트 컴퓨터에서 발생한다.
웹 개발에서 대화형 폼을 설계하는 데 일반적으로 사용되는 인터프리터 언어는 PHP, 파이썬, 루비, 펄, JSP, 어도비 콜드퓨전 등이 있으며, 일반적으로 사용되는 컴파일 언어는 자바와 C#과 ASP.NET이 있다. PHP는 서버 측 "프로그래밍"에 사용되는 매우 일반적인 언어 중 하나이며, 웹 프로그래밍을 위해 특별히 만들어진 몇 안 되는 언어 중 하나이다.
6. 보안
폼 데이터 처리 시에는 보안에 유의해야 한다. 서버 측 실행은 다양한 기능을 일관되고 웹 표준 방식으로 구현하기 위해 여러 웹 브라우저에 의존하기보다는 서버에 기능을 집중시킨다. 서버에서 양식을 처리하면 서버 측 실행이 클라이언트가 제공한 데이터를 신뢰하지 않도록 설계되고, HTML 정리와 같은 기술을 포함하는 경우 보안이 강화되는 경우가 많다.