여러 대의 컴퓨터를 하나로 연결해주는 거대한 통신망.
(사용하다 보니 연결된 컴퓨터 간의 정보 교환을 위한 시스템 필요.)
→ world wide web → web(웹) 탄생
인터넷과 웹을 통해 공유할 웹 사이트를 만드는 일과 이를 서비스하기 위해 필요한 다양한 환경을 구축하는 일.
→ 이때 필요한 언어가 HTML & CSS

웹브라우저를 통해 표시되는 웹페이지의 콘텐츠를 정의하기 위해 사용하는 언어.
과정 : HTML 문서(코드) 작성 → 웹 브라우저에서 코드 해석 (렌더링) → 웹 브라우저 화면에 콘텐츠 표시
HTML 문서
: 코드 결국 텍스트이기 때문에 코드를 작성할 때는 메모장으로 데표되는 텍스트 편집 전용 프로그램을 사용해 'HTML 문서'를 만들어야 한다.
- HTML 문서는 응용 프로그램에 따라 다른 형태로 열린다.
( 코드를 보고 싶다면 편집기로, 웹 페이지를 보고 싶다면 웹브라우저로 열면 된다. )
- 웹 : Chrome
- 코드 : Visual Studio Code
- 플러그인 : Live Server
위 세팅을 기반으로 연습하고 작성했다.


태그의 구성요소
- 태그의 이름 (태그명)
- 여는 태그 (시작 태그)
- 닫는 태그 (끝 태그)
- 콘텐츠 → 태그가 표시할 내용
태그의 기본 형태
: <태그명>콘텐츠</ 태그명>
태그의 기능만 사용할 경우
- 콘텐츠 생략하고 단일 태그를 사용한다.
단일 태그 형태
: <태그명> <태그명 />
태그 작성시 주의 사항
1) 태그 이름은 소문자로 쓴다.
2) 여는 태그와 닫는 태그를 정확히 입력한다.
3) 태그의 콘텐츠로 또 다른 태그가 포함될 수 있다.
4) 들여쓰기를 적절하게 사용하는 것이 좋다. (★권장★)
- <p>콘텐츠</p> : text(콘텐츠) 표시
- <hr> or <hr /> : 단일 태그로 수평선 긋기
: 태그의 부가적인 기능을 정의하는 것으로 선택사항이다.
시작 태그의 내부에 정의하며 개수 제한은 없고, 태그에 추가할 속성이 여러 개일 경우 각각을 구분하기 위해 공백을 사용해야 한다.
속성을 추가한 태그에 의해 표시되는 콘텐츠는 속성으로 인해 형태가 바뀔 수도 있다. (그러나 겉으로 드러나지 않는 속성도 여러가지 존재!)
속성이 추가된 태그의 형태
: <태그명 속성="값">콘텐츠</ 태그명>
- <p style="color:red;">콘텐츠</p> : style 속성 추가.
- <p id="text">콘텐츠</p> : 화면에는 표시되지 않는 속성.
: 사람에게는 보이지만 컴퓨터(웹 브라우저)에게는 보이지 않는 코드.
주석의 형태
: <!-- 주석의 내용 --.>
(표시를 위해 넣은 점을 제외하고 사용!)
- `<!--태그-->` : 태그로 웹 브라우저에는 보이지 않는다.


HTML 문서에는 화면에 표시되는 콘텐츠 외에 '문서 정보'도 포함된다.
<<HTML 기본 문서 구조>>
<!DOCTYPE html>
<html>
<head>
문서의 정보
</head>
<body>
화면에 표시될 내용
</body>
</html>
DOCTYPE에 추가
- lang="ko" : 언어는 한국어 (화면 표시X)
head에 추가
- <title>콘텐츠</title> : 탭에 표시되는 제목 추가 (늘 써준다 생각하면 된다.)
- <meta charset="utf-8"> : 화면에 문서 렌더링 하기 전에 브라우저가 문서를 해석하는 단계에서 문서의 인토딩 단계를 한차례 확인
ex) 인코딩 방식이 달라 문자가 깨져보이는 것.







