λ λλ¬ νλ‘μΈμ€ μ΄μ μ ν΅μ¬ λ¨κ³
λ λλ§ κ³Όμ μ λ ν¨μ¨μ μΌλ‘ λ§λ€ μλ μμκΉλΌλ μκ°μ ν¬λ¦¬ν°μ»¬ ν¨μ€(Critical Path)μ λν΄ λ€μ νμ΅νλ μ€ λ λλ¬ νλ‘μΈμ€κ° νλ©΄μ λ λλ§ νκΈ° μ μ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§μ λν΄ κΆκΈμ¦μ΄ μκ²Όμ΅λλ€.
μμ°μ€λ½κ² Chrome for Developersλ₯Ό μ½μ΄λ³΄μκ³ κ·Έ κ²°κ³Ό, μ§κΈλΆν° μ€λͺ
νκ² λ λ¨κ³λ€μ΄ λ λλ¬ νλ‘μΈμ€ μ΄μ μ μ΄λ»κ² μ§νλλμ§μ λν λ΄μ©μ λλμ΄ λ°κ²¬νμ΅λλ€!
λΈλΌμ°μ μ£Όμμ°½μ urlμ μ λ ₯ ν μΉμ¬μ΄νΈκ° μ¬μ©μμκ² λ³΄μ΄κΈ°κΉμ§ κ³Όμ μ€μμ μ¬μ©μμκ² μ¬μ΄νΈκ° 보μ΄κΈ° μ§μ κΉμ§μΈ λ λλ¬ νλ‘μΈμ€μκ² λ°μ΄ν°κ° μ λ¬λκΈ°κΉμ§ 5κ°μ§μ κ³Όμ μΌλ‘ μ§νμ΄ λλ©° μ΄ κ³Όμ λ€μ λν΄ μμ±νμμ΅λλ€.
μ μ κ°μ κΆκΈμ¦μ κ°μ§ λ€λ₯Έ λΆλ€μ΄ κ³μμ§ μμκΉ?
λΌλ μκ°μ΄ μ κ° μ²« λ²μ§Έ λΈλ‘κ·Έ ν¬μ€ν
μ νκ² λ μ΄μ μ
λλ€.
μ κ° μ½μ λ΄μ©μ κΈ°λ°μΌλ‘ μμ±λ λ λλ¬ νλ‘μΈμ€ μ΄μ μ λ€μν λ¨κ³λ€μ λν΄ μ΄ν΄λ³΄λ©°, κΆκΈμ¦μ΄ ν΄μλμκΈΈ λ°λΌκ² μ΅λλ€!
1λ¨κ³: μ λ ₯ μ²λ¦¬ (Handling Inputs)
μ¬μ©μκ° μ£Όμ νμμ€μ textλ₯Ό μ λ ₯νκΈ° μμνλ©΄ λΈλΌμ°μ νλ‘μΈμ€ μμ μλ UI μ€λ λκ° κ°μ₯ λ¨Όμ μ μ κ° μ λ ₯ν μ΄ text κ°μ ν΅ν΄μ 'κ²μμ΄ λλ URLμΈκ°μ?'λΌκ³ λ¬ΌμΌλ©° νλ¨μ ν©λλ€.
Chromeμμλ μ£Όμ νμμ€μ΄ κ²μ μ λ ₯λμ΄κΈ°λ νλ―λ‘ UI μ€λ λκ° μ λ ₯λ text νμ± νμ¬ Search Queryλ‘ νλ¨ ν κ²μμμ§(Search Engine)μκ² λ³΄λ΄μ΄ κ²μμ΄ λκ² λ§λ€μ§ URLμ΄λΌκ³ νλ¨νμ¬ Network Threadμκ² μ λ¬ν μ§ μ€λΉνλ κ³Όμ μ λλ€.
μ¬κΈ°κΉμ§λ μ¬μ©μκ° Enter ν€λ₯Ό λλ₯΄κΈ° μ κΉμ§μ κ³Όμ μ΄λ κ±Έ κΈ°μ΅ν΄ μ£ΌμΈμ!
2λ¨κ³: λ΄λΉκ²μ΄μ μμ (Start Navigation)
1λ¨κ³μμ μ¬μ©μκ° μ
λ ₯κ°μ λ€ μ
λ ₯ν λ€μ Enter ν€λ₯Ό λλ₯΄λ©΄ 2λ¨κ³κ° μμλλ©° UI μ€λ λκ° λ€νΈμν¬ νΈμΆ(Network call initiates)μ μμν©λλ€.
μ΄λ λ€νΈμν¬ νΈμΆμ΄λ Network threadμκ² URLμ μ λ¬νλ κ²μ μλ―Ένλ©° μ¬μ΄νΈ μ½ν
μΈ λ₯Ό κ°μ Έμ€λ κ³Όμ μ
λλ€.
λ‘λ© μ€νΌλκ° νμλκ³ λ€νΈμν¬ μ€λ λκ° DNS μ‘°νμ κ°μ μ μ ν νλ‘ν μ½μ ν΅κ³Όνκ³ μμ²μ TLS μ°κ²°μ μ€μ ν©λλ€.
μ΄ μμ μμ λ€νΈμν¬ μ€λ λλ 301κ³Ό κ°μ HTTP Status CodeμΈ μλ² Redirection ν€λλ₯Ό μμ ν μ μμ΅λλ€. μ΄ κ²½μ° λ€νΈμν¬ μ€λ λλ UI μ€λ λμκ² Redirect ν΄μΌ νλ€λ ν΅μ μ νκ³ UI μ€λ λλ λ€λ₯Έ URL μμ² μ¦, λ€λ₯Έ λ€νΈμν¬ νΈμΆμ μμν©λλ€.
μ΄λ 301 μ½λκ° μλλΌλ©΄ 3λ¨κ³ κ³Όμ μΈ μλ΅ μ½κΈ°(Read Response)κ° μ§νλ©λλ€.
λ€λ§ μ΄μ§Έμ λ€νΈμν¬ νΈμΆ κ³Όμ μ Network Threadκ° μ§μ μ μΌλ‘ νλ κ²μ΄ μλλΌ UI Treadλ₯Ό κ±°μ³ μ΄λ£¨μ΄μ§κΉμ? κ·Έ μ΄μ λ λ‘λ© μ€νΌλ(Loading spinner)μ λ λλ¬ νλ‘μΈμ€(Renderer process) νμμ μμ΅λλ€.
μ μ¬μ§μ κ°μ₯ μΌμͺ½ ν ν€μμ νλκ² λμκ°κ³ μλ λ‘λ© μ€νΌλκ° λ³΄μ΄μ€ κ²λλ€.
μ΄λ κ² λ‘λ© μ€νΌλλ₯Ό νμ μΌμͺ½ λͺ¨μ리μ 그리λ κ²μ κ΄λ¦¬νλ κ²μ΄ UI Treadμ
λλ€.
λ€νΈμν¬ νΈμΆμ΄ μμλλ€λ κ²μ UI Treadκ° μ μ μλ€λ©΄ λ‘λ© μ€νΌλλ₯Ό 그릴 μ μμ΅λλ€.
Network Threadκ° UI Treadμκ² λ€νΈμν¬ νΈμΆμ΄ μμλλ€λ κ²μ μ리λ κ²λ³΄λ€ λΉ λ₯΄κ² λ‘λ© μ€νΌλλ₯Ό νμν μ μμ΅λλ€.
λ λλ¬ νλ‘μΈμ€ νμκ³Όμ μ 4λ¨κ³ λ λλ¬ νλ‘μΈμ€ μ°ΎκΈ°μμ μμΈν μ μ΄λ³΄κ² μ΅λλ€.
UI μ€λ λκ° λ€νΈμν¬ νΈμΆμ ν λ μ΄ λ€νΈμν¬ νΈμΆμ μλ²μ ν΅μ μ νλ κ²μ΄κΈ°μ μλ°± λ°λ¦¬μ΄λ 걸릴 μ μμΌλ―λ‘ μ΄ νλ‘μΈμ€μ μλλ₯Ό λμ΄κΈ° μν μ΅μ νλ₯Ό νλ€λ κ²λ§ κΈ°μ΅ν΄ μ£ΌμΈμ!
3λ¨κ³: μλ΅ μ½κΈ° (Read response)
Response body (νμ΄λ‘λ)κ° λ€νΈμν¬ μ€λ λλ‘ λ€μ΄μ€κΈ° μμνλ©΄ λ€νΈμν¬ μ€λ λλ Response Bodyμ λ°μ΄ν° νμ
μ νμΈν΄μΌ ν©λλ€.
νμΈ ν HTML νμΌμΈ κ²½μ° λ€μ λ¨κ³λ₯Ό μν΄ λ°μ΄ν°λ₯Ό λ λλ¬ νλ‘μΈμ€μκ² μ λ¬ν μ€λΉλ₯Ό νκ³ ZIP νμΌ λλ κΈ°ν νμΌ νμμΈ κ²½μ° λ€μ΄λ‘λ μμ²μ΄λ―λ‘ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λ κ΄λ¦¬μμ μ λ¬ν΄μΌ ν©λλ€. (a νκ·Έμμμ λ€μ΄λ‘λλ μ¬μ©μκ° λͺ
μμ μΌλ‘ ν΄λ¦νμ¬ λ€μ΄λ‘λλ₯Ό μμνλ μλμ μΈ κ³Όμ κ³Όλ λ€λ¦
λλ€.)
νμΈμ μ΄λ€ μμΌλ‘ μ΄λ£¨μ΄μ§κΉμ?
Response bodyκ° λ€μ΄μ€κΈ° μμνλ©΄ λ€νΈμν¬ μ€λ λλ νμμ λ°λΌ μ€νΈλ¦Όμ μ²μ λͺ λ°μ΄νΈλ₯Ό νμΈν©λλ€. κ°μ λ¨Όμ Response bodyμ Content-Type ν€λμ νμλλ λ°μ΄ν° μ νμ νμΈνμ§λ§, λλ½λκ±°λ μλͺ»λμμ μ μμΌλ―λ‘ μ¬κΈ°μμ MIME νμ
μ€λν (MIME Type Sniffing)μ μ€νν©λλ€.
Sniffing λ¨μ΄ κ·Έλλ‘ λμλ₯Ό λ§‘λ κ²μ²λΌ μ£Όλ‘ λ°μ΄ν°μ μ²μ λͺ λ°μ΄νΈλ₯Ό λΆμνμ¬ νΉμ νμΌ νμμ νΉμ§μ μΈ ν¨ν΄μ΄λ μλ³μλ₯Ό μ°Ύμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ νν MIME νμ
μ νμΈνκ³ , κ·Έμ λ§κ² λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΅λλ€.(MIME νμ
μ€λνμ μ£Όλ‘ λ³΄μ λ° νΈνμ± μΈ‘λ©΄μμ μ¬μ©λλ©°, μμμΉ λͺ»ν νμμ νμΌμ΄λ μ
μ± μ½λλ₯Ό νμ§νλ λ° λμμ΄ λ©λλ€.)
μ΄ κ³Όμ μμ SafeBrowsing κ²μ¬ κ³Όμ κ³Ό CORB(Cross Origin Read Blocking)κ³Όμ λ μ§νλ©λλ€.
λ¨Όμ SafeBrowsingμ ꡬκΈμμ μΈμ΄ν λΈλΌμ°μ§μ΄λΌκ³ κ²μ μ μ 곡μ ν©λλ€! Domainκ³Ό Response Dataκ° μλ €μ§ μ μ± μ¬μ΄νΈ(Malicious site)μ μΌμΉνλ κ²μΌλ‘ 보μ΄λ©΄ λ€νΈμν¬ μ€λ λ μλ¦Όμ΄ κ²½κ³ νμ΄μ§(Warning page)λ₯Ό νμν©λλ€.
CORB κ³Όμ μ Same-Origin Policyμ κ΄λ ¨μ΄ μμ΅λλ€.
Same-Origin Policyλ λμΌ μΆμ² μ μ±
μΌλ‘, 보μμμ μ΄μ λ‘ λμΌν μΆμ²(Origin)μμλ§ λ°μ΄ν°μ μ κ·Όμ΄ νμ©λλλ‘ νλ μ μ±
μ
λλ€.
μ¦, Same-Origin λ°μ΄ν°λ μμ νκ³ μ λ’°ν λ§νλ€κ³ λ§ν΄μ£Όλ μ μ±
μ
λλ€.
CORBλ λΈλΌμ°μ μμ νμ΄μ§μ μ€ν¬λ¦½νΈκ° λ€λ₯Έ μΆμ²μ 리μμ€λ₯Ό μ½λ κ²μ λ°©μ§νλ 보μ λ©μ»€λμ¦μΌλ‘ νΉν, λΈλΌμ°μ λ μ€ν¬λ¦½νΈκ° λ°μ΄ν°λ₯Ό μμ²ν λ, μ΄ λ°μ΄ν°κ° ν΄λΉ μ€ν¬λ¦½νΈμ μΆμ²μ λ€λ₯Ό κ²½μ° CORBλ₯Ό μ μ©νμ¬ λ°μ΄ν°λ₯Ό μ°¨λ¨ν©λλ€.
μ΄λ₯Ό μ΄μ©ν΄ Renderer processμκ² cross-site dataλ₯Ό μ λ¬νμ§ μκ² λ©λλ€.
λ¬Όλ‘ μ λμ μΈ κ²μ μλλλ€.
CORS μ€μ μ μ¬μ©νλ©΄ νΉμ λλ©μΈ κ°μ λ°μ΄ν° κ΅νμ νμ©ν¨μΌλ‘μ¨, Same-Origin Policyμ CORBμ μν 보μ μ μ±
μ μ μ°νκ² μ‘°μ ν μ μμ΅λλ€.
μμλ‘ Spring Security λ±μ 보μ μ€μ μμ νμ©ν λλ©μΈμ λͺ
μμ μΌλ‘ μ€μ νλ κ±Έ λ μ¬λ¦¬μλ©΄ μ½κ² λ€μ!
μ΄ λͺ¨λ 3λ¨κ³ κ³Όμ μ ν΅κ³Όν HTML νμΌ νμμ λ°μ΄ν°λ₯Ό λ λλ¬ νλ‘μΈμ€μκ² μ λ¬ν μ€λΉλ₯Ό ν©λλ€.
4λ¨κ³: λ λλ¬ νλ‘μΈμ€ μ°ΎκΈ° (Find Renderer process)
1λ¨κ³ - 3λ¨κ³ κΉμ§μ λ°μ΄ν° νμ κ³Ό μμ μ±μ λν κ²μ¬κ° μλ£λκ³ λΈλΌμ°μ κ° μμ²ν μ¬μ΄νΈλ‘ μ΄λν΄μΌ νλ€κ³ νμ νλ€λ©΄ 4λ¨κ³κ° μμλλ©° Network Thread κ° UI Threadμκ² λ°μ΄ν°κ° μ€λΉλμμ(Data is ready)μ μ립λλ€.
μ΄λ UI μ€λ λκ° μΉνμ΄μ§ λ λλ§μ μ€νν λ λλ¬ νλ‘μΈμ€λ₯Ό μ°Ύλλ€κ³ μ€ν΄νκΈ° λ± μ’μ΅λλ€!
κ·Έλ μ§ μλ€λ μλ―Έκ² μ£ ?!
2λ¨κ³μμ λ λλ¬ νλ‘μΈμ€ νμκ³Όμ μ λν΄ μμΈν μμ보μλ λ§μ νμμ΅λλ€.
κΈ°μ΅μ΄ μλμ λ€λ©΄ λ€μ μ¬λΌκ° νμΈν΄ μ£ΌμΈμ!
λλμ΄ μ€λ 걸리λ λ€νΈμν¬ νΈμΆμκ°μ νμ©ν λ λλ¬ νλ‘μΈμ€ νμ μ΅μ ν κ³Όμ μ λν΄ μ΄μΌκΈ°ν μ°¨λ‘μ
λλ€.
2λ¨κ³μμ UI μ€λ λκ° λ€νΈμν¬ μ€λ λλ‘ URL μμ²μ 보λκΈ°μ μ΄λ€ μ¬μ΄νΈλ‘ μ΄λνλμ§ μ΄λ―Έ μκ³ μμ κ²λλ€. UI μ€λ λλ λ€νΈμν¬ μμ²κ³Ό λμμ λ λλ¬ νλ‘μΈμ€λ₯Ό μ¬μ μ μ°ΎκΈ° μμν©λλ€.
λ³λ ¬μ μΌλ‘ μ²λ¦¬κ° κ°λ₯νκΈ°μ λ§μ μκ°μ μλ μ μμ΅λλ€!
κ·Έλ λ€λ©΄ λͺ¨λ κ²μ΄ μμλλ‘ μ§νλ ν λ€νΈμν¬ μ€λ λκ° λ°μ΄ν°λ₯Ό μμ νμ λ λ λλ¬ νλ‘μΈμ€κ° μ΄λ―Έ λκΈ° μνμ μκ² μ£ ?!
μ΄λ ν¬λ‘μ€ μ¬μ΄νΈλ‘ Redirection λλ κ²½μ° μ΄ νλ‘μΈμ€μμ μ°Ύλ λ λλ¬ νλ‘μΈμ€λ μ¬μ©λμ§ μμ μ μμΌλ©°, μ΄ κ²½μ° λ€λ₯Έ νλ‘μΈμ€κ° νμν μ μμ΅λλ€.
μ΄ κ³Όμ λν μ μμ μΌλ‘ μ§νλμλ€λ©΄ λλμ΄!! μλ΅λ°μ λ°μ΄ν°μΈ HTML νμΌμ 미리 μ°Ύμλμ λ λλ¬ νλ‘μΈμ€μκ² μ λ¬ν©λλ€!
μ΄μ λ λλ¬ νλ‘μΈμ€λ λ λλ§ ν μ€λΉλ₯Ό μμνκ² λλλ° μ΄ μ§μ μ λ°μνλ κ² μ»€λ°λ΄λΉκ²μ΄μ
μ΄λΌλ κ³Όμ μ
λλ€.
5λ¨κ³: νμ μ»€λ° (Commit Navigation)
λλμ΄ λ§μ§λ§ κ³Όμ μ
λλ€!
ν΄λΉ κ³Όμ μ ν΅ν΄μ λ΄λΉκ²μ΄μ
μ΄ μ»€λ°λκ³ μ΄ κ³Όμ μ΄ λλλ©΄ λ λλ¬ νλ‘μΈμ€ μμμμ λ λλ§ κ³Όμ μ΄ μ§νλ©λλ€.
λΈλΌμ°μ νλ‘μΈμ€ μμ UI μ€λ λκ° HTML νμΌ λ°μ΄ν°λ₯Ό κ°μ§κ³ μμΌλ―λ‘ λΈλΌμ°μ νλ‘μΈμ€μμ HTML νμΌ λ°μ΄ν°λ₯Ό λ λλ¬ νλ‘μΈμ€μκ² μ λ¬ν©λλ€.
νλ‘μΈμ€μμ νλ‘μΈμ€λ‘μ λ°μ΄ν° μ λ¬μ΄κΈ°μ IPC(Inter-Process Communication)λ₯Ό νμ©νμ¬ μ λ¬λ©λλ€. μ΄λ λ°μ΄ν° μ€νΈλ¦Όμ μ λ¬νλ―λ‘ λ λλ¬ νλ‘μΈμ€κ° HTML λ°μ΄ν°λ₯Ό κ³μ μμ ν μ μμ΅λλ€.
κ·Έλ κ² λΈλΌμ°μ νλ‘μΈμ€μμ λ λλ¬ νλ‘μΈμ€λ‘μ 컀λ°μ΄ μλ£λλ€λ νμΈμ μμ νλ©΄ λ΄λΉκ²μ΄μ
μ΄ λλκ² λλλ° κ·Έλ κ² λλ©΄ μ΄μ λ¬Έμ λ‘λ λ¨κ³(Document Loading Phase)κ° μμλ©λλ€.
λ¬Έμ λ‘λ λ¨κ³κ° λ λλ¬ νλ‘μΈμ€κ° μμλλ λ λλ§ κ³Όμ μ
λλ€.
μ΄ λ λλ§ κ³Όμ μ΄ μμλκΈ° μ μ£Όμ νμμ€μ΄ μ¬μ©μκ° μ²μμ μ
λ ₯νλ κ·Έ μ£Όμμ°½μΌλ‘ μ
λ°μ΄νΈλκ³ μ μ΄λ―Έμ§μμ URL μ£Όμ μΌμͺ½ μλ¬Όμ λͺ¨μμ 보μ νμκΈ°(Security indicator) λ° μ¬μ΄νΈ μ€μ UIκ° μ
λ°μ΄νΈλ©λλ€.
μ΄λ μλ¬Όμ νμμ μ¬μ΄νΈ μ€μ UIλ μ΄λ μ μ¬μ΄νΈκ° μλ μ΄λν μ¬μ΄νΈμ μ λ³΄λ‘ νμΈμ΄ λμ΄ ν΄λΉ μ¬μ΄νΈμ μν리ν°λ₯Ό νμνλ κ²μΌλ‘ μ
λ°μ΄νΈκ° λ©λλ€.
λ§μ§λ§μΌλ‘ λ΄λΉκ²μ΄μ
μ΄ μ»€λ°λμλ€λ κ²μ μΈμ
νμ€ν 리(Sesstion History)κ° μλ‘κ² μΆκ°λμλ€λ κ²μ μλ―Έν©λλ€. μ΄λ λ€λ‘ κ°κΈ°-μμΌλ‘ κ°κΈ° λ²νΌμ λλ₯΄λ©΄ λ°©κΈ μ΄λν μ¬μ΄νΈλ₯Ό λ¨κ³λ³λ‘ μ§νν μ μλλ‘ νμ μΈμ
κΈ°λ‘μ΄ μ
λ°μ΄νΈλλ κ³Όμ μ
λλ€. ν λλ μ°½μ λ«μ λ ν/μΈμ
볡μμ μ©μ΄νκ² νκΈ° μν΄ μΈμ
κΈ°λ‘μ νλ λμ€ν¬μ μ μ₯λ©λλ€.
κ·Έλ κΈ°μ νλ©΄μ΄ κ·Έλ €μ§κΈ° μ μ΄λΌλ μ»€λ° λ΄λΉκ²μ΄μ
κ³Όμ κΉμ§λ§ μλ£κ° λμλ€λ©΄ λ€λ‘ κ°κΈ°λ₯Ό νμμ λ λ°λ‘ μ§μ μ λΈλΌμ°μ λ‘ μ΄λν μ μλ κ²μ
λλ€!
μΆκ° λ¨κ³: μ΄κΈ° λ‘λ μλ£
5λ¨κ³ κ³Όμ κΉμ§ μλ£ ν μ΅μ’
μ μΌλ‘ λ λλ¬ νλ‘μΈμ€κ° HTML νμΌμ λ°μΌλ©° μ¬λ¬ κ°μ§ κ³Όμ μ κ±°μΉλ©΄μ λΈλΌμ°μ λ λλ§μ λͺ¨λ κ³Όμ μ΄ λλλ©΄ λ λλ¬ νλ‘μΈμ€λ λͺ¨λ onload μ΄λ²€νΈκ° νμ΄μ§μ λͺ¨λ νλ μμμ μ€νμ΄ μλ£λ νμ IPCλ₯Ό ν΅ν΄ λΈλΌμ°μ νλ‘μΈμ€μκ² λͺ¨λ κ³Όμ μ΄ μλ£λμμμ μ립λλ€.
μ΄ μλ΅μ λ°μ λΈλΌμ°μ νλ‘μΈμ€μ UI μ€λ λλ νμμ λ‘λ© μ€νΌλλ₯Ό μ€μ§ν©λλ€!
μ΄ μμ μ΄νμλ ν΄λΌμ΄μΈνΈ μΈ‘ JavaScriptκ° μ¬μ ν μΆκ° 리μμ€λ₯Ό λ‘λνκ³ μ λ·°λ₯Ό λ λλ§ ν μ μκΈ° λλ¬Έμ μ¬μ ν λμ μΌλ‘ νμ΄μ§λ₯Ό μ λ°μ΄νΈνκ³ νμ₯ν μ μλ μμ μ λλ€.
λ μμ보기!
- μ¬μ©μκ° μ£Όμ νμμ€μ λ€λ₯Έ URLμ λ€μ μ λ ₯νλ©΄?! - beforeunload νμ΅
- μλΉμ€ μ컀
- Chrome μλ λμ΄κΈ°μ κ΄λ ¨λ νμ 미리 λ‘λ
λ±μ λν μΆκ°μ μΈ νμ΅μ μνμ λ€λ©΄ μλμ μ°Έκ³ μλ£λ₯Ό μ½μ΄λ³΄μλ©΄ μ’μ΅λλ€!!
μ°Έκ³ μλ£
'CS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
React.jsλ λΌμ΄λΈλ¬λ¦¬μΌκΉ νλ μμν¬μΌκΉ (0) | 2024.07.02 |
---|