HTML 면접 질문 및 답변

HTMLBeginner
지금 연습하기

소개

이 문서는 HTML 중심 면접에서 뛰어난 성과를 거두는 데 필요한 지식과 자신감을 갖추도록 설계된 포괄적인 가이드입니다. 이 문서는 기초 개념부터 고급 HTML5 기능 및 API 에 이르기까지 광범위한 HTML 주제를 세심하게 다루어, 언어의 핵심 원칙과 최신 기능에 대한 탄탄한 이해를 보장합니다. 시나리오 기반 문제 해결, 실용적인 코딩 과제, 접근성, 성능 최적화 및 일반적인 문제 해결과 같은 필수적인 측면을 깊이 있게 다룹니다. 이제 막 시작하는 프론트엔드 개발자이든 기술을 새로 고치려는 숙련된 전문가이든, 이 자료는 HTML 을 마스터하고 다음 면접을 성공적으로 통과하는 데 귀중한 도구가 될 것입니다.

HTML

기본 HTML 개념

HTML 의 주요 목적은 무엇인가요?

답변:

HTML(HyperText Markup Language) 은 웹 페이지 및 웹 애플리케이션을 만들기 위한 표준 마크업 언어입니다. 주요 목적은 제목, 단락, 이미지, 링크와 같은 요소를 정의하여 웹 콘텐츠의 구조를 잡는 것입니다.


블록 레벨 요소와 인라인 요소의 차이점을 설명해주세요.

답변:

블록 레벨 요소는 새 줄에서 시작하며 사용 가능한 전체 너비를 차지합니다 (예: <div>, <p>). 인라인 요소는 새 줄에서 시작하지 않으며 필요한 만큼의 너비만 차지합니다 (예: <span>, <a>).


HTML 문서 객체 모델 (DOM) 이란 무엇인가요?

답변:

DOM 은 웹 문서에 대한 프로그래밍 인터페이스입니다. 페이지 구조를 객체의 트리로 표현하여 JavaScript 와 같은 프로그래밍 언어가 문서의 콘텐츠, 구조 및 스타일을 액세스하고 수정하며 업데이트할 수 있도록 합니다.


시맨틱 HTML 이란 무엇이며 왜 중요한가요?

답변:

시맨틱 HTML 은 브라우저와 개발자 모두에게 의미를 명확하게 설명하는 요소를 사용합니다 (예: <header>, <article>, <footer>). 의미 있는 구조를 제공함으로써 접근성, SEO 및 코드 가독성을 향상시킵니다.


<!DOCTYPE html> 선언의 목적은 무엇인가요?

답변:

<!DOCTYPE html> 선언은 페이지가 작성된 HTML 표준을 브라우저에 알려주는 'doctype'입니다. HTML5 의 경우, 브라우저가 'quirks mode' 대신 'standards mode'로 페이지를 렌더링하도록 보장하는 간단한 선언입니다.


HTML 문서에 외부 CSS 및 JavaScript 파일을 포함하는 방법은 무엇인가요?

답변:

외부 CSS 는 <head> 내에서 <link rel="stylesheet" href="styles.css"> 태그를 사용하여 연결합니다. 외부 JavaScript 는 일반적으로 성능을 위해 닫는 </body> 태그 바로 앞에 <script src="script.js"></script> 태그를 사용하여 포함합니다.


idclass 속성의 차이점을 설명해주세요.

답변:

