λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€ μ΄μ „μ˜ 핡심 단계

λ Œλ”λ§ 과정을 더 효율적으둜 λ§Œλ“€ μˆ˜λŠ” μ—†μ„κΉŒλΌλŠ” 생각에 크리티컬 패슀(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 속도 높이기에 κ΄€λ ¨λœ 탐색 미리 λ‘œλ“œ
    등에 λŒ€ν•œ 좔가적인 ν•™μŠ΅μ„ μ›ν•˜μ‹ λ‹€λ©΄ μ•„λž˜μ˜ μ°Έκ³  자료λ₯Ό μ½μ–΄λ³΄μ‹œλ©΄ μ’‹μŠ΅λ‹ˆλ‹€!!

참고자료

Chrome for Developers - νƒμƒ‰μ—μ„œ λ°œμƒν•˜λŠ” 일

'CS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

React.jsλŠ” 라이브러리일까 ν”„λ ˆμž„μ›Œν¬μΌκΉŒ  (0) 2024.07.02

+ Recent posts