폼 (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` 속성은 글꼴 모양을 식별하고 제네릭 폰트와 글꼴 대체 메커니즘을 통해 일관된 글꼴 표현을 가능하게 한다. -
월드 와이드 웹 -
구글
-
월드 와이드 웹 -
온라인 언론
온라인 언론은 인터넷을 통해 뉴스 및 정보를 제공하며, 디지털 기술 발달과 함께 성장하여 시민 저널리즘 부상, 정보 전달 속도 혁신 등의 특징을 보이지만 정보 신뢰성 문제, 전통 언론 쇠퇴 등의 과제를 안고 있다.
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 정리와 같은 기술을 포함하는 경우 보안이 강화되는 경우가 많다.