→ 여러 enter를 해도, 여러 space를 해도 스페이스 한번만 유일하게 허락된 공백이다.
- 줄바꿈 태그와 공백 문자.
: 두개 이상의 공백을 표시하기 위한 태그이다.



태그를 통해 표현하는 웹 요소들은 '블록 레벨 요소'와 '인라인 요소'로 구분할 수 있다.
<블록 레벨 요소/>
→ 자기가 속한 영역의 너비(칸)를 모두 차지하여 블록을 형성한다.
<인라인 요소/>
→ 자기에게 필요한 만큼의 공간만 차지한다.
- 아래는 인라인 텍스트 요소 종류 예시이다.


내가 하는 요소가 블록 레벨 요소인지 인라인 요소인지 다 알고 있어야하는 건가??
→ 이것에 도움을 주는 것이 개발자 도구!(F12)

아래는 여러 예시를 직접 실습해본 내용입니다.


콘텐츠나 레이아웃에 아무런 영향도 주지 않고, 단지 다른 요소 여럿을 묶어 관리하기 편하게 만드는 역할을 하는 요소이다.
<div></div> : 블록 레벨 컨테이너<span></span> : 인라인 컨테이너

모든 HTML 태그에서 공통으로 사용할 수 있는 속성.
주요한 전역 속성은 아래와 같다.
더 많은 전역 속성을 알고 싶다면 :
https://developer.mozilla.org/ko/docs/Web/HTML/Global_attributes
div 는 문구들을 묶어 놓는건데 여러개가 있으면 구별이 안된다.
이걸 id를 사용하여 이름을 줄 수 있다!
하나의 식별값을 특정요소에만 줄 수 있다.


텍스트 마다 특성을 추가할 수 있는데 이때 사용한다.
별도의 식별값을 여러개에 여러 clsss로 부여 가능하다!
공백을 두고 구별한다.


텍스트 위에 마우스를 올려놓으면 표시되는 추가 정보


이미지를 표시할 때 사용하는 태그이다.
단일 태그로써, 닫는 태그는 필요하지 않다.
콘텐츠를 적어주는 대신 표시할 이미지에 대한 정보를 속성으로 지정해주어야 한다.
src 속성(소스 속성)은 표시할 이미지의 위치정보와 파일명, 즉 이미지의 url을 입력받는다.
서버에 위치한 이미지 파일이어도 되고, 내 컴퓨터에 저장된 이미지 파일이어도 된다.
- img 태그 사용법
:<img src="url"/>
(src → 표시할 이미지 / url → 위치정보)


alt
: alternative의 약자로 대체 텍스트 역할을 한다.
이미지가 로딩되기 전이나 이미지 로딩에 실패한 경우 이미지 대신에 대체 텍스트가 표시된다.
alt를 사용하면 이미지를 볼 수 없는 시각장애인에게 웹 페이지를 서비스해야하는 상황에 대한 대비가 가능하다.(웹 접근성!) → 음성인식기가 이미지 대신 이를 활용한다.
width, height
: 이미지가 표시될 크기를 지정할 수 있는데 이때 너비와 높이를 각각 따로 지정할 수 있으며, 단위 없이 정수 값만 지정한다.
- 너비는 width, 높이는 height 사용! → 각각 픽셀 단위로 적용된다.
- width 또는 height만 작성시 원본 비율에 맞춰서 줄어든다.


위에서 배운 내용을 토대로 개인 프로필 페이지를 만들어 봅시다~!
+) 엔티티 코드(©) : 저작권 표시

더 많은 엔티티 코드는 아래 페이지를 참고하여 주세요. :
https://symbl.cc/kr/html-entities/


현재 문서에서 다른 문서로 이동할 수 있는 수단이다.
: a 태그 요소는 다른 페이지, 전화번호, 이메일 주소 등 다양한 유형의 콘텐츠로 연결되는 링크(연결)역할을 한다.
target 특성을 추가하면 새로운 문서를 열 때 현재 택에서 열지, 새로운 택에서 열지 결정할 수 있다.
+) 웹 사이트 말고 경로만 알고 있다면 다른 곳으로의 링크도 생성 가능합니다!