id는 HTML 문서 내에서 단일 요소의 고유 식별자로, 특정 타겟팅에 사용됩니다 (예: CSS 의 #myElement). class는 여러 요소에 스타일이나 동작을 적용하는 데 사용되며 문서 전체에서 재사용할 수 있습니다 (예: CSS 의 .myClass).


HTML 엔티티란 무엇이며 언제 사용해야 하나요?

답변:

HTML 엔티티는 예약된 문자 (예: <, >, &) 또는 키보드로 쉽게 입력할 수 없는 문자 (예: ©, ) 를 표시하는 데 사용되는 특수 코드입니다. 브라우저가 이러한 문자를 HTML 코드로 해석하는 것을 방지하고 올바른 표시를 보장합니다.


<img> 태그에서 alt 속성의 목적은 무엇인가요?

답변:

alt 속성은 이미지에 대한 대체 텍스트를 제공합니다. 스크린 리더가 시각 장애가 있는 사용자에게 이미지를 설명하는 데 사용하므로 접근성에 매우 중요합니다. 이미지가 로드되지 않을 때도 표시됩니다.


HTML 문서의 기본 구조를 설명해주세요.

답변:

기본 HTML 문서는 <!DOCTYPE html>로 시작하고 <html> 루트 요소가 뒤따릅니다. <html> 안에는 메타데이터를 위한 <head> 섹션과 보이는 콘텐츠를 위한 <body> 섹션이 있습니다. 예시: <html><head></head><body></body></html>.


고급 HTML5 기능 및 API

localStoragesessionStorage API 의 목적은 무엇인가요? 주요 차이점은 무엇인가요?

답변:

localStoragesessionStorage는 모두 클라이언트 측에서 키 - 값 쌍을 저장하기 위한 Web Storage API 입니다. localStorage는 브라우저가 닫힌 후에도 데이터를 유지하는 반면, sessionStorage는 브라우저 세션 기간 동안만 데이터를 저장합니다 (탭/창이 닫힐 때까지). localStorage는 쿠키에 비해 더 큰 저장 공간 제한 (일반적으로 5-10MB) 을 가집니다.


HTML5 Geolocation API 는 어떻게 작동하며 주요 메서드는 무엇인가요?

답변:

Geolocation API 는 웹 애플리케이션이 사용자의 지리적 위치에 액세스할 수 있도록 합니다. navigator.geolocation.getCurrentPosition()을 사용하여 일회성 위치 정보를 얻고, navigator.geolocation.watchPosition()을 사용하여 지속적으로 위치 변경을 모니터링합니다. 사용자는 위치 액세스 권한을 부여해야 합니다.


HTML5 Drag and Drop API 를 설명해주세요. 요소를 드래그 가능하게 만들려면 어떻게 해야 하나요?

답변:

Drag and Drop API 는 사용자가 웹 페이지 내의 한 위치에서 다른 위치로 또는 애플리케이션 간에 요소를 드래그할 수 있도록 합니다. 요소를 드래그 가능하게 만들려면 HTML 요소에 draggable 속성을 true로 설정합니다. 그런 다음 dragstart, dragover, drop과 같은 JavaScript 이벤트 리스너를 사용하여 드래그 작업을 관리합니다.


HTML5 Canvas API 는 무엇에 사용되나요? 간단한 사용 사례를 제공해주세요.

답변:

Canvas API 는 JavaScript 를 사용하여 웹 페이지에 그래픽을 그릴 수 있는 수단을 제공합니다. 이는 비트맵 기반의 그리기 표면입니다. 간단한 사용 사례로는 외부 플러그인 없이 브라우저에서 직접 동적 차트 및 그래프 생성, 도형 그리기 또는 간단한 2D 게임 구축 등이 있습니다.


Web Workers 의 개념을 설명해주세요. 언제 사용해야 하나요?

답변:

Web Workers 는 웹 페이지의 메인 실행 스레드와 분리된 백그라운드에서 스크립트를 실행할 수 있도록 합니다. 이를 통해 오래 실행되는 스크립트가 사용자 인터페이스를 차단하는 것을 방지할 수 있습니다. 이미지 처리, 대규모 데이터 계산 또는 UI 를 차단하지 않고 데이터를 가져오는 것과 같이 계산 집약적인 작업에 사용합니다.


HTML5 WebSockets API 의 목적은 무엇인가요? 기존 HTTP 와 어떻게 다른가요?

답변:

WebSockets 는 단일 TCP 연결을 통해 전이중 (full-duplex) 통신 채널을 제공하여 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 합니다. 업데이트를 위해 폴링이 필요한 경우가 많은 요청 - 응답 기반의 기존 HTTP 와 달리, WebSockets 는 지속적인 연결을 유지하여 즉각적인 데이터 교환을 가능하게 합니다.


HTML5 기능을 사용하여 웹 애플리케이션에서 오프라인 기능을 구현하는 방법은 무엇인가요?

답변:

오프라인 기능은 주로 Service Workers 를 사용하여 구현할 수 있습니다. Service Workers 는 브라우저와 네트워크 간의 프로그래밍 가능한 프록시 역할을 하여 개발자가 에셋과 데이터를 캐시하고, 네트워크 요청을 가로채고, 오프라인 상태에서도 콘텐츠를 제공할 수 있도록 합니다. localStorage는 오프라인 사용을 위해 소량의 데이터를 저장하는 데도 사용할 수 있습니다.


Server-Sent Events (SSE) 란 무엇인가요? WebSockets 와 어떻게 비교되나요?

답변:

Server-Sent Events (SSE) 는 서버가 단일의 지속적인 HTTP 연결을 통해 클라이언트로 업데이트를 푸시할 수 있도록 합니다. 이는 단방향 (서버에서 클라이언트로) 이며 WebSockets 보다 구현이 간단합니다. WebSockets 는 채팅과 같은 실시간 양방향 통신에 적합한 전이중 통신인 반면, SSE 는 주식 시세 또는 뉴스 피드와 같은 단방향 데이터 스트림에 더 적합합니다.


HTML5 History API 와 그 유용성에 대해 간략하게 설명해주세요.

답변:

HTML5 History API 는 브라우저의 세션 기록을 조작할 수 있게 하여, 전체 페이지 새로고침 없이 URL 을 변경할 수 있도록 합니다. pushState()replaceState()와 같은 메서드는 기록 항목을 추가하거나 수정하는 데 사용됩니다. 이는 올바른 브라우저 기록 및 URL 라우팅을 유지하는 단일 페이지 애플리케이션 (SPA) 을 구축하는 데 중요합니다.


WebRTC API 의 목적은 무엇인가요?

답변:

WebRTC(Web Real-Time Communication) 는 웹 브라우저 및 모바일 애플리케이션 내에서 직접 실시간 통신 (RTC) 기능을 활성화하는 오픈 소스 프로젝트입니다. 플러그인 없이 피어 투 피어 (peer-to-peer) 오디오, 비디오 및 데이터 공유를 가능하게 합니다. 일반적인 용도로는 화상 회의, 음성 통화 및 파일 공유 등이 있습니다.


시나리오 기반 HTML 문제 해결

반응형 이미지 갤러리를 구축하고 있습니다. 이미지의 종횡비를 유지하면서 다양한 장치에서 올바르게 크기를 조정하고 레이아웃 변경을 방지하려면 어떻게 해야 하나요?

답변:

<img> 태그에 CSS max-width: 100%;height: auto;를 사용합니다. 레이아웃 변경을 방지하려면 <img> 태그에 widthheight 속성을 지정하거나 CSS aspect-ratio 속성을 사용합니다.


사용자가 웹사이트의 탐색 메뉴를 키보드로 접근할 수 없다고 보고했습니다. 키보드 탐색을 개선하기 위해 어떤 HTML 속성을 확인하거나 추가해야 하나요?

답변:

탐색에는 <a><button>과 같은 인터랙티브 요소를 사용해야 합니다. 사용자 정의 요소의 경우, tabindex="0"을 추가하여 포커스 가능하게 만들고 Enter 키 처리를 위해 JavaScript 를 구현합니다. 의미론적 명확성을 위해 role="navigation"과 같은 ARIA 역할을 사용합니다.


페이지에 YouTube 동영상을 포함해야 하지만 초기 페이지 성능을 개선하기 위해 지연 로딩 (lazy-loading) 하고 싶습니다. 어떻게 달성할 수 있나요?

답변:

YouTube 임베드를 위해 <iframe> 태그에 loading="lazy" 속성을 사용합니다. 또는 클릭 시 JavaScript 를 통해 동적으로 <iframe>을 로드하는 플레이스홀더 이미지를 사용할 수 있습니다.


웹사이트의 양식에서 사용자가 이메일 주소를 입력해야 합니다. HTML5 유효성 검사를 사용하여 입력이 유효한 이메일 형식인지 어떻게 확인할 수 있나요?

답변:

기본 이메일 형식 유효성 검사를 위해 <input type="email">을 사용합니다. 더 구체적인 패턴의 경우, 정규 표현식과 함께 pattern 속성을 추가합니다. 예: <input type="email" pattern=".+@.+\.com">.


복잡한 데이터 테이블을 만들고 있습니다. 스크린 리더의 접근성을 개선하기 위해 어떻게 의미론적으로 구조화해야 하나요?

답변:

<table>, <thead>, <tbody>, <th>, <td> 요소를 사용합니다. <th> 요소에 scope="col"scope="row"를 사용하여 헤더를 데이터 셀과 명시적으로 연결합니다. 테이블 제목을 위해 <caption>을 추가합니다.


항목의 순서가 중요하지만 각 항목에 대한 설명도 제공해야 하는 항목 목록을 표시해야 합니다. 어떤 HTML 요소를 사용해야 하나요?

답변:

순서가 중요한 항목의 경우 순서가 지정된 목록 ( <ol>) 을 사용합니다. 그런 다음 각 목록 항목 (<li>) 에 대해 항목의 제목에 대한 정의 용어 ( <dt>) 와 설명에 대한 정의 설명 ( <dd>) 이 있는 정의 목록 ( <dl>) 을 포함할 수 있습니다.


특정 양만큼 스크롤한 후 나타나는 '맨 위로 가기' 버튼을 추가하고 싶습니다. HTML 과 간단한 CSS/JS 접근 방식을 설명해주세요.

답변:

HTML 은 id 또는 class가 있는 간단한 <a> 태그 또는 <button>이 될 것입니다. CSS 는 처음에 이를 숨깁니다 (display: none;). JavaScript 는 스크롤 이벤트를 수신하고, window.scrollY가 임계값을 초과하면 버튼을 표시하며, 클릭 시 window.scrollTo(0, 0) 또는 element.scrollIntoView()를 사용하여 맨 위로 스크롤합니다.


간단한 미디어 플레이어를 만들고 있습니다. 비디오 콘텐츠에 어떤 HTML5 요소를 사용해야 하며, 이전 브라우저에 대한 대체 방법을 어떻게 제공해야 하나요?

답변:

<video> 요소를 사용합니다. <video> 태그 안에 브라우저 호환성을 위해 다른 비디오 형식 (예: MP4, WebM) 이 있는 여러 <source> 요소를 제공합니다. 최종 대체 방법으로, <video> 태그를 지원하지 않는 브라우저를 위해 비디오를 다운로드하는 텍스트 또는 링크를 포함합니다.


최소 8 자, 대문자 하나 및 숫자 하나를 포함해야 하는 비밀번호 필드에 대한 간단한 클라이언트 측 양식 유효성 검사를 어떻게 구현해야 하나요?

답변:

정규 표현식 pattern="(?=.*\d)(?=.*[A-Z]).{8,}"을 사용하여 <input type="password"> 필드에 pattern 속성을 사용합니다. 또한 사용자에게 비밀번호 요구 사항에 대한 유용한 힌트를 제공하기 위해 title 속성을 추가합니다.


처음에 숨겨져 있지만 버튼 클릭으로 표시되도록 전환할 수 있는 콘텐츠 섹션을 만들어야 합니다. 접근성을 위해 어떤 HTML 요소와 속성을 사용해야 하나요?

답변:

전환을 트리거하려면 <button>을 사용합니다. 숨기거나 표시할 콘텐츠는 컨테이너 (예: <div>) 에 있어야 합니다. 버튼에 aria-expanded="false"를, 콘텐츠에 aria-controls="[id_of_content]"를 사용합니다. JavaScript 는 콘텐츠 컨테이너에서 aria-expandedhidden 속성 또는 CSS display 속성을 전환합니다.


웹 개발자를 위한 HTML (프론트엔드 중심)

<!DOCTYPE html> 선언의 목적은 무엇인가요?

답변:

<!DOCTYPE html> 선언은 브라우저에게 해당 페이지가 어떤 HTML 버전으로 작성되었는지 알려주는 문서 유형 선언입니다. HTML5 의 경우, 브라우저가 '쿼크 모드 (quirks mode)'가 아닌 '표준 모드 (standards mode)'로 페이지를 렌더링하도록 보장하는 간단한 선언으로, 다양한 브라우저에서 더 일관된 렌더링을 제공합니다.


블록 레벨 요소와 인라인 레벨 요소의 차이점을 설명해주세요.

답변:

블록 레벨 요소는 새 줄에서 시작하며 사용 가능한 전체 너비를 차지하고 수직으로 쌓입니다 (예: <div>, <p>, <h1>). 인라인 레벨 요소는 새 줄에서 시작하지 않으며 필요한 만큼의 너비만 차지하고 콘텐츠 내에서 수평으로 흐릅니다 (예: <span>, <a>, <strong>).


시맨틱 HTML 이란 무엇이며 왜 중요한가요?

답변:

시맨틱 HTML 은 단순히 표현 방식이 아닌, 포함하는 콘텐츠에 대한 의미를 전달하는 요소 (예: <header>, <nav>, <article>, <footer>) 를 사용합니다. 이는 접근성 (스크린 리더), SEO 및 유지보수성에 중요하며, 브라우저와 개발자 모두에게 문서 구조를 더 명확하게 만들어 줍니다.


<section>, <article>, <div>는 언제 사용해야 하나요?

답변:

<article>은 자체 포함되고 독립적인 콘텐츠 (예: 블로그 게시물) 에 사용됩니다. <section>은 종종 제목과 함께 기사 또는 문서 내에서 관련 콘텐츠를 그룹화합니다. <div>는 다른 시맨틱 요소가 적절하지 않을 때 스타일링 또는 스크립팅 목적으로 사용되는 일반 컨테이너입니다.


HTML 문서에 외부 CSS 및 JavaScript 파일을 어떻게 포함하나요?

답변:

외부 CSS 는 <head> 섹션 내에서 <link> 태그를 사용하여 연결합니다: <link rel="stylesheet" href="styles.css">. 외부 JavaScript 는 <script> 태그를 사용하여 포함하며, 성능을 위해 일반적으로 <body> 끝에 배치합니다: <script src="script.js"></script>.


<img> 태그의 alt 속성의 중요성은 무엇인가요?

답변:

alt 속성은 이미지에 대한 대체 텍스트를 제공합니다. 이 텍스트는 이미지를 로드할 수 없을 때 표시되며, 스크린 리더가 시각 장애가 있는 사용자에게 이미지 콘텐츠를 설명하는 데 사용하므로 접근성에 매우 중요합니다. 또한 SEO 에도 도움이 됩니다.


<meta> 태그, 특히 charsetviewport의 목적을 설명해주세요.

답변:

<meta> 태그는 HTML 문서에 대한 메타데이터를 제공합니다. charset="UTF-8"은 문자 인코딩을 지정하여 다양한 문자의 올바른 표시를 보장합니다. name="viewport" content="width=device-width, initial-scale=1.0"은 다양한 장치에서의 반응형 디자인을 위해 페이지의 치수와 스케일을 제어합니다.


HTML 데이터 속성이란 무엇이며 언제 사용해야 하나요?

답변:

HTML 데이터 속성 (data-*) 을 사용하면 페이지 또는 애플리케이션에 대한 사용자 정의 데이터를 HTML 요소 내에 직접 저장할 수 있습니다. 이는 비표준 속성이나 DOM ID 에 의존하지 않고 HTML 에서 JavaScript 로 데이터를 전달하는 데 유용하며, 코드를 더 깔끔하고 유지보수하기 쉽게 만듭니다.


idclass 속성의 차이점을 설명해주세요.

답변:

id 속성은 HTML 문서 내에서 고유해야 하며 단일 특정 요소를 식별하는 데 사용됩니다. class 속성은 여러 요소에 적용될 수 있어 여러 요소에 공통 스타일 또는 동작을 그룹화하고 적용할 수 있습니다.


HTML 양식을 어떻게 접근 가능하게 만들 수 있나요?

답변:

양식을 접근 가능하게 만들려면 폼 컨트롤과 연결된 <label> 요소를 사용합니다 (forid 사용). 명확한 지침을 제공하고, 시맨틱 입력 유형을 사용하며, 복잡한 입력에 대해 aria-describedby 또는 aria-labelledby를 포함합니다. 올바른 탭 순서와 유효성 검사 피드백을 보장합니다.


<figure><figcaption> 요소의 목적은 무엇인가요?

답변:

<figure> 요소는 문서의 주요 흐름에서 참조되는 이미지, 다이어그램, 코드 목록 또는 인용과 같은 자체 포함 콘텐츠를 캡슐화하는 데 사용됩니다. <figcaption> 요소는 <figure> 내의 콘텐츠에 대한 캡션 또는 범례를 제공합니다.


실용적인 HTML 코딩 챌린지

헤더, 네비게이션, 메인 콘텐츠 영역, 푸터를 포함하여 블로그 게시물에 대한 기본 HTML 페이지를 어떻게 구조화하시겠습니까?

답변:

시맨틱 HTML5 요소를 사용하겠습니다: 사이트 헤더에는 <header>, 네비게이션 링크에는 <nav>, 주요 콘텐츠에는 <main>, 블로그 게시물 자체에는 <article>, 저작권 또는 연락처 정보에는 <footer>를 사용합니다. 이는 접근성과 SEO 를 향상시킵니다.


YouTube iframe 을 직접 사용하지 않고 YouTube 동영상을 반응형으로 HTML 페이지에 포함하는 방법을 설명해주세요.

답변:

YouTube 에서 제공하는 YouTube 임베드 <iframe>을 사용하되, CSS 클래스가 있는 <div>로 감싸겠습니다. 그런 다음 이 래퍼에 position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden; CSS 를 적용하고 iframe 에는 position: absolute; top: 0; left: 0; width: 100%; height: 100%; 스타일을 적용합니다.


사용자 이름과 비밀번호 필드, 그리고 제출 버튼이 있는 간단한 사용자 로그인 양식을 만들어야 합니다. 이 HTML 을 어떻게 구조화하시겠습니까?

답변:

<form> 요소를 사용하겠습니다. 내부에 <input type="text" id="username" name="username"><input type="password" id="password" name="password">와 연결된 <label> 요소를 포함합니다. 마지막으로 <input type="submit" value="Login"> 또는 <button type="submit">Login</button>을 사용합니다.


이미지를 스크린 리더와 검색 엔진에 접근 가능하게 만들려면 어떻게 해야 하나요?

답변:

<img> 태그 내에서 alt 속성을 사용하여 만듭니다. alt 텍스트는 이미지 콘텐츠나 기능을 간결하게 설명해야 합니다. 장식용 이미지의 경우 빈 alt=""를 사용할 수 있습니다.


<div><span>의 차이점과 각각을 언제 사용해야 하는지 설명해주세요.

답변:

<div>는 블록 레벨 요소로, 일반적으로 더 큰 콘텐츠 섹션을 그룹화하거나 레이아웃 목적으로 사용됩니다. <span>은 인라인 레벨 요소로, 흐름을 방해하지 않고 텍스트 또는 인라인 콘텐츠의 작은 부분에 스타일이나 스크립팅을 적용하는 데 사용됩니다.


번호 매기기가 1 이 아닌 5 부터 시작하는 항목의 순서 목록을 어떻게 만들 수 있나요?

답변:

<ol> 요소를 사용하고 원하는 시작 번호와 함께 start 속성을 추가합니다. 예를 들어, <ol start="5"><li>Item 1</li><li>Item 2</li></ol>와 같이 사용합니다.


외부 CSS 파일과 외부 JavaScript 파일을 HTML 문서에 연결해야 합니다. 이 링크들을 어디에 배치해야 하나요?

답변:

CSS 에 대한 <link rel="stylesheet" href="styles.css"><head> 섹션에 배치해야 합니다. JavaScript 에 대한 <script src="script.js"></script>는 성능상의 이유로 일반적으로 닫는 </body> 태그 바로 앞에 배치하거나, defer 속성과 함께 <head>에 배치합니다.


헤더 행, 본문, 푸터 행이 있는 테이블을 HTML 에서 만드는 방법을 설명해주세요.

답변:

컨테이너로 <table>을 사용하겠습니다. 내부에 헤더 행 (<th> 셀이 있는 <tr>) 에는 <thead>를, 주요 데이터 행 (<td> 셀이 있는 <tr>) 에는 <tbody>를, 푸터 행 (<td> 또는 <th> 셀이 있는 <tr>) 에는 <tfoot>를 사용합니다.


HTML 에서 이미지에 대한 지연 로딩 (lazy loading) 을 어떻게 구현하나요?

답변:

<img> 태그에 loading="lazy" 속성을 추가합니다. 이렇게 하면 브라우저가 뷰포트에 가까워질 때까지 이미지를 로드하는 것을 연기하여 초기 페이지 로드 성능을 개선합니다.


charset="UTF-8"을 가진 meta 태그의 목적은 무엇인가요?

답변:

meta 태그는 HTML 문서의 문자 인코딩을 UTF-8 로 지정합니다. 이를 통해 다양한 브라우저와 운영 체제에서 문자가 올바르게 표시되도록 하여 깨진 텍스트 문제를 방지합니다.


HTML 문서 내에서 코드 블록을 어떻게 표시해야 하나요?

답변:

한 줄 또는 인라인 코드 스니펫의 경우 <code> 요소를 사용합니다. 여러 줄의 코드 블록의 경우, 공백과 줄 바꿈을 유지하기 위해 <code> 요소를 <pre> 요소 안에 감싸겠습니다.


HTML 에서 doctype 선언의 중요성을 설명해주세요.

답변:

<!DOCTYPE html> 선언은 브라우저에게 문서가 어떤 HTML 표준을 준수하는지 (이 경우 HTML5) 를 알려줍니다. 이를 통해 브라우저는 '표준 모드'로 페이지를 렌더링하고 '쿼크 모드'가 아닌 일관된 렌더링을 보장합니다.


HTML 접근성 및 시맨틱 모범 사례

HTML 접근성의 주요 목표는 무엇인가요?

답변:

HTML 접근성의 주요 목표는 웹 콘텐츠와 기능이 능력이나 장애에 관계없이 모든 사람이 사용하고 이해할 수 있도록 보장하는 것입니다. 여기에는 스크린 리더, 키보드 탐색 또는 대체 입력 장치와 같은 보조 기술을 사용하는 사람들이 포함됩니다.


시맨틱 HTML 의 개념과 그 중요성에 대해 설명해주세요.

답변:

시맨틱 HTML 은 단순히 시각적 모양이 아닌 의미에 따라 HTML 요소를 사용하는 것을 포함합니다. 예를 들어 <header>, <nav>, <main>, <article>, <section>, <footer>를 사용하는 것입니다. 스크린 리더의 접근성을 향상시키고, SEO 를 강화하며, 개발자가 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들기 때문에 중요합니다.


<img> 태그에 alt 속성을 언제 사용해야 하며, 내용은 무엇이어야 하나요?

답변:

alt 속성은 항상 <img> 태그에 사용해야 합니다. 내용은 이미지를 볼 수 없는 사용자 (예: 스크린 리더 사용자, 이미지 깨짐) 에게 이미지의 목적이나 정보를 전달하는 간결하고 설명적인 대체 텍스트여야 합니다. 이미지가 순전히 장식용인 경우 alt=""(빈 문자열) 을 사용해야 합니다.


ARIA 속성은 웹 접근성에 어떻게 기여하나요?

답변:

ARIA(Accessible Rich Internet Applications) 속성은 특히 동적 콘텐츠와 네이티브 HTML 시맨틱이 부족한 사용자 정의 UI 구성 요소에 추가적인 시맨틱 정보를 HTML 요소에 제공합니다. 이를 통해 보조 기술이 요소의 역할, 상태 및 속성을 이해할 수 있게 되어 복잡한 웹 애플리케이션을 더 접근 가능하게 만듭니다.


올바른 제목 구조 (<h1>부터 <h6>까지`) 가 접근성에 중요한 이유는 무엇인가요?

답변:

올바른 제목 구조는 목차와 유사하게 페이지 콘텐츠에 대한 개요를 만듭니다. 스크린 리더 사용자는 제목별로 페이지를 탐색할 수 있어 문서의 구성을 이해하고 관련 섹션으로 쉽게 이동할 수 있습니다. 제목 수준을 건너뛰거나 스타일링 목적으로 사용하는 것은 접근성에 부정적인 영향을 미칩니다.


키보드 사용자를 위해 사용자 정의 버튼을 접근 가능하게 만들려면 어떻게 해야 하나요?

답변:

사용자 정의 버튼을 접근 가능하게 만들려면 포커스 가능하도록 해야 합니다 (예: 네이티브 <button> 요소를 사용하거나 <div> 또는 <span>tabindex="0"을 추가). 또한 Enter/Space 키로 작동해야 합니다 (네이티브 버튼이 아닌 경우, event.key === 'Enter' 또는 event.key === ' '를 확인하는 keydown 이벤트에 대한 JavaScript 이벤트 리스너를 추가). 명확한 시각적 포커스 표시기를 제공해야 합니다.


폼 입력과 함께 <label> 요소를 사용하는 것이 중요한 이유는 무엇인가요?

답변:

폼 입력과 함께 <label> 요소를 사용하는 것 (입력의 id를 통해 for 속성으로 연결) 은 접근성에 매우 중요합니다. 텍스트 설명을 입력 필드와 연결하여 스크린 리더가 입력에 포커스가 맞춰졌을 때 레이블을 발표하도록 합니다. 또한 운동 장애가 있는 사용자를 위해 더 큰 클릭 가능한 영역을 제공합니다.


<html> 태그의 lang 속성의 중요성은 무엇인가요?

답변:

<html> 태그의 lang 속성은 문서의 기본 언어를 지정합니다 (예: <html lang="en">). 이는 스크린 리더가 콘텐츠를 올바르게 발음하도록 돕고 검색 엔진 및 번역 도구가 페이지를 정확하게 처리하는 데 도움이 되므로 접근성에 중요합니다.


aria-labelledbyaria-describedby의 차이점을 설명해주세요.

답변:

aria-labelledby는 요소와 해당 레이블 역할을 하는 하나 이상의 다른 요소를 연결하여 간결한 기본 식별자를 제공하는 데 사용됩니다. aria-describedby는 요소와 상세한 설명이나 보충 정보를 제공하는 하나 이상의 다른 요소를 연결하는 데 사용되며, 일반적으로 레이블 다음에 발표됩니다.


접근성을 위해 충분한 색상 대비를 어떻게 보장할 수 있나요?

답변:

충분한 색상 대비를 보장하는 것은 전경 (텍스트) 색상과 배경 색상 간에 충분한 차이를 두어 저시력 또는 색맹이 있는 사람들도 텍스트를 읽을 수 있도록 하는 것을 포함합니다. 이는 일반적으로 최소 대비 비율을 지정하는 WCAG 지침 (예: AA 또는 AAA 준수) 을 사용하여 측정됩니다. 브라우저 개발자 도구나 온라인 대비 검사기와 같은 도구를 사용하여 이를 확인할 수 있습니다.


HTML 성능 및 최적화

크리티컬 렌더링 경로 (CRP) 란 무엇이며 어떻게 최적화할 수 있나요?

답변:

크리티컬 렌더링 경로 (Critical Rendering Path) 는 브라우저가 HTML, CSS, JavaScript 를 화면의 픽셀로 변환하기 위해 수행하는 단계의 순서입니다. 이를 최적화하려면 가능한 가장 빠른 '첫 페인트 (first paint)'를 달성하기 위해 크리티컬 리소스 수를 최소화하고, 다운로드되는 바이트를 줄이며, 로드 순서를 최적화해야 합니다.


스크립트 태그의 'defer'와 'async' 속성 간의 차이점을 설명해주세요.

답변:

'async' 스크립트는 로드되는 즉시 실행되며, 순서가 바뀌거나 HTML 파싱을 차단할 수 있습니다. 'defer' 스크립트는 HTML 파싱이 완료된 후 문서에 나타나는 순서대로 'DOMContentLoaded' 이벤트 전에 실행됩니다. 둘 다 렌더링 차단을 방지합니다.


이미지 지연 로딩 (lazy loading) 은 어떻게 성능을 향상시키나요?

답변:

이미지 지연 로딩은 화면 밖의 이미지가 뷰포트에 진입하기 직전까지 로딩을 연기합니다. 이는 초기 페이지 로드 시간을 줄이고, 사용자 대역폭을 절약하며, 보이는 콘텐츠에 우선순위를 부여하여 인지된 성능을 향상시킵니다.


브라우저 캐싱이란 무엇이며 성능을 위해 어떻게 활용할 수 있나요?

답변:

브라우저 캐싱은 첫 방문 후 이미지, CSS, JS 와 같은 정적 에셋을 사용자의 장치에 로컬로 저장합니다. 서버에서 적절한 HTTP 캐시 헤더 (예: Cache-Control, Expires) 를 설정하여 이를 활용할 수 있으며, 재방문 사용자의 후속 로드 시간을 줄일 수 있습니다.


HTML, CSS, JavaScript 파일에 대한 최소화 (minification) 가 중요한 이유는 무엇인가요?

답변:

최소화는 기능은 변경하지 않고 공백, 주석, 줄 바꿈과 같은 불필요한 문자를 코드에서 제거합니다. 이는 파일 크기를 줄여 다운로드 시간을 단축하고 페이지 로드 성능을 향상시킵니다.


렌더링 차단 리소스 (render-blocking resources) 의 영향은 무엇이며 어떻게 완화할 수 있나요?

답변:

렌더링 차단 리소스 (일반적으로 <head>의 CSS 및 동기 JavaScript) 는 처리될 때까지 브라우저가 페이지를 렌더링하는 것을 방지합니다. 완화 방법에는 크리티컬 CSS 인라인 처리, 비크리티컬 CSS 지연, JavaScript 에 async 또는 defer 사용이 포함됩니다.


'스크롤 없이 볼 수 있는 영역 (above-the-fold)' 콘텐츠 최적화 개념을 설명해주세요.

답변:

'스크롤 없이 볼 수 있는 영역' 콘텐츠는 스크롤 없이 보이는 웹페이지의 부분입니다. 이를 최적화한다는 것은 이 콘텐츠의 로딩 및 렌더링을 먼저 우선시하는 것을 의미하며, 종종 크리티컬 CSS 를 인라인 처리하고 필수적이지 않은 스크립트를 지연시켜 사용자에게 더 빠른 인지 로드 시간을 제공합니다.


이미지 최적화는 어떻게 더 나은 HTML 성능에 기여할 수 있나요?

답변:

이미지 최적화는 이미지를 압축하고, 적절한 형식 (예: WebP) 을 선택하며, 반응형 이미지 (다양한 장치에 대한 다양한 크기) 를 제공하는 것을 포함합니다. 이는 시각적 품질을 희생하지 않으면서 파일 크기를 크게 줄여 다운로드 속도를 높이고 페이지 로드 속도를 향상시킵니다.


Web Worker 란 무엇이며 어떻게 성능을 향상시킬 수 있나요?

답변:

Web Worker 는 JavaScript 가 브라우저의 메인 실행 스레드와 분리된 백그라운드에서 실행될 수 있도록 합니다. 이를 통해 오래 실행되는 스크립트가 UI 를 차단하는 것을 방지하여 페이지를 반응형으로 유지하고 복잡한 계산에 대한 전반적인 성능을 향상시킵니다.


성능 측면에서 HTTP/1.1에 비해 HTTP/2 또는 HTTP/3 사용의 이점을 설명해주세요.

답변:

HTTP/2 및 HTTP/3은 멀티플렉싱 (단일 연결을 통한 여러 요청), 헤더 압축, 서버 푸시와 같은 기능을 통해 HTTP/1.1에 비해 상당한 성능 향상을 제공합니다. HTTP/3은 UDP 기반 QUIC 프로토콜을 통해 이를 더욱 향상시켜 지연 시간을 줄이고 연결 안정성을 개선합니다.


Troubleshooting Common HTML Issues

A user reports that their images are not displaying on a webpage. What are the first few things you would check?

Answer:

I would first check the src attribute for correct file path and spelling, ensuring it's relative or absolute as intended. Next, I'd verify the image file actually exists at that path and that its filename matches exactly (case-sensitivity). Finally, I'd check browser developer tools for any console errors related to image loading or network issues.


Why might CSS styles not be applying to an HTML element, even though the stylesheet is linked?

Answer:

Common reasons include incorrect CSS selector specificity, typos in class/ID names, or the stylesheet not being properly linked (e.g., wrong href in <link>). I'd also check for conflicting styles, browser caching issues, or if the CSS file itself has syntax errors preventing parsing.


A form submission isn't working. What HTML attributes would you inspect first?

Answer:

I'd check the <form> tag's action attribute to ensure it points to the correct server-side script and the method attribute (GET/POST) is appropriate. For input fields, I'd verify name attributes are present, as data is sent using these names. Also, check if a submit button is present and correctly typed (type='submit').


Content is overflowing its container. How would you typically diagnose and fix this in HTML/CSS?

Answer:

I'd use browser developer tools to inspect the element and its parent containers, checking their width, height, padding, margin, and box-sizing properties. Common fixes involve setting overflow: hidden; or overflow: auto;, adjusting widths, or using flexbox/grid for better layout control.


You see a blank page or only partial content. What could be the cause from an HTML perspective?

Answer:

This often points to a critical HTML syntax error, such as an unclosed tag (<div> without </div>), a missing closing quote on an attribute, or an incorrectly placed script tag that halts rendering. I'd check the browser's developer console for parsing errors or warnings.


Why might a JavaScript function not be executing when a button is clicked, even though the function is defined?

Answer:

I'd check if the onclick attribute on the button is correctly spelled and points to the right function name. Ensure the JavaScript file is properly linked and loaded before the button. Also, look for JavaScript errors in the browser console that might prevent the script from running.


A webpage looks different across various browsers. What's a common reason for this HTML/CSS inconsistency?

Answer:

Browser rendering engines can interpret CSS differently, especially for older or non-standard properties. This is often due to missing CSS resets, lack of vendor prefixes (-webkit-, -moz-), or using experimental CSS features without proper fallbacks. I'd use browser developer tools to compare rendering.


How do you ensure your HTML is semantically correct and accessible?

Answer:

I use appropriate HTML5 semantic tags like <header>, <nav>, <main>, <article>, <section>, <footer> instead of generic <div>s. For accessibility, I ensure meaningful alt text for images, correct heading structure (<h1> to <h6>), proper form labels, and ARIA attributes where standard HTML isn't sufficient.


Answer:

I'd check the src attribute for correct file path and format. Ensure multiple <source> elements are provided for different formats (e.g., MP4, WebM, Ogg) for broader browser compatibility. Also, verify the controls attribute is present if user interaction is expected, and check for browser autoplay policies.


You've added a new font, but it's not displaying. What HTML/CSS checks would you perform?

Answer:

First, I'd ensure the font file is correctly linked in HTML (e.g., via <link> for Google Fonts or @font-face in CSS). Then, I'd check the font-family property in CSS for correct spelling and ensure it's applied to the desired elements. Browser console might show network errors if the font file failed to load.


일반적인 HTML 문제 해결

사용자가 웹페이지에서 이미지가 표시되지 않는다고 보고합니다. 가장 먼저 확인할 몇 가지 사항은 무엇인가요?

답변:

먼저 src 속성의 파일 경로와 철자가 올바른지 확인하고, 의도한 대로 상대 경로 또는 절대 경로인지 확인합니다. 다음으로 해당 경로에 이미지 파일이 실제로 존재하고 파일 이름이 정확히 일치하는지 (대소문자 구분) 확인합니다. 마지막으로 이미지 로딩 또는 네트워크 문제와 관련된 콘솔 오류가 있는지 브라우저 개발자 도구를 확인합니다.


스타일시트가 연결되어 있음에도 불구하고 HTML 요소에 CSS 스타일이 적용되지 않는 이유는 무엇인가요?

답변:

일반적인 이유는 CSS 선택자 특정성 (specificity) 이 잘못되었거나, 클래스/ID 이름에 오타가 있거나, 스타일시트가 제대로 연결되지 않았기 때문입니다 (예: <link> 태그의 href가 잘못된 경우). 또한 충돌하는 스타일, 브라우저 캐싱 문제 또는 CSS 파일 자체에 구문 오류가 있어 파싱을 방해하는지 확인합니다.


폼 제출이 작동하지 않습니다. 가장 먼저 어떤 HTML 속성을 검사해야 하나요?

답변:

<form> 태그의 action 속성이 올바른 서버 측 스크립트를 가리키는지, 그리고 method 속성 (GET/POST) 이 적절한지 확인합니다. 입력 필드의 경우, 데이터가 해당 이름을 사용하여 전송되므로 name 속성이 있는지 확인합니다. 또한 제출 버튼이 존재하고 올바르게 입력되었는지 (type='submit') 확인합니다.


콘텐츠가 컨테이너를 넘칩니다. 일반적으로 HTML/CSS에서 이를 어떻게 진단하고 수정하나요?

답변:

브라우저 개발자 도구를 사용하여 요소와 해당 부모 컨테이너를 검사하고 width, height, padding, margin, box-sizing 속성을 확인합니다. 일반적인 수정 방법으로는 overflow: hidden; 또는 overflow: auto; 설정, 너비 조정 또는 더 나은 레이아웃 제어를 위해 flexbox/grid 사용이 있습니다.


빈 페이지 또는 부분적인 콘텐츠만 보입니다. HTML 관점에서 원인은 무엇일 수 있나요?

답변:

이는 종종 치명적인 HTML 구문 오류를 나타냅니다. 예를 들어, 닫히지 않은 태그 (</div>가 없는 <div>), 속성의 닫는 따옴표 누락 또는 렌더링을 중단시키는 잘못 배치된 스크립트 태그 등이 있습니다. 파싱 오류나 경고에 대해 브라우저의 개발자 콘솔을 확인합니다.


버튼을 클릭해도 함수가 정의되어 있음에도 JavaScript 함수가 실행되지 않는 이유는 무엇인가요?

답변:

버튼의 onclick 속성이 올바르게 입력되었고 올바른 함수 이름을 가리키는지 확인합니다. JavaScript 파일이 버튼보다 먼저 올바르게 연결되고 로드되었는지 확인합니다. 또한 스크립트 실행을 방해할 수 있는 브라우저 콘솔의 JavaScript 오류를 확인합니다.


웹페이지가 브라우저마다 다르게 보입니다. 이러한 HTML/CSS 불일치의 일반적인 이유는 무엇인가요?

답변:

브라우저 렌더링 엔진은 특히 오래되거나 비표준 속성의 경우 CSS 를 다르게 해석할 수 있습니다. 이는 종종 CSS 리셋 누락, 공급업체 접두사 (-webkit-, -moz-) 누락 또는 적절한 대체 기능 없이 실험적인 CSS 기능을 사용하기 때문입니다. 브라우저 개발자 도구를 사용하여 렌더링을 비교합니다.


HTML 이 의미론적으로 올바르고 접근 가능한지 어떻게 보장하나요?

답변:

일반적인 <div> 대신 <header>, <nav>, <main>, <article>, <section>, <footer>와 같은 적절한 HTML5 의미론적 태그를 사용합니다. 접근성을 위해 이미지에 의미 있는 alt 텍스트, 올바른 제목 구조 (<h1> ~ <h6>), 적절한 폼 레이블, 표준 HTML 이 충분하지 않은 경우 ARIA 속성을 보장합니다.


비디오 또는 오디오 요소가 재생되지 않습니다. 일반적인 HTML 관련 문제는 무엇인가요?

답변:

src 속성의 파일 경로와 형식이 올바른지 확인합니다. 더 넓은 브라우저 호환성을 위해 다양한 형식 (예: MP4, WebM, Ogg) 에 대해 여러 <source> 요소를 제공하는지 확인합니다. 또한 사용자 상호 작용이 예상되는 경우 controls 속성이 있는지 확인하고 브라우저 자동 재생 정책을 확인합니다.


새 글꼴을 추가했지만 표시되지 않습니다. 어떤 HTML/CSS 검사를 수행해야 하나요?

답변:

먼저 HTML 에서 글꼴 파일이 올바르게 연결되었는지 확인합니다 (예: Google Fonts 의 경우 <link> 또는 CSS 의 @font-face). 그런 다음 CSS 에서 font-family 속성의 철자가 올바른지 확인하고 원하는 요소에 적용되었는지 확인합니다. 글꼴 파일 로드에 실패하면 브라우저 콘솔에 네트워크 오류가 표시될 수 있습니다.