이런 저런 관련 단어들이 익숙하지만, 머릿속에서 제대로 정리되지 않았던 내용들을 정리해보았다. 개발 공부 처음할 때, 취업 준비할 때도 공부했던 내용들인데, 다시 보니 모두 새롭네.
🎨 브라우저의 렌더링 원리
브라우저는 HTML, CSS, JS 파일을 받아 화면에 그림을 그린다.
HTML 파싱 → DOM(Document Object Model) 생성
HTML 코드를 한 줄씩 읽어 DOM 트리 생성
CSS 파싱 → CSSOM(CSS Obejct Model) 생성
CSS 파일 혹은 <style> 내용을 읽어 스타일 정보를 트리로 생성
Render Tree 생성
DOM과 CSSOM을 합쳐 실제로 화면에 보여줄 요소와 스타일 정보를 가진 Render Tree를 생성
Layout (배치)
각 요소의 크기와 위치를 계산. 반응형 레이아웃일 경우 화면 크기에 따라 이 과정이 달라짐
Paint (그리기)
계산된 정보대로 픽셀을 그림. 배경색, 글자, 이미지 등이 렌더링
Composite (합성)
여러 레이어를 합쳐 최종적으로 화면에 표시
🧑🏻🎨 Reflow와 Repaint
Reflow
브라우저가 요소의 크기나 위치를 다시 계산하는 과정
노드 추가/삭제로 DOM 구조가 변경될 때, 요소의 크기나 위치가 변경될 때, 폰트가 변경되거나 창 크기가 변경될 때 → Layout 재계산이 필요할 때
Layout → Paint → Composite 전 과정을 다시 하므로 큰 비용
Repaint
요소의 색상, 배경, 그림자 등 시각적 표현만 다시 그리는 과정
요소의 크기나 위치에는 영향을 주지 않는 스타일만 변경될 때 → Layout 계산은 건너뛰고 픽셀만 다시 칠함
Paint → Composite 만 다시 하므로 상대적으로 가벼운 과정
🖼️ 브라우저 렌더링 성능 최적화
DOM 조작 최소화, 조작을 한 번에 모아서 처리
CSS 변경을 묶어서 처리
CSS 속성 중 layout에 영향을 덜 주는 속성 활용 (transform, opacity)
애니메이션은 가능하면 GPU 가속 속성 활용
🔗 주소창에 google.com을 입력하면 일어나는 일
[입력] → [네트워크 요청] → [브라우저 렌더링]
URL 해석
브라우저가 주소를 분석해서 프로토콜(https), 호스트(google.com), 경로(/)를 구분
DNS(Domain Name System) 조회
google.com의 실제 IP 주소를 찾기 위해 로컬 캐시 → OS 캐시 → DNS 서버 순으로 조회
TCP 연결
IP 주소를 알면, 서버와 TCP 3-way handshake로 연결
클라이언트 → 서버: 연결 요청
서버 → 클라이언트: 요청 확인 + 응답
클라이언트 → 서버: 응답 확인
위 3번의 패킷 교환이 끝나면 통신 준비 완료
TLS handshake (https인 경우)
인증서 교환과 암호화 키 설정으로 안전한 통신 채널 생성
서버가 인증서 전송 → 브라우저는 인증서가 신뢰할 수 있는 기관이 발급했는지 확인
암호화 키를 서로 안전하게 교환 (대칭키/비대칭키 조합)
이후 모든 데이터는 암호화되어 전송
HTTP 요청 전송
브라우저가 서버로 GET / HTTP/1.1 요청과 함께 헤더(쿠키, User-Agent 등)를 전송
서버 응답
서버가 HTML 문서(+ CSS, JS, 이미지 경로)를 응답
추가 리소스 요청
브라우저가 HTML을 읽으며 <link>, <script>, <img> 등을 발견하면 다시 DNS 조회 → TCP 연결 → 요청 과정을 수행
브라우저 렌더링
HTML 파싱 → DOM 생성
CSS 파싱 →CSSOM 생성
JS 실행
Render Tree 생성 → Layout → Paint → Composite
📦 브라우저 저장소
모두 브라우저에 데이터를 저장하지만, 용도/용량/수명/전송여부가 다르다.
LocalStorage
수명: 명시적으로 삭제하기 전까지 영구 저장
용량: 도메인당 약 5~10MB
전송 여부: HTTP 요청시 서버로 자동 전송 안함
용도: 사용자 설정, 캐싱 데이터 등 장기 보관
자동 로그인
SessionStorage
수명: 브라우저 탭이 닫힐 때까지 유지
용량: 도메인당 약 5~10MB
전송 여부: 서버로 자동 전송 안함
용도: 페이지 세션 동안만 필요한 임시 데이터
입력 폼 정보, 비로그인 장바구니
Cookie
수명: 설정된 만료일 또는 브라우저 종료 시까지
용량: 약 4KB
전송 여부: 같은 도메인 요청시 HTTP 헤더에 자동 포함
용도: 세션 식별, 로그인 상태 유지, 서버 측 인증
팝업 창
HTTPOnly, Secure 속성을 설정하여 XSS나 탈취 방지
LocalStorage는 XSS 공격에 취약하기 때문에 JWT와 같은 인증 토큰은 HTTPOnly Cookie에 저장하여 자바스크립트 접근을 막는 것이 안전합니다.
LocalStorage와 SessionStorage는 API가 동일하며 차이는 저장 범위와 수명입니다.
메서드 이름과 사용법이 동일하며 둘 다 문자열 형태로만 저장 가능
둘 다 도메인 단위로 접근 가능
🪙 JWT (JSON Web Token)
JSON 객체를 Base64URL로 인코딩한 문자열 토큰으로, 인증과 정보 전달에 사용
구조 (Header.Payload.Signature) - xxxxx.yyyyy.zzzzz
Header: 토큰 타입과 서명 알고리즘 정보
Payload: 실제로 담고 싶은 정보
{ "sub": "1234567890", "name": "Yoon", "admin": true, "exp": 1691587200 }Signature: Header와 Payload를 비밀키로 서명한 값, 토큰 위변조 방지
동작 방식
사용자가 로그인하면 서버가 JWT 생성/서명하여 클라이언트에 전달
클라이언트는 JWT를 HTTPOnly 쿠키에 저장
이후 요청시 Authorization 헤더에 JWT를 함께 전송
Bearer <JWT>Bearer: ‘이 토큰을 가진 사람은 자원에 접근할 수 있다’는 인증 방식을 의미
서버는 서명 검증을 통해 토큰의 무결성과 유효기간을 확인
검증 성공시, 토큰의 Payload 정보를 사용해 요청 처리
장점
무상태 (stateless): 서버가 세션 상태를 저장할 필요 없음
범용성: 다양한 서비스, 도메인 간 인증에 사용 가능 (OAuth 등)
빠른 검증: 서명만으로 인증 가능
단점
발급 후 즉시 폐기 불가 (만료 전까지 유효 → 블랙리스트 관리 필요)
Payload는 암호화가 아님 (Base64URL은 누구나 디코딩 가능) 민감정보 금지
토큰 길이가 길어질 수 있음 (HTTP 헤더 부담)
📡 REST API (Restful API)
REST (Representational State Transfer)
자원을 이름(URI)으로 구분하고, HTTP 메서드(CRUD - GET, POST, PUT, DELETE 등)로 자원을 처리하는 아키텍처 스타일, 원칙
클라이언트 - 서버 구조
UI(클라이언트)와 데이터 저장(서버) 역할을 분리
무상태성 (stateless)
각 요청은 필요한 모든 정보를 포함, 서버는 세션 상태 저장 안함
캐시 가능 (cacheable)
서버가 응답에 캐시 여부를 명시하면 클라이언트가 response를 캐싱하여 성능과 트래픽 최적화
계층 구조 (Layered System)
로드밸런서, 프록시, 게이트웨이 등 중간 계층 투명 사용 가능
통일된 표준 인터페이스
HTTP 메서드, 상태 코드, MIME 타입 등 표준 규칙 준수
코드 온 디맨드 (Optional)
필요시 서버에서 클라이언트로 실행 코드 전송 (JS)
Restful API
REST 원칙을 엄격하고 충실하게 지킨 API
/getUsers→ 이는 URI에 행위(get)가 포함되므로 Restful하지 않다. 행위는 HTTP 메서드로 표현해야 한다.HTTP 메서드
GET: 요청받은 URI의 정보를 검색하여 응답
POST: 요청된 자원을 생성
DELETE: 요청된 자원을 삭제
PUT: 요청된 자원 전체를 수정
PATCH: 요청된 자원 일부를 수정
HEAD: GET 방식과 동일하지만 응답에 BODY가 존재하지 않으며 응답코드와 HEAD만 응답, 메타데이터 확인 용도
OPTIONS: 웹서버에서 지원되는 메서드의 종류를 확인하는 경우, CORS 사전 요청(Preflight)에서도 사용
CONNECT: HTTPS 프록시 연결시 사용
TRACE: 요청 경로 추적, 디버깅용으로 보안상 거의 사용되지 않음
HTTP 메서드의 안전성, 멱등성
안전성 (safe)
호출해도 서버 상태가 변하지 않음 → GET, HEAD, OPTIONS
멱등성 (idempotent)
여러 번 호출해도 결과가 같음 → GET, PUT, DELETE
📄 HTTP, HTTPS
HTTP (HyperText Transfer Protocol)
웹에서 데이터를 주고받는 기본 통신 규약
암호화 없이 평문(Plain text)으로 전송
HTTPS (HTTP Secure)
HTTP에 SSL/TLS 암호화 계층을 추가한 보안 버전
통신 내용을 암호화하여 도청/변조 방지
HTTPS 동작
TCP 3-way handshake
클라이언트 → 서버: 연결 요청
서버 → 클라이언트: 요청 확인 + 응답
클라이언트 → 서버: 응답 확인
TLS handshake
서버: SSL/TLS 인증서 전송
클라이언트: 인증서의 유효성 검증 (발급기관, 도메인, 만료일 등)
키 교환
HTTP 데이터 송수신 (암호화된 상태로 요청/응답 처리)
✉️ TCP vs UDP
둘 다 네트워크 전송 계층 프로토콜이며, 데이터 배송 방식을 의미
TCP (Transmission Control Protocol) → 등기우편
연결 지향적
3-way handshake 후에 데이터를 전송
패킷 순서 보장과 손실시 재전송으로 신뢰성이 높으나 속도가 느림
HTTP/HTTPS, 이메일(SMTP), 파일 전송(FTP)
UDP (User Datagram Protocol) → 엽서
연결 없이 데이터를 보내 속도가 빠름
순서 보장과 손실시 재전송 없음
실시간 스트리밍, 게임, 통화 같이 속도가 중요한 서비스에 적합