: 연관있는 항목(item)들을 나열한 것을 의미한다.
순서 없는 목록 (Unordered List)
<ul></ul> 을 사용한다.<li></li> 를 사용한다.순서 있는 목록 (Ordered List)
<ol></ol> 을 사용한다.<li></li> 를 사용한다.

( 위에 기제된 아이돌 순서는 철저히 주관적인 아무 근거 없는 순위임을 말씀드립니다 (_ _) )

목록 안에 또 다른 <ul> 이나 <ol>을 넣으면 된다.


표는 행과 열로 이루어진 구조로, 행과 열이 만나는 지점인 셀(cell)이 콘텐츠를 나타내는 최소 단위다.
목록과 마찬가지로, 표는 하나의 태그 안에 여러개의 태그를 채워 넣음으로써 완성할 수 있다.
<표를 만드릭 위해 사용하는 태그들>
<table> : 하나의 표를 나타내는 태그<tr> : 표 안에서 하나의 행(가로)을 나타내는 태그<th> : 행 안에서 제목에 해당하는 셀을 나타내는 태그<td> : 행 안에서 콘텐츠에 해당하는 셀을 나타내는 태그 1) border 속성
: 표의 테두리 두께를 지정하는 속성이다.
2) caption 태그
: table 태그의 안쪽에서 제목 또는 표에 대한 설명을 나타내는 역할을 수행한다.
태그의 콘텐츠는 기본적으로 가운데 정렬이 된다.


사용자는 셀에 표시된 콘텐츠의 성격이나 표의 구조에 따라 여러개의 셀을 그룹으로 묶어서 관리할 수 있다.
이때 사용할 수 있는 태그들은 다음과 같다.
<thead> : 표의 제목이나 주제를 나타내는 영역<tbody> : 표의 본문을 나타내는 영역<tfoot> : 표의 요약글이나 맺음말을 나타내는 영역위와 같은 태그들을 블록 레벨 컨테이너로 사용하면 코드 상에서 표의 구조가 명확하게 드러나 코드 유지 및 보수가 편해진다. (웹 접근성에도 도움이 된다!)


<input>여태까지 배운 태그들은 모두 콘텐츠 출력을 담당하는 '출력 요소'였다.
이제부터는 웹 브라우저 화면을 통해 사용자가 데이터를 입력할 수 있도록 해주는 '입력 요소'를 알려준다.
그 중 대표적인 태그가 <input>이다.
<input> 기본 형태
<input type = "데이터 유형">
- input의 핵심은 type 속성이다.
+) 추가 속성
label 태그는 입력 요소에 라벨을 붙이는 역할을 한다.
이를 이용하면 웹 이용자에게는 좀 더 직관적인 입력 요소를 제공할 수 있고, 코드의 가독성 및 명확성이 향상되어 코드 작성자에게도 도움이 된다.
(로그인 시 아이디, 비밀번호와 같은 것이 label!)
<label 태그를 추가하는 방법>
1. label 안에 input을 넣고 input 앞에 label 내용을 적는 방법.
2. label 태그 안에 for="id 이름"을 추가하고 input 태그 안에 id 태그를 추가하여 사용하는 방법.


