UI를 위한 Tag가 아니라, 웹 페이지의 Meta Data를 설정하기 위한 Tag에 관련한 포스팅입니다.
기본적인 HTML 코드는 다음과 같은 구조를 가지고 있는데, 오늘은 <Head>
태그의 자식이 될 태그들에 대해서 살펴보겠습니다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>JS Bin</title>
</head>
<body></body>
</html>
<head>
태그 안에 작성해주는 meta data Tags에 대해 알아보기 전에, <head>
의 부모에 대해서 알아보자.
<!DOCTYPE html>
<!DOCTYPE html>
은 DTD(Document Type Definition)이라고 불리는데, 브라우저에게 현재 웹페이지의 형식을 알리기 위한 태그다.<!DOCTYPE html>
을 써주면 된다. 브라우저는 해당 문서를 html 5버전으로 해석하게 된다.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
을 써주면 된다.<html>
<html>
로 시작해서 </html>
로 끝나게 된다.lang
속성을 사용하여 문서의 메인 언어가 무엇인지 명시해준다.<head>
<head>
태그에서는 해당 웹페이지의 메타데이터를 작성하거나 외부 파일들을 링크한다. <body>
는 사용자에게 보여질 부분의 최상위 컨테이너 역할을 한다면, <head>
는 UI적 요소가 아니라, 구글에서 검색할 때 나오는 타이틀이나 부가설명 그리고 북마크 추가할 때 나오는 제목이나 아이콘들이 정의되어 있다. 또 CSS 파일을 연결하는 것을 HEAD에서 한다. 즉, 사용자에게 보여지는 것이 아닌 메타 데이터들이 담기는 곳이다.<head>
의 자식으로 메타데이터를 담는 태그들은 다음과 같다.<base>
, <link>
, <meta>
, <style>
, <title>
지금부터 MetaData를 위한 Tag들을 하나씩 알아보자
<base>
href
와 target
이 있는데, href
에 base URL을 작성해주면 된다.<base>
로 base URL을 지정해주면, 해당 웹 페이지에서 연결되는 다른 웹 페이지 경로는 상대경로만 작성해주면 된다. base URL이 prefix가 되어 알아서 붙게된다. 즉 <base>
를 사용하면 링크 주소를 상대주소만 써줘도 된다는 편의를 얻을 수 있다..
을 /
앞에 붙여써줘야 된다. 만약 .
가 빠지면 base 태그에서 사용된 base URL을 붙여주지 않는다. ./
를 둘 다 빼주면 base URL이 적용된다.href="./abcde/"
또는 href="abcde/"
<!DOCTYPE html>
<html>
<head>
<base href="https://abcd.com">
</head>
<body>
<a href ="./abcde/">이동</a>
</body>
</html>
위의 예시에서 앵커 태그를 클릭하면 https://abcd.com/abcde
로 이동하게 된다.
내부에 선언된 CSS 링크와 이미지 주소도 모두 base 태그가 적용된다.
주의할 점
하나의
<head>
에는 하나의<base>
태그만 존재해야 한다.
<title>
<title>제목 제목</title>
과 같이 작성한다.<link>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<link>
는 외부 리소스와의 연결을 정의한다. 주로 다른 html 문서와 CSS 파일을 로드하기 위해 사용하며, 파비콘을 연결하는 등 여러가지로 쓰일 수 있다.rel
과 href
가 있다. rel="stylesheet"
으로 사용한다. 가져올 파일이 현재 웹페이지의 Stylesheet로 사용될 것임을 명시한다. 더 다양한 관계가 존재한다.rel="shortcut icon"
을 사용하면 된다.rel="alterante stylesheet"
처럼 alternate를 앞에 붙여 써주면 된다.<script>
<script>
의 start tag와 end tag사이에 Javacript 코드를 작성하면(즉, 컨텐츠가 JS 코드) Client Side에서 JS를 정의할 수 있다. <script>
의 src
속성을 사용하면, 외부 JS 파일을 로드할 수 있다.<head>
<script>
document.addEventListener("click", function () {
alert("Clicked!");
});
</script>
<script src="main.js"></script>
</head>
<script>
를 불러오는 시점<head>
+ <script>
<head>
<script src="main.js"></script>
</head>
<script>
를 만나게 되면, blocked 상태로 JS파일을 fetching하고 실행까지 한 후, 다음 줄을 parsing한다.<body>
+ <script>
<body>
contents ....
contents ....
<script src="main.js"></script>
</body>
<body>
최하단에 <script>
를 작성하는 방식이다. <head>
+ <head async src="">
<head>
<script async src="main.js"></script>
<script async src="a.js"></script>
<script async src="b.js"></script>
</head>
<script async>
를 사용하게 되면, 말 그대로 비동기적으로 요청을 하게 되어 병렬로 fetching을 진행한다.<script async>
를 만나면 서버에 JS 파일을 요청하자마자 다음 줄을 parsing한다. 요청한 파일이 모두 도착하면 브라우저는 하던 일을 멈추고 도착한 JS 코드를 실행한다. 도착한 JS 파일의 실행이 끝나면 다시 parsing을 시작한다. <script>
를 작성한 순서대로 진행되지만 fetching이 완료되는 순서가 다를 수 있다. 위의 예시에서 b.js
는 a.js
가 우선되어야 하는 작업이지만 b.js
가 먼저 fetching이 완료되면 에러가 발생하게 된다. 의존성이 없는 JS 코드에 ASYNC를 사용하자.<head>
+ <head defer src="">
<head>
<script defer src="a.js"></script>
<script defer src="b.js"></script>
<script defer src="c.js"></script>
</head>
<script defer>
또한 브라우저가 parsing을 하면서, 병렬로 fetching을 한다. 그러나 fetching이 완료되자마자 실행되는 async와는 다르다.<script>
를 작성하곤 하는데, 만약 번들러가 없다면 보통 <script defer>
를 사용하면 적합하다. 의존성이 없는 두 개의 파일을 불러온다면 <script async>
가 적합할 것이다. <meta>