About Frontend
in Tech Interview on Frontend, Tech, Java, Javascript
About Frontend
π CSR and SSR
SPA (Single Page Application)
νλμ HTML νμΌμ κΈ°λ°μΌλ‘ μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄μ©ν΄ λμ μΌλ‘ νλ©΄μ 컨ν μΈ λ₯Ό λ°κΎΈλ λ°©μμ μΉ μ΄ν리μΌμ΄μ
λλλ§ λ°©μ : CSRMPA (Multiple page Application)
μ¬μ©μκ° νμ΄μ§λ₯Ό μμ²ν λλ§λ€, μΉ μλ²κ° μμ²ν UIμ νμν λ°μ΄ν°λ₯Ό HTMLλ‘ νμ±ν΄μ 보μ¬μ£Όλ λ°©μμ μΉ μ΄ν리μΌμ΄μ
λλλ§ λ°©μ : SSRCSR (Client Side Rendering) λΈλΌμ°μ κ° μλ²μ HTMLκ³Ό JS νμΌμ μμ²ν ν λ‘λλλ©΄ μ¬μ©μμ μνΈμμ©μ λ°λΌ JSλ₯Ό μ΄μ©ν΄μ λμ μΌλ‘ λ λλ§ μν΄
π
- 첫 λ‘λ©λ§ κΈ°λ€λ¦¬λ©΄ λμ μΌλ‘ λΉ λ₯΄κ² λλλ§ λκΈ° λλ¬Έμ μ¬μ©μ κ²½νμ΄(UX) μ’μ
- μλ²μκ² μμ²νλ νμκ° ν¨μ¬ μ κΈ° λλ¬Έμ μλ²μ λΆλ΄μ΄ λν¨
π
- λͺ¨λ μ€ν¬λ¦½νΈ νμΌμ΄ λ‘λλ λκΉμ§ κΈ°λ€λ €μΌ ν¨
- κ²μ μμ§μ κ²μλ΄μ΄ ν¬λ‘€λ§μ νλλ° μ΄λ €μμ κ²ͺκΈ° λλ¬Έμ κ²μμμ§ μ΅μ ν λ¬Έμ κ°μμ
- SSR (Server Side Rendering)
λΈλΌμ°μ κ° νμ΄μ§λ₯Ό μμ²ν λλ§λ€ν΄λΉ νμ΄μ§μ κ΄λ ¨λ HTML, CSS, JS νμΌ λ° λ°μ΄ν°λ₯Ό λ°μμμ λ λλ§ μν΄
π
- μ΄κΈ° λ‘λ© μλκ° λΉ λ₯΄κΈ° λλ¬Έμ μ¬μ©μκ° μ»¨ν μΈ λ₯Ό λΉ λ₯΄κ² λ³Ό μ μμ
- JSλ₯Ό μ΄μ©ν λ λλ§μ΄ μλκΈ° λλ¬Έμ κ²μμμ§ μ΅μ νκ° κ°λ₯ν¨
π
- λ§€λ² νμ΄μ§λ₯Ό μμ²ν λλ§λ€ μλ‘κ³ μΉ¨ λκΈ° λλ¬Έμ μ¬μ©μ κ²½νμ΄ SPAμ λΉν΄μ μ’μ§ μμ
- μλ²μ λ§€λ² μμ²μ νκΈ° λλ¬Έμ μλ²μ λΆνκ° μ»€μ§
π λΈλΌμ°μ μ λ λλ§ μ리
λ λλ§ μμ§μ΄ HTML, CSS, JavaScriptλ‘ λ λλ§ν λ CRP(Critical Rendering Path) λΌλ νλ‘μΈμ€λ₯Ό μ¬μ©νλ©° λ€μ λ¨κ³λ€λ‘ μ΄λ£¨μ΄μ§
- HTML νμ± ν, DOM(Document Object Model)νΈλ¦¬ ꡬμΆ
- CSS νμ± ν, CSSOM(CSS Object Model)νΈλ¦¬ ꡬμΆ
- Javascript μ€ν
- DOMκ³Ό CSSOMμ μ‘°ν©νμ¬ λ λνΈλ¦¬(Render Tree) ꡬμΆ
- λ·°ν¬νΈ κΈ°λ°μΌλ‘ λ λνΈλ¦¬μ κ° λ Έλκ° κ°μ§λ μ νν μμΉμ ν¬κΈ° κ³μ° (Layout/Reflow) λ¨κ³
- κ³μ°ν μμΉ,ν¬κΈ°λ₯Ό κΈ°λ°μΌλ‘ νλ©΄μ κ·Έλ¦Ό
π BOM vs DOM
BOM (Browser Object Model)
λΈλΌμ°μ μ°½μ΄λ νλ μμ νλ‘κ·Έλλ°μ μΌλ‘ μ μ΄ν μ μκ² ν΄μ£Όλ κ°μ²΄λͺ¨λΈ
λΈλΌμ°μ μ μ μ°½μ μ΄κ±°λ λ€λ₯Έ λ¬Έμλ‘ μ΄λνλ λ±μ κΈ°λ₯μ μ€νμν¬ μ μμDOM (Document Object Model)
μΉνμ΄μ§λ₯Ό νλ‘κ·Έλλ°μ μΌλ‘ μ μ΄ν μ μκ² ν΄μ£Όλ κ°μ²΄λͺ¨λΈ, λ¬Έμμ ꡬ쑰λ₯Ό λνλ
ex : Element, Document, HTMLDocument, Text, HTMLBodyElement β¦λ λ νΈλ¦¬λ μκ°μ ꡬ쑰λ₯Ό λνλΈλ€!! βdisplay : noneβμΌ κ²½μ° DOMμλ μμ§λ§ λ λνΈλ¦¬μλ ν λΉλμ§ μμ!
π λͺ¨λ(moudle)μ΄λ?
μ¬λ¬ κΈ°λ₯λ€μ κ΄ν μ½λκ° λͺ¨μ¬μλ νλμ νμΌ
- μ μ§λ³΄μμ± : κΈ°λ₯λ€μ΄ λͺ¨λνκ° μ λμ΄μλ€λ©΄, μμ‘΄μ±μ κ·Έλ§νΌ μ€μΌ μ μκΈ° λλ¬Έμ μ΄λ€ κΈ°λ₯μ κ°μ νλ€κ±°λ μμ ν λ ν¨μ¬ νΈνκ² ν μ μμ
- λ€μμ€νμ΄μ€ν : μλ°μ€ν¬λ¦½νΈμμ μ μλ³μλ μ μ곡κ°μ κ°μ§κΈ° λλ¬Έμ μ½λμ μμ΄ λ§μμ§μλ‘ κ²ΉμΉλ λ€μμ€νμ΄μ€κ° λ§μμ§ μ μμ. κ·Έλ¬λ λͺ¨λλ‘ λΆλ¦¬νλ©΄ λͺ¨λλ§μ λ€μμ€νμ΄μ€λ₯Ό κ°κΈ° λλ¬Έμ κ·Έ λ¬Έμ κ° ν΄κ²°λ¨
- μ¬μ¬μ©μ± : λκ°μ μ½λλ₯Ό λ°λ³΅νμ§ μκ³ λͺ¨λλ‘ λΆλ¦¬μμΌμ νμν λλ§λ€ μ¬μ©ν μ μμ
λͺ¨λ λ²λ€λ¬
- μλ§μ λͺ¨λλ€μ μμλ₯Ό μ΄λ»κ² μ²λ¦¬ν κ²μΈκ°? (μμ‘΄μ± μ²λ¦¬)
- λͺ¨λμ΄ λ§μμ§μλ‘ HTTP μμ²μ΄ λ§μμ§ν λ° μ΄λ‘ μΈν μ€λ²ν€λλ μ΄λ»κ² ν΄κ²°ν κ²μΈκ°?
- ES6+ μ€νμ μ½λλ₯Ό μ΄λ»κ² μ²λ¦¬ν κ²μΈκ°?
μ λ¬Έμ λ€μ ν΄κ²°νκΈ° μν΄ λ±μ₯ν κ²μ΄ λͺ¨λ λ²λ€λ¬(Module Bundler). κ°κ°μ λͺ¨λ μμ‘΄μ±μ ν΄κ²°νμ¬ νλμ μλ°μ€ν¬λ¦½νΈ νμΌλ‘ λ§λλ λꡬ
νΈλ μ€νμΌλ¬
νΈλμ€νμΌλ§(Transpiling)μ΄λ νΉμ μΈμ΄λ‘ μμ±λ μ½λλ₯Ό λΉμ·ν λ€λ₯Έ μΈμ΄λ‘ λ³νμν€λ νμ λ₯Ό λ§νλ©° μ΄λ₯Ό ν΄μ£Όλ κ²μ΄ νΈλμ€νμΌλ¬(Transpiler)μ
π CI and CD
CI (Continuous Integration, μ§μμ ν΅ν©)
λΉλμ ν μ€νΈλ₯Ό μλνν΄μ 곡μ μ μ₯μμ λ³ν©μν€λ νλ‘μΈμ€
gitκ³Ό κ°μ λ²μ κ΄λ¦¬ μμ€ν μ μ΄μ©νλ©΄ μ¬λ¬λͺ μ κ°λ°μκ° νλμ 곡μ μ μ₯μλ₯Ό μ¬μ©νλ κ²½μ°κ° λ§μμ§. μ΄λ κ²λλ©΄ μλ‘μ΄ μ½λμ λ³κ²½ μ¬νμ΄ μ μ₯μμ ν΅ν©λμ§ μμ κ²½μ° μλ‘ μΆ©λν μ μμ. λ°λΌμ λΉλ/ν μ€νΈ μλνλΆν° μ½λμ μΌκ΄μ±μ μ 곡νκΈ° λλ¬Έμ μ§μμ μΌλ‘ ν΅ν©νλ€λ μ©μ΄ μ¬μ©CD (Continuous Delivery/Deploy, μ§μμ μ λ¬/λ°°ν¬)
- μ§μμ μ λ¬ : νλ‘λμ λ°°ν¬λ₯Ό μν μνκ° λκ³ λ°°ν¬ μ체λ μλμΌλ‘ μ€ν
- μ§μμ λ°°ν¬ : νλ‘λμ κΉμ§ μλμΌλ‘ λ°°ν¬
π CSS μ λλ©μ΄μ vs JS μ λλ©μ΄μ
- CSS μ λλ©μ΄μ
transition / animation μμ± μ¬μ©
λ§μ°μ€λ₯Ό μ¬λ Έμ λ, λ©λ΄ λ²νΌμ μ νκ³Ό κ°μ κ°λ¨νκ² μ²λ¦¬νλ μ λλ©μ΄μ μ κ²½μ° CSS μ¬μ©
κ°λ¨ν μ λλ©μ΄μ μ JSλ‘ κ΅¬ννλ©΄ λ λλ§ κ³Όμ μμ reflow λ¨κ³λ₯Ό λ°μ μν€κΈ° λλ¬Έμ μ λλ©μ΄μ μ΄ λκΈ°λ λλμ μ€ μ μμ- λ°μνμΌλ‘ μ λλ©μ΄μ μ ꡬννκΈ°μ μ μ©νλ°, λ―Έλμ΄ μΏΌλ¦¬λ‘ μ λλ©μ΄μ μ μ μ©νλ©΄ λ¨
- μΈλΆ λΌμ΄λΈλ¬λ¦¬λ₯Ό νμλ‘ νμ§ μμ
- CSS μμ²΄κ° μ μΈν(declarative)μ΄κΈ° λλ¬Έμ μ΄λ€ μμκ° μ λλ©μ΄μ μ κ°μ ΈμΌ νλ€λ μ§κ΄μ μΈ ννμ΄ κ°λ₯
- λ©μΈ μ°λ λκ° μλ λ³λμ μ»΄ν¬μ§ν° μ°λ λ(Compositor Thread)μμ κ·Έλ €μ§κΈ° λλ¬Έμ λ©μΈ μ°λ λμμ μμ νλ JSλ³΄λ€ ν¨μ¨μ
- JS μ λλ©μ΄μ
CSSλ‘ μ²λ¦¬νκΈ°λ 볡μ‘νκ³ λ¬΄κ±°μ΄ μ λλ©μ΄μ μμ λ€μ ν¨μ¨μ μ΄κ³ , μΈλ°νκ² λ€λ£¨κΈ° μν΄ μ¬μ© - μμμ μ€νμΌμ΄ λ³νλ μκ°λ§λ€ μ μ΄ν μ μκΈ° λλ¬Έμ μ λλ©μ΄μ μ μΈλ°ν ꡬμ±μ΄ κ°λ₯ν΄μ§
- GPUλ₯Ό ν΅ν νλμ¨μ΄ κ°μμ μ μ΄ν μ μμ. μ΄λ CSSμ νΉμ μμ±μΌλ‘ μΈν κ°μμ λ§μμ£Όλλ°, νλμ¨μ΄ κ°μμ΄ λͺ¨λ°μΌμμ μ±λ₯μ νλ₯Ό λ°μμν¬ μ μκΈ° λλ¬Έμ μ΄λ° λ©΄μμ μ’μ
- λΈλΌμ°μ νΈνμ± μΈ‘λ©΄μμ transition / animation μμ±λ³΄λ€ λ°μ΄λ¨
π DOCTYPE
Document Typeμ μ½μλ‘, HTMLμ΄ μ΄λ€ λ²μ μΌλ‘ μμ±λμλμ§ λ―Έλ¦¬ μ μΈνμ¬ μΉλΈλΌμ°μ κ° λ΄μ©μ μ¬λ°λ‘ νμν μ μλλ‘ ν΄μ£Όλ κ²
<!DOCTYPE> μΌλ‘ μ μΈνλλ° μ΄κ±Έ ν΄μ£Όμ§ μμΌλ©΄ νΈν λͺ¨λ(quirks mode) λ‘ λμν¨. νΈν λͺ¨λμ κ²½μ° κ° λΈλΌμ°μ λ§λ€ λ¬Έμλ₯Ό λνλ΄λ λ°©μμ΄ λ€λ₯΄κΈ° λλ¬Έμ ν¬λ‘μ€ λΈλΌμ°μ§ μ΄μκ° ν¨μ¬ μ¬ν΄μ§κ² λ¨
DTD(Document Type Definition)
DTD(Document Type Definition)λ λ¬Έμ νμμ μ μν΄λμ κ²μΌλ‘ DOCTYPEμ λͺ μν λ μ¬μ©. μ¦, HTML λ¬Έμκ° μ΄λ€ λ¬Έμ νμμ λ°λ₯΄λμ§ DOCTYPEμμ DTDλ₯Ό μ§μ νλ κ²νμ€λͺ¨λ νΈνλͺ¨λ
λΈλΌμ°μ λ HTML λ¬Έμκ° DOCTYPEμ κ°μ§κ³ μμ§ μμΌλ©΄ νΈνλͺ¨λλ‘ λ λλ§μ νκ³ , κ°μ§κ³ μλ€λ©΄ μ£Όμ΄μ§ DOCTYPEμ λ§κ² νμ€λͺ¨λλ‘ λ λλ§ν¨
νΈνλͺ¨λλ‘ λ λλ§μ νκ² λλ©΄ μ€λλ μΉνμ΄μ§λ€μ μ΅μ λ²μ μ νλΌμ°μ μμλ κΉ¨μ§μ§ μκ² νκΈ° λλ¬Έμ κ° λΈλΌμ°μ λ§λ€ λ€λ₯΄κ² λ³΄μΌ μ μμ
π local storage vs session storage vs cookie
| Β | cookie | local storage | session storage |
|---|---|---|---|
| μμ±μ | ν΄λΌμ΄μΈνΈ/μλ² | ν΄λΌμ΄μΈνΈ | ν΄λΌμ΄μΈνΈ |
| μ§μμκ° | μ€μ μ¬λΆμ λ°λ¦ | λͺ μμ μΌλ‘ μ§μΈλκΉμ§ | ν / μλμ° λ«μ λκΉμ§ |
| μ©λ | 5KB | 5MB / 10MB | 5MB |
| μλ²μμ ν΅μ | O | X | X |
| μ·¨μ½μ | XSS / CSRF 곡격 | XSS 곡격 | XSS 곡격 |
π script, script async, script defer
<script>: HTML νμ±μ΄ μ€λ¨λκ³ μ¦μ μ€ν¬λ¦½νΈκ° λ‘λλλ©° λ‘λλ μ€ν¬λ¦½νΈκ° μ€νλκ³ νμ±μ΄ μ¬κ°λ¨<script async>: HTML νμ±κ³Ό λ³λ ¬μ μΌλ‘ λ‘λκ° λλλ°, μ€ν¬λ¦½νΈλ₯Ό μ€νν λλ νμ±μ΄ μ€λ¨λ¨. κ΅¬κΈ μ λ리ν±μ€μ κ°μ΄ λ€λ₯Έ μ€ν¬λ¦½νΈκ° μμ‘΄νμ§ μλ λ μμ μΈ μ€ν¬λ¦½νΈλ₯Ό λ‘λν λ μ ν©<script defer>: HTML νμ±κ³Ό λ³λ ¬μ μΌλ‘ λ‘λκ° λλλ°, νμ±μ΄ λλκ³ μ€ν¬λ¦½νΈλ₯Ό λ‘λν¨. λ³΄ν΅ <body> νκ·Έ μ§μ μ
π μλ©ν± λ§ν¬μ
β μλ―Έλ₯Ό μ μ λ¬νλλ‘ λ¬Έμλ₯Ό μμ±νλ κ²
μλ§¨ν± λ§ν¬μ
μ νκΈ° μν΄μ κ° νκ·Έλ₯Ό κ·Έ μ©λμ λ§κ² μ¬μ©ν΄μΌν¨
- ν€λ/νΈν°μ <header> μ <footer> μ¬μ©
- λ©μΈ 컨ν μΈ μ <main> κ³Ό <section> μ¬μ©
- λ 립μ μΈ μ»¨ν μΈ μ <article> μ¬μ©
- μ΅μμ μ λͺ©μΌλ‘ <h1> μ¬μ©
- μμκ° μλ λͺ©λ‘μΌλ‘ <ul> κ³Ό <li> μ¬μ©
- λ΄λΉκ²μ΄μ μ <nav> μ¬μ©
μ΄λ° μμΌλ‘ νκ·Έκ° κ°μ§κ³ μλ μλ―Έμ λ§κ² μ¬μ©νλ κ²μΈλ°, μ΄λ° μ μ΄μΈμλ CSS μ€νμΌμ λͺ μνλ νκ·Έλ₯Ό μ¬μ©νμ§ μλ κ² λν μλ§¨ν± λ§ν¬μ μ ν μ’ λ₯μ. μ¦, νκ·Έκ° κ°μ§λ μλ―Έ μμ²΄κ° μ€νμΌμ΄λΌλ©΄ μ΄λ λ§ν¬μ μμ²΄κ° μ€νμΌμ κ°λ κ²μ΄κΈ° λλ¬Έμ μλ§¨ν± λ§ν¬μ μ μ ν©νμ§ μμ
μλ₯Ό λ€μ΄, λμΌν ν¨κ³Όλ₯Ό λΆμ¬νλ
<strong>κ³Ό<b>νκ·Έκ° μλ€. λμ λμΌνκ² κΈμμμ μ§νκ² νμ§λ§<b>νκ·Έμ κ²½μ°λ κ·Έ μμ²΄κ° βboldβ μ μ½μ΄μ΄κΈ° λλ¬Έμ νκ·Έ μμ²΄κ° μ€νμΌμ κ°μ§λ€κ³ ν μ μλ€. νμ§λ§<strong>μ κ²½μ°λ βκ·Έ μμ λ΄μ©μ΄ λ€λ₯Έ λ΄μ©λ³΄λ€ λ κ°μ‘°λμ΄μΌ νλ€β λΌλ μλ―Έλ₯Ό κ°μ§κΈ° λλ¬Έμ μλ§¨ν± λ§ν¬μ μ λ μ ν©νλ€.
π
- κ²μμμ§μ΄ μλ§¨ν± νκ·Έλ₯Ό μ€μν ν€μλλ‘ κ°μ£ΌνκΈ° λλ¬Έμ κ²μμμ§ μ΅μ ν(SEO)μ μ 리ν¨
- μΉ μ κ·Όμ± μΈ‘λ©΄μμ, μκ°μ₯μ κ° μλ μ¬μ©μλ‘ νμ¬κΈ κ·Έ μλ―Έλ₯Ό ν¨μ¬ μ νμ ν μ μμ
- λ¨μν
div,spanμΌλ‘ λλ¬μΈμΈ μμλ€λ³΄λ€ μ½λλ₯Ό λ³Ό λ κ°λ μ±μ΄ λ μ’μ
