인스타그램을 보던 중, HTML5에 대한 인터뷰 내용이 있어 얼마나 알고 있는지 문제를 푸는데.. 어? 사용방법은 아는데, 막상 글이나 말로 설명을 하려고하니 막히는 현상이 나타났다.
나름, 오랜시간 이 업무를 하고 있으면서 누가 나에게 물어보면 정확히 대답을 해야될거 같다는 생각이 들어 해당 인터뷰 내용을 바탕으로 답을 달아보기로 하였다.
출처는 다음과 같다. 인스타그램 - htmldoodler
'시맨틱'은 의미가 있는이라는 형용사로, '시맨틱 태그'는 의미가 있는 태그를 말을 한다.
과거 HTML에서는 <div>, <span>과 같이 의미가 없는 태그들로 작업이 이뤄졌다. 이러한 것을 HTML5에서는 다양한 시맨틱한 태그를 이용하여 코드만으로 해당 페이지의 으미를 알 수 있도록 제정 되었다. 대표적으로 아래의 이미지를 볼 수 있다.

여기서 말하는 normal doctype은 HTML5 이전의 버전을 이야기 하는 것이라 생각하여 정리하였다.
과거 HTML5 이전 버전은 다양한 모드가 존재하였다.
HTML4의 존재하는 모드는
strict - 엄격모드, transitional - 호환모드, frameset - 프레임 모드 가 존재하였으며, 이러한 모드별로 doctype 선언을 해야만 하였다.
하지만, HTML5에서는 이러한 것을 모두 아래와 같이 선언 하나로 끝내버린다.
<!DOCTYPE html>
heading(h1, h2, h3) : 웹페이지 본문에 위치하며, 페이지의 제목을 나타내는 태그이다. 또한 h1 > h6 순차적으로 페이지의 부제목을 지정할 수 있다.
title : <head> 태그 내 위치하며, 웹페이지의 제목을 입력을 하는 태그이다. 하지만, 이 태그는 페이지 본문에 노출되는 것이 아니라, 브라우저 상단정보 영역에 노출되는 텍스트 태그이다.
h1 ~ h6 까지 총 6개의 heading 태그가 존재합니다.
script파일은 <body> 태그 아래 놓습니다. 그 이유는 다음과 같습니다.
html 파싱시 dom과 cssom이 만들어지는데, script가 그 안에 들어가게되면 제어권을 script가 가져오게 됩니다. 제어권을 가져온 script는 다운/실행이 모두 완료가 될때까지 html이 파싱이되는 것이 중지가 됩니다.
파싱이 중지가 된 html은 페이지가 최적화되지 않은 것처럼 보이기 때문에 이러한 현상을 없애기위해 <body> 아래 위치하는게 좋습니다.
figure : html 문서에 있는 일러스트,다이어그램, 사진 또는 코드 목록과 같은 자체 포함된 콘텐츠를 추가하는데 사용.
image : html에 사진(이미지) 추가시 사용되는 태그
<figure>
<img src="url">
<figcaption>content</figcaption>
</figure>
secrtion: HTML5 시맨틱 태그로 본문, 카테고리등과 같이 태그내 의미가 있는 태그입니다.
div: 기본 block요소 태그로 의미가 없습니다.
class와 id 모두 태그를 불러오는 것이미지만, 사용방법과 중복유/무에 차이가 있습니다.
class: ' . '으로 불로오며, 중복 사용이 가능하다.
id: ' # '으로 불러오며, 중복 사용이 불가능하다.
canvas : 비트맵 그래픽을 표현
- 해상도에 의존한다.
- 이벤트 핸들러에 대한 지원이 없다
- 텍스트 렌더링에 기능 미약
png,jpg로 생성 된 이미지를 저장할 수 있음- 그래픽 집약적인 게임에 적합
svg : 확장 가능한 벡터 그래픽을 표현
- 해상도에 독립적이다.
- 이벤트 핸들러에 대한 지원
- 가장 큰 렌더링 분야와 응용 프로그램에 적합(예시: 구글지도)
- DOM이 복잡해지면 렌더링도 느려짐.
<meta> 태그 추가<meta name="viewport" content="width=device-width,initial-scale=1"><embed>: 외부 애플리케이션이나 대화형 콘텐츠를 포함시길 수 있는 컨네이너를 정의(웹 페이지에 사운드, 영상 파일을 삽입하는 태그)
<audio> : 사운드 파일을 재상하기 위한 태그
<video> : 영상 파일을 재생하기 위한 태그
number, date, month, week, time, email, search, tel, url, range 등이 있다.
이미지 일부에 링크를 걸수 있는 것으로, img 태그에 usemap=""값을 주어 <map> 태그를 이용하여 맵핑을 시켜준다.
<b>속성과 <strong>태그의 차이점은?)<b> : 시각적으로 주변 글씨보다 굵게 노출되나 강조의 의미는 없다.
<strong> : 시각적으로 주변글씨보다 굵게 노출되며, 매우 중요하다는 의미가 부여된다.
<i> tag and <em> tag<i> 태그와 <em> 태그의 차이점은?)기술용어, 외국어 구절, 등장인물의 생각등 특정한 이유로 주변과 다르게 기울림을 주는 텍스트
<i> : 기울림체로 변경로 변경하며 의미는 존재하지 않는다.
<em> : 기울림체로 변경하며 주위의 내용보다 강조할때 쓰인다.
<form> : 하나의 입력양식을 묶어주기 위한 태그
<label> : 폼 요소에 레이블을 붙이기 위해 <label> 태그를 사용한다. 이를 사용시 폼 요소와 레이블 텍스트가 서로 연결되어 있는 것을 브라우저가 인식한다.
<fieldset>: <form> 태그 내부에서 영역을 구분 지을 수 있다.
<legend> : <form> 태그 내부에서 제목 영역이다.
웹 스토리지도 쿠키처럼 클라이언트 쪽에 정보를 저장할 수있는 storage로 HTML5에 추가되었다.
통신시 마다 전송하지 않는다는 점이 기존 쿠키와는 차이점이다. 용량의 차이도 쿠키는 4KB와 달리 약 5MB의 상대적으로 큰 용량을 갖는다.
HTML5에는 2개의 storage가 존재한다.
Local Storage : 사용자가 지우지 않는다면 데이터가 영구적으로 지워지지 않습니다.
Session Storage : 데이터 삽입/삭제/조회는 Local Storage와 동일히나, 브라우저 탭을 닫으면 데이터가 사라집니다.
Geolocaltion API : 본인이 사용하고 있는 PC의 현재의 위도 및 경도를 얻는 API. 이는 모바일과 같이 GPS가 탑재되지 않더라도, PC의 IP주소로 위치를 확인하는 기술이다.
HTML5에서는 앞서 9번 문제와 같이 svg와 canvas를 이용하여 그래픽 처리를 대체할 수 있다. (기존에 플래시, 실버라이트로 했던 것들)