<input>외 입력 태그들select 태그는 다수의 옵션(선택지)을 포함할 수 있는 선택 메뉴를 만든다.
메뉴 안에 포함되는 옵션은 option 태그를 사용해 표시한다.
value 속성으로 값 구별해주는 것이 좋다.
- select 태그 기본 형태
<select>
-<option>콘텐츠</option>
- ...
</select>
input 태그를 이용해 텍스트를 입력받을 때는 단 한 줄 밖에 입력받지 못한다. 반면 textarea 태그를 사용하면 여러 줄의 텍스트를 입력 받을 수 있다.
텍스트 영역의 크기는 글자 수를 기반으로 결정할 수 있다.
- textaera 태그 기본 형태
<textarea cols="숫자" rows="숫자"></textarea.>
여기서 cols(가로), rows(세로) 길이는 각 문자수이다.
하지만 문자별로 그 크기가 다르기 때문에 화면에 표시되는 것이 상이할 수 있다.
progress 태그는 작업이 어느 정도 진행되었는지를 나타낼 때 사용한다.
max 속성은 작업 완료에 필요한 작업량을 지정하는 속성이며, value 속성은 화면에 표시할 진척도를 지정하는 속성이다.
- progress 태그 기본 형태
<progress value="숫자" max="숫자"><progress>
button 태그는 클릭을 입력으로 받는 버튼 요소를 만드는 태그로, 태그 사이의 콘텐츠는 버튼에 표시될 텍스트 역할을 한다.
참고로 input 태그의 type 속성에 "button"을 지정해도 버튼을 만들 수 있는데, 둘은 외형적으로 아무런 차이가 없다.
- button 태그 기본 형태
<button>PUSH</button>
- input 이용한 형태
<input type="button" value="PUSH">
추후 CSS에서 할 수 있지만 HTML에서도 사용 가능한 스타일 태그이다.
field (영역) 에 제목을 넣는 태그이다.


입력 양식을 만들어주는 form 태그는 사용자가 입력한 데이터를 서버로 보내는 것을 목적으로 사용하는 태그이다. 따라서 서버에 대한 이해가 필요하다.
서버란, 정보를 제공하고 처리해주는 호스트(host)이다. (컴퓨터 자체)
사용자가 작성한 아이디와 비밀번호는 네이버 서버로 전달되고 그 서버에는 로그인에 필요한 정보들이 있고 그 정보를 처리하게 된다. 그리고 로그인이 된다.
입력 요소들을 감싸며, 입력 값을 서버 측으로 제출(submit)할 수 있다.
태그의 안에 강의들에서 학습한 여러 입력 태그들을 포함시키면, 해당 입력 요소들은 양식의 개별 항목으로써 역할을 수행한다.
단순히 폼 요소 안에 입력 요소를 포함한 것만으로는 서버에 입력 값을 전송할 수 없다. form 태그가 역할을 수행할 수 있도로고 다음 속성들을 사용해야한다.
form은 블록 레벨 요소이다. 이 안에 들어가는 것들은 인라인 요소이다.


GET : 서버에 요청을 보내어 응답을 받아낸다.
→ 서버로부터 정보를 '가져오겠다'는 성격의 요청이다.
ex) 네이버 뉴스를 웹 페이지를 가져오고 싶을 때
POST : 서버에 요청을 보내어 작업을 수행한다.
→ 서버에 있는 데이터를 추가/수정/삭제 한 후에 응답을 받아낸다. 서버의 정보를 '조작하겠다'는, '요구하는' 성격의 요청이다.
ex) 네이버 홈페이지 별명을 바꾸고 싶을 때
자세한 얘기는 현재 서버 개발을 하는 것이 아니기 때문에 이후에 공부하는 것이 좋다~!
코드 작성자는 form 요소 안에 필요한 만큼의 입력 요소를 포함해 다양한 형태의 양식을 만들 수 있다. 이때 폼 요소 안에 포함되는 각 입력 요소에는 name 속성을 추가하여 각 입력 항목의 역할을 구별해줄 수 있다.
서버가 정보를 받으면, name 속성으로 항목을 구별하기 때문에 이 역할은 무척 중요하다!

form 태그를 작성하고 이후 서버에 보낼때 신호를 보내야한다.
그때, input 태그에서 type submit을 사용하게 된다.
form에 있는 입력값들을 서버로 보내게 된다.


