@leekh8
보안, 웹 개발, Python을 다루는 기술 블로그


Playwright로 Cloudflare 보호 사이트 스크래핑할 때 페이지네이션이 안 되는 이유

May 12, 2026 · 5 min read

Playwright로 1페이지는 수집되는데 2페이지부터 JSON 대신 빈 HTML이 반환되는 문제를 겪었습니다. Cloudflare가 AJAX 요청을 막는 원리와 새 컨텍스트 + init_script 오버라이드로 해결한 과정을 정리합니다.


React 타이머 앱에서 stale closure에 세 번 당한 이야기

May 12, 2026 · 5 min read

Pomodoro 타이머를 만들다가 설정이 반영 안 되고, 배경음이 끊기고, 초기화가 오작동하는 버그를 연달아 겪었습니다. 원인은 전부 stale closure였고, stateRef 패턴과 useCallback으로 해결했습니다.


JWT, OAuth, 세션 보안 완전 가이드: 인증·인가 취약점과 방어 전략

May 11, 2026 · 11 min read

JWT 알고리즘 혼동 공격, none 알고리즘 취약점, OAuth CSRF, 오픈 리다이렉트, 세션 하이재킹까지 웹 인증·인가에서 실제로 발생하는 취약점과 안전한 구현 방법을 코드 중심으로 정리합니다.


Linux 서버 보안 강화 가이드: 실무 하드닝 체크리스트 완전 정리

May 06, 2026 · 12 min read

SSH 키 인증, sudo 최소 권한, PAM 패스워드 정책, fail2ban, 방화벽 설정까지 Linux 서버를 운영할 때 반드시 적용해야 할 보안 강화(하드닝) 방법을 실무 명령어 중심으로 정리합니다.


Playwright 완전 가이드: 설치부터 CI/CD 자동화까지

May 06, 2026 · 9 min read

Playwright로 브라우저 자동화와 E2E 테스트를 처음 시작하는 분을 위한 완전 가이드입니다. 설치, Chromium·Firefox·WebKit 설정, locator API, 스크린샷, playwright.config.ts, GitHub Actions CI/CD 연동까지 실전 예제 중심으로 정리합니다.


OWASP LLM Top 10:2025 완전 가이드: AI 보안 취약점과 방어 전략

April 27, 2026 · 17 min read

ChatGPT, Claude, Gemini 등 LLM 기반 서비스를 개발한다면 반드시 알아야 할 OWASP LLM Top 10:2025. 프롬프트 인젝션부터 무제한 소비까지 10가지 취약점과 실전 방어 전략을 정리합니다.


🔌 OWASP API Security Top 10:2023 완전 가이드: REST API 보안 취약점과 방어 전략

April 27, 2026 · 16 min read

OWASP API Security Top 10:2023 기준으로 REST API의 10대 보안 취약점을 코드 예시와 실전 방어 전략으로 정리합니다. BOLA, 인증 실패, 리소스 소비 등 현대 API 환경의 핵심 위협을 다룹니다.


🔐 OWASP Top 10:2025 완전 가이드: 웹 보안 취약점과 방어 전략

April 27, 2026 · 18 min read

OWASP Top 10:2025 기준으로 웹 애플리케이션 10대 보안 취약점을 코드 예시와 방어 전략으로 정리합니다. 2021 대비 달라진 점, 공급망 공격, 예외 처리 실패까지 포함합니다.


🎨 CSS Flexbox & Grid 완전 정복: 언제 뭘 써야 하는가

April 20, 2026 · 12 min read

CSS 레이아웃의 핵심인 Flexbox와 Grid를 비교하고, 각 속성의 동작 원리와 실전 패턴을 정리합니다. 카드 그리드, 네비게이션, 반응형 레이아웃 등 실제 UI 구현 예시를 통해 언제 Flexbox를 쓰고 언제 Grid를 써야 하는지 알아봅니다.


⚡ JavaScript 비동기 처리 완전 가이드: Event Loop부터 async/await까지

April 20, 2026 · 12 min read

JavaScript의 싱글 스레드 구조와 Event Loop 동작 원리를 이해하고, Callback Hell → Promise → async/await로 이어지는 비동기 처리의 진화 과정을 코드와 함께 완전히 정리합니다.