이미지로 페이지 구성요소를 확인 해보자.
종류가 너무 방대하여 아래의 링크를 참고하면 좋을거 같다.
우주방랑자 - [HTML] 메타(meta) 태그 정리 / 메타 태그 종류
2차원의 비트맵 이미지 프로세싱이 가능하고 동적인 그래픽 랜더링을 스크립트로 제어가능.
별도의 브라우저 플러그인을 이용하지 않고 미디어를 웹 페이지에 쉽게 추가할 수 있음
draggable 속성이 가질 수 있는 값 : true,false,값 없음
브라우저가 사용자의 지리적 위치를 찾아내고 그 정보를 어플리케이션에서 이용할 수 있도록 하는 기능
더알아보기 : 브이핏 - 28강 - HTML API 종류
지금까지 작성한 모든 문제가 차이점이다. <doctype> 부터 추가로 생성된 태그 및 API 너무나 많은 차이가 있다.
inline: block요소 안에 포함되어 있으며, inline요소 안에 다른 inline 요소가 들어갈 수 있습니다. 그리고 기본적으로 컨텐츠가 끝나는 지점까지 넓이로 가지고 가게 됩니다.
임의로 width, height를 지정할 수 없습니다.
block: 모든 inline 요소를 포함할 수 있고, 다른 block 요소도 일부(!) 포함할 수 있습니다. 그리고 가로폭 전체의 넓이를 가지는 직사각형 형태이며, width, height, margin, padding 등을 사용하여 형태를 변경할 수 있습니다.
<div> 와 <span>의 차이점은?)<div>: block 요소이다.
<span> : inline 요소이다.
두 개의 차이점은 24번 문제와 같다.
HTML5의 drag and drop API를 사용하면 이미지를 드래그기능을 넣을 수 있다. 자세한 건 아래의 링크에서 확인 할 수 있다.
web.dev - HTML5 드래그 앤 드롭 API 사용
<header> and <footer>elements?<header>와 <footer>를 넣을 수 있나요?)넵, 여러개를 넣을 수 있습니다.
다만, <header>안에 <header>를 넣는 것은 불가능합니다.
<article> element can have <section> elements and vice-versa?<article> 요소내에 <section>을 넣을 수 있나요? 아니면, 그 반대일까요?)<article> : 내용이 각기 독립적이고, 홀로 설 수 있는 내용을 담는다.
<section> : 서로 관계 있는 문서를 분리하는 역할을 한다. (주로, 문서를 다른 주제로 구분짓기 위해 사용됨)
위와 같은 기본적인 의미를 생각 한다면 <section>안에 <article>이 여러 개 들어가는 것은 조금 부자연스러울 수 있다. 왜냐하면 서로 관련 있는 내용을 모아 놓아야 할 <section>안에 각각이 독립된 <article>이 들어가 서로 다른 내용의 독립 <article>이 배치되기 때문이다.