/
https://42jerrykim.github.io/ _index.md
배열과 연결리스트는 데이터를 순서대로 저장하는 가장 기초적인 두 자료구조입니다. 메모리 레이아웃 차이가 접근·삽입·삭제 성능과 캐시 지역성에 미치는 영향을 컴파일 가능한 C 코드로 비교하고, 동적 배열의 상환 O(1) 삽입 원리까지 함께 다룹니다.
Git은 파일의 변경 이력을 저장하는 것이 아니라, 매 커밋마다 전체 스냅샷을 해시로 저장하는 그래프 기반 시스템입니다. 커밋·브랜치·머지의 내부 자료구조와, rebase가 공유 히스토리에서 왜 위험한지까지 다룹니다.
샤딩은 데이터를 여러 서버에 나눠 저장하고, 복제는 같은 데이터를 여러 서버에 복사해 둡니다. 두 기법이 각각 어떤 한계를 넓히는지, 일관 해싱과 복제 지연이 만드는 일관성 문제, 그리고 언제 샤딩을 도입해야 하는지를 실제 명령 예제와 함께 다룹니다.
스택과 큐는 배열·연결리스트 위에 후입선출·선입선출이라는 접근 순서 제약을 얹은 자료구조입니다. 함수 호출, 되돌리기, 너비 우선 탐색 같은 실제 사용 사례와 원형 큐로 배열 큐를 구현하는 원리를 컴파일 가능한 C 코드로 비교합니다.
암호화는 되돌릴 수 있게 데이터를 숨기고, 해싱은 되돌릴 수 없게 지문을 만듭니다. 대칭키·비대칭키 암호화와, 비밀번호를 안전하게 저장하는 솔팅된 해시를 비교합니다.
SQL 인젝션, XSS, CSRF는 웹 애플리케이션에서 가장 흔한 세 가지 취약점입니다. 각 공격이 성립하는 조건과, 파라미터화 쿼리·이스케이핑·CSRF 토큰으로 막는 원리를 코드로 다루며, 프런트엔드 검증만으로는 왜 부족한지도 설명합니다.
웹소켓은 HTTP 연결을 업그레이드해 양방향 실시간 통신을 여는 프로토콜이고, CORS는 브라우저가 다른 출처로의 요청을 통제하는 보안 정책입니다. 두 개념을 실제 핸드셰이크·preflight 흐름과 실행 가능한 코드로 다룹니다.
인증은 사용자가 누구인지 확인하는 것이고, 인가는 그 사용자가 무엇을 할 수 있는지 결정하는 것입니다. 세션 기반과 토큰(JWT) 기반 인증을 비교하고, 로그인 여부만 확인해 역할 검사를 빠뜨리는 권한 상승 취약점을 실제 코드로 다룹니다.
정규화는 데이터 중복과 이상 현상을 줄이기 위해 테이블을 쪼개는 설계 원칙이고, 인덱스는 그렇게 나뉜 테이블에서도 빠른 조회를 보장하는 자료구조입니다. B-Tree 인덱스가 디스크 I/O를 줄이는 원리를 SQL과 함께 다룹니다.
캐싱은 느린 원본 대신 빠른 사본을 먼저 확인해 반복 조회를 줄이는 기법입니다. 지역성 원리, LRU 교체 정책, 캐시 무효화가 왜 어려운 문제인지 C 코드와 함께 다룹니다.