Front End Interview Handbook의 HTML 파트를 번역 및 정리한 글입니다
2023.02.01 - [기업면접도전] - [번역] 빅테크 프론트엔드 기술 인터뷰 : CSS편
Meta, Amazon., Google과 같은 미국 빅테크 프론트엔드 면접의 기출 문제라 합니다.
2019년 기준으로 작성된 것들이 꽤 있어서, 몇가지 경험 기반 답변들은 스스로 생각해 보시는 것도 좋은 듯 합니다.
1. DOCTYPE이 뭔가요? 왜 중요한가요?
DOCTYPE은 Document Type의 약자입니다.
DOCTYPE은 항상 DTD(Document Type Definition)와 연결됩니다.
- https://html.spec.whatwg.org/multipage/syntax.html#the-doctype
- https://html.spec.whatwg.org/multipage/xhtml.html
- https://quirks.spec.whatwg.org/
- https://developer.mozilla.org/en-US/docs/Web/HTML/Quirks_Mode_and_Standards_Mode
2. HTML을 이용해 다국어 페이지를 지원하는 방법을 알려주세요.
콘텐츠를 여러 언어로로 제공 할 수 있으나,
한 페이지 내의 모든 콘텐츠는 일관된 하나의 언어로만 표시되어야 합니다.
<link rel="alternate" hreflang="de" href="http://de.example.com/page.html" />
References
- https://www.w3.org/International/getting-started/language
- https://support.google.com/webmasters/answer/189077
3. 다국어(multilingual) 사이트를 디자인하거나 개발할 때 어떤 점을 주의해야 하나요?
- HTML 내에서 lang 속성을 사용합니다.
- 사용자를 모국어로 안내합니다 - 사용자가 번거로움 없이 쉽게 국가/언어를 변경할 수 있습니다.
- 래스터 기반 이미지(예: png, gif, jpg 등)의 텍스트는 확장 가능한 접근 방식이 아닙니다.
- 이미지에 텍스트를 배치하는 것은 모든 컴퓨터에서 보기 좋은 비시스템 글꼴을 표시하는 데 여전히 널리 사용되는 방법입니다.
- 그러나 이미지 텍스트를 번역하려면 각 텍스트 문자열에 각 언어에 대해 별도의 이미지가 생성되어야 합니다.
- 금방 유지보수하기 어렵게 될 수 있습니다.
- 단어/문장 길이 제한
- 일부 콘텐츠는 다른 언어로 작성될 때 더 길어질 수 있습니다. 디자인의 레이아웃 또는 오버플로 문제에 주의하십시오.
- 텍스트의 양이 디자인의 일부가 되거나, 디자인을 망칠 수 있는 디자인을 만들지 마세요.
- 글자 수는 headlines, labels, button과 같은 것들과 함께 동작합니다.
- 본문 텍스트나 댓글과 같이 자유롭게 흐르는 텍스트에는 문제가 적습니다.
- 색상이 인식되는 방식에 유의하세요.
- 색상은 언어와 문화에 따라 다르게 인식됩니다.
- 디자인은 색상을 적절하게 사용해야 합니다.
- 날짜 및 통화 서식(format) 지정
- 달력 날짜는 때때로 다른 방식으로 표시됩니다.
- 예. 미국의 "2012년 5월 31일"과 유럽 일부 지역의 "2012년 5월 31일".
- 달력 날짜는 때때로 다른 방식으로 표시됩니다.
- 번역된 문자열을 연결하지 마세요
- "오늘 날짜는 " + 날짜입니다. 같은 표현은 어순이 다른 언어에 대해선 깨집니다.
- 대신 번역된 단어를 매개변수로 사용하는 템플릿 문자열을 사용하십시오.
- 예를 들어, 각각 영어와 중국어로 된 다음 두 문장을 보세요.
- I will travel on {% date %}
- {% date %} 我会出发.
- 변수의 위치는 언어의 문법 규칙으로 인해 다릅니다.
- 예를 들어, 각각 영어와 중국어로 된 다음 두 문장을 보세요.
- 언어 읽기 방향을 주의하세요
- 영어는 왼쪽에서 오른쪽으로, 위에서 아래로 읽지만, 일본의 전통 텍스트는 위에서 아래로, 오른쪽에서 왼쪽으로 읽습니다.
- 경로에 로케일을 포함하면 유용합니다
- 예: en_US, zh_CN
4. data- 속성은 뭐가 좋나요?
5. HTML5를 개방형 웹 플랫폼으로 만드는 요소들을 설명해 주세요
- Semantics - 콘텐츠가 무엇인지 보다 정확하게 설명할 수 있습니다.
- Connectivity - 새롭고 혁신적인 방식으로 서버와 통신할 수 있습니다.
- Offline and storage - 웹 페이지가 클라이언트 측에 로컬 데이터를 저장하고, 이를 이용해 오프라인에서 보다 효율적으로 작동할 수 있습니다
- Multimedia - 개방형 웹에서 비디오 및 오디오를 일급 시민으로 만듭니다.
- 2D/3D graphics and effects - 훨씬 더 다양한 프레젠테이션 옵션을 허용합니다.
- Performance and integration - 컴퓨터 하드웨어의 더 나은 속도 최적화 및 더 나은 사용을 제공합니다.
- Device access - 다양한 입출력 장치를 사용할 수 있습니다.
- Styling - 작성자가 보다 정교한 테마를 작성할 수 있습니다.
6. cookie, localStorage, sessionStorage의 차이점에 대해 설명해 주세요
cookie, localStorage, sessonStorage는 모두 클라이언트 측의 키-값 저장 메커니즘입니다.
값을 문자열로만 저장할 수 있습니다.
cookie | localStorage | sessionStorage | |
초기화 |
클라이언트 또는 서버. 서버는 Set-Cookie 헤더를 사용할 수 있습니다.
|
클라이언트 | 클라이언트 |
만료 | 수동 설정 | 영원함 | 탭이 닫힐 때 |
브라우저 세션 간 유지
|
expiration에 따라 다름 | Yes | No |
모든 HTTP 요청과 함께 서버로 전송
|
쿠키는 쿠키 헤더를 통해 자동으로 전송됩니다.
|
No | No |
용량 (도메인당)
|
4kb | 5MB | 5MB |
접근 범위 | 모든 창 | 모든 창 | 같은 탭 |
References
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
- http://tutorial.techaltum.com/local-and-session-storage.html
7. <head></head> 사이에 CSS <link>를 배치하고 </body> 바로 앞에 JS <script>를 배치하는 것이 좋은 이유는 뭔가요? 반례는 뭔가요?
1. <head> 사이에 <link> 배치
페이지가 처음 로드되면 HTML과 CSS가 동시에 구문 분석됩니다.
- HTML은 DOM(Document Object Model)을 생성하고 CSS는 CSSOM(CSS Object Model)을 생성합니다.
- 두 가지 모두 웹 사이트에서 비주얼을 생성하는 데 필요하므로 "의미 있는 첫 번째 페인트(first meaningful paint)" 타이밍을 빠르게 하는데 필요합니다.
프로그레시브 렌더링은 웹 페이지의 성능을 개선(특히 인식되는 로딩 시간을 개선)하여,
가능한 한 빨리 표시할 콘텐츠를 렌더링하는 데 사용되는 기술에 부여된 이름입니다.
프로그레시브 렌더링은 최적화 점수로 측정하는 요소입니다.
문서 하단 근처에 스타일시트를 배치하는 것은 많은 브라우저에서 프로그레시브 렌더링을 방해합니다.
2. </body> 바로 앞에 <script>를 배치
<script> 태그는 다운로드 및 실행되는 동안 HTML 구문 분석을 차단하여 페이지 속도를 저하시킬 수 있습니다.
맨 아래에 스크립트를 배치하면 먼저 HTML을 구문 분석하여 사용자에게 표시할 수 있습니다.
3. <head> 및 <body> 태그는 선택 사항입니다
References
- https://developer.yahoo.com/performance/rules.html#css_top
- https://www.techrepublic.com/blog/web-designer/how-to-prevent-flash-of-unstyled-content-on-your-websites/
- https://developers.google.com/web/fundamentals/performance/critical-rendering-path/
8. 프로그레시브 렌더링(progressive rendering)이 뭔가요?
프로그레시브 렌더링은 웹 페이지의 성능을 개선(특히 인식되는 로딩 시간을 개선)하여
가능한 한 빨리 표시할 콘텐츠를 렌더링하는 데 사용되는 기술에 부여된 이름입니다.
광대역 인터넷 이전에 널리 사용되었으나,
모바일 데이터 연결이 점점 대중화되고 신뢰할 수 없게 됨에 따라 현대에도 여전히 사용되고 있습니다!
- 이미지 지연 로드(Lazy loading of images)
- 페이지의 이미지를 한 번에 모두 로드되지 않습니다.
- JavaScript는 사용자가 이미지를 표시하는 페이지 부분으로 스크롤할 때 이미지를 로드하는 데 사용됩니다.
- 보이는 콘텐츠 우선 순위 지정(or above-the-fold rendering)
- 지연된 스크립트를 사용하거나 DOMContentLoaded/load 이벤트를 수신하여 다른 리소스 및 콘텐츠에 로드할 수 있습니다.
- 가능한 한 빨리 표시하기 위해 사용자 브라우저에서 렌더링될 페이지 양에 필요한 최소한의 CSS/콘텐츠/스크립트만 포함합니다.
- 비동기 HTML 조각(Async HTML fragments)
- 백엔드에서 페이지가 구성될 때 HTML 부분을 브라우저로 플러시합니다.
- 기술에 대한 자세한 내용은 here에서 확인할 수 있습니다.
References
- https://stackoverflow.com/questions/33651166/what-is-progressive-rendering
- http://www.ebaytechblog.com/2014/12/08/async-fragments-rediscovering-progressive-html-rendering-with-marko/
9. 이미지 태그에 srcset 속성을 사용하는 이유는 무엇인가요? 브라우저가 이 속성을 평가하는 프로세스를 설명해 주세요.
<img srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 2000w" src="..." alt="">
- 500 / 320 = 1.5625
- 1000 / 320 = 3.125
- 2000 / 320 = 6.25
그 후 아래와 같은 절차에 따라 해상도에 따라 이미지를 선택합니다.
- 클라이언트의 해상도가 1x라면 1.5625가 가장 가깝기 때문에, small.jpg에 해당하는 500w가 브라우저에서 선택됩니다.
- 이는 최소값이 됩니다.
- 해상도가 레티나(2x)인 경우 브라우저는 최소값보다 크면서 결과 비율에 가장 가까운 해상도를 사용합니다.
- 500w(1.5625)는 1보다 크지만, 이미지가 나빠 보일 수 있기 때문에 선택하지 않는다는 의미입니다.
- 즉, 브라우저는 결과 비율이 2에 가까운 1000w(3.125) 이미지를 선택합니다.
References
- https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images
- https://css-tricks.com/responsive-images-youre-just-changing-resolutions-use-srcset/
10. HTML 템플릿 언어를 사용해 본 적이 있으신가요?
위 질문들에 대한 다른 답변들은 아래 링크에서 확인하세요!
'FrontEnd' 카테고리의 다른 글
[번역] CSS 레이아웃과 블록 서식 맥락 이해하기 (0) | 2023.02.02 |
---|---|
[번역] 타입스크립트를 활용한 타입 프로그래밍 입문 (0) | 2023.02.01 |
[번역] 빅테크 프론트엔드 기술 인터뷰 : CSS편 (0) | 2023.02.01 |
[번역] 집합론으로 이해하는 타입스크립트 (0) | 2023.01.31 |
Javascript로 Python range 함수 구현하기 (0) | 2023.01.31 |