시맨틱은 '의미론적인'이라는 뜻이다.
시맨틱 태그는 개발자와 브라우저에게 의미를 제공한다.
<의미>콘텐츠</의미>
→ 태그명은 '이 요소가 가진 목적이나 역할'을 나타낸다.
→ 이는 검색 엔진에게 좋은 단서가 된다.
시맨틱 태그는 컨테이너 태그와 같다.
그러나, 이름이 다양하고 그 이름은 웹 사이트에서 구조를 나타내는 역할을 한다.
대부분의 시맨틱 태그는 컨테이너 태그 (span, div ...)와 같이 특별한 스타일을 제공하지 않는다.
하지만, 다음과 같은 이점들이 있다.
위 태그들은 다음 프로젝트에서 직접 사용해볼 예정이다.
HTML 문서에 대한 메타 데이터를 정의한다.
메타 데이터란 데이터에 대한 데이터, 즉 '정보'를 의미한다.
meta 태그는 항상 head 태그의 안에 들어가며, 일반적으로 문자 세트, 페이지 설명, 키워드, 문서의 작성자 및 뷰포트 설정을 지정하는데 사용된다.
문자 인토딩에 대한 요약 정보를 기입하는 속성이다. (문자 집합 선언)
문자 인코딩이란, 한글을 표시하기 위해 문자 세트를 지정하는 작업으로, 영문과 한글을 모두 사용하기 위해 utf-8 방식을 사용하는 것이 좋다.
→ 인코딩을 명확하게 기입해두지 않으면 웹 브라우저 설정 상황에 따라 자동으로 인코딩을 추정해서 처리한다.
즉, 문자가 깨질 가능성이 있다.
HTTP란 인터넷에서 데이터를 주고 받을 수 있는 프로토콜이다.
http-equiv가 http 관련 정보를 지정하면, content라는 속성에 지정되어 있는 값이 해당 정보의 역할을 수행하게 된다.
<meta http-equiv="x-ua-compatible" content="IE=edge">
: 호환성 맞춤 설정이 결정되는 코드.
(Ie=edge → 마이크로 소프트 사 계열의 웹 브라우저를 사용할 때 edge라는 엔진에 맞춰서 개발을 했다는 의미)
<meta http-equiv="refresh" content="10">
: 10초마다 페이지를 새로고침 한다는 코드.
name 속성을 이름으로, content 속성을 값으로 하여 문서 정보를 "이름 + 값" 쌍의 형태로 제공할 때 사용할 수 있다.
<meta name="author" content="페이지 작성자">
<meta name="description" content="페이지에 대한 요약 정보글">
<meta name="keywords" content="공부, 코딩, IT, 학습">
실제 meta 태그에서 가장 많이 사용되는 속성★ (위 세가지가 기본으로 작성되는 경우가 많다.)
위와 같이 문서 정보를 입력하는 것은 검색 최적화에 도움이 되는 작업이다!
사용자에게 잘 전달되는 페이지를 만들기 위한 장치☆


visual studio code에서 기본 html 문서 구조를 나타내고 싶을 때 !만 쳐도 기본 구조가 나오게 된다...! 완전 꿀팁!



확실히 바로바로 웹 페이지로 내가 작성한 코드들이 나와서 재밌었다. 약간의 노가다 작업을 좋아하는 나로서는 백엔드말고 프론트엔드 강의를 들을 걸 그랬나 라는 생각을 잠깐이나 하게되었다. (사실 미적 감각이 없어서 프론트 엔드에는 자신이 없었달까,,,)
그리고 velog 작성은 처음 해보는데 원하는 모양(?)으로 글이 써지지 않아서 초반엔 살짝 애를 먹었다.
얼마나 했다고 Python 강의를 들을 때 항상 이용하던 Colab에 익숙해져버려서 많이 헷갈렸다.
그래도 기술 블로그를 꾸준히 작성하면 좋다고 하니 이 글 다음엔 HTML 1일차 과제로 글 작성하는 것 하나랑 Python 관련 학습한 것을 정리할 계획이다.
위 내용들은 오즈 스쿨 백엔드 코스 부트 캠프 강의를 바탕으로 배운 것을 요약했다.
추가 참고 자료는 아래 링크에서 확인할 수 있다.
https://wikidocs.net/book/7596