/
https://42jerrykim.github.io/ _index.md
DNS는 도메인 이름을 IP 주소로 바꾸는 분산 조회 시스템이고, 소켓은 그 IP·포트로 실제 통신을 여는 프로그래밍 인터페이스입니다. 조회 과정과 컴파일 가능한 C 소켓 API 흐름, 각 호출의 실패 원인을 진단하는 방법까지 함께 다룹니다. HTTP는 상태를 갖지 않는 요청-응답 프로토콜이고, HTTPS는 그 위에 TLS로 암호화를 얹은 것입니다. 요청/응답 구조와 TLS 1.3 핸드셰이크의 순방향 비밀성을 실제 통신 흐름으로 다루고, 언제 HTTP로 충분하고 언제 HTTPS가 필수인지 판단 기준까지 설명합니다. NoSQL은 정규화된 관계형 모델 대신 다른 자료구조로 확장성과 유연성을 얻는 데이터베이스 계열입니다. 문서·키-값·컬럼·그래프 모델을 비교하고, EXPLAIN ANALYZE 실행 계획을 읽어 쿼리를 최적화하는 방법을 실제 SQL 예제와 함께 다룹니다. OSI 7계층 모델과 실제 인터넷을 움직이는 TCP/IP 4계층을 비교하고, TCP의 3-way handshake와 UDP의 차이를 실제 소켓 통신 흐름으로 다룹니다. 계층이 나뉘는 이유와 각 계층의 역할을 컴파일 가능한 C 코드와 함께 설명합니다. REST는 자원을 URL과 HTTP 메서드로 표현하는 API 설계 스타일이고, GraphQL은 클라이언트가 필요한 데이터의 모양을 직접 지정하는 쿼리 언어입니다. 오버페칭·언더페칭 문제와 REST의 캐싱 이점 대 GraphQL의 유연성 트레이드오프로 두 방식을 비교합니다. SOLID는 낮은 결합도와 높은 응집도를 실천 가능한 다섯 규칙으로 정리한 객체지향 설계 원칙입니다. 단일 책임 원칙을 중심으로 각 원칙의 목적과 흔한 오해를 코드로 다루고, 언제 적용하고 언제 과잉 설계로 흐르는지 판단 기준도 정리합니다. 결합도는 모듈 사이의 의존 정도, 응집도는 한 모듈 내부 요소들의 연관 정도를 가리키는 설계 척도입니다. 낮은 결합도·높은 응집도가 왜 좋은 설계의 기준인지, Yourdon과 Constantine의 고전적인 분류 체계와 함께 코드 리팩토링으로 다룹니다. 그래프는 트리의 부모-자식 제약을 없애고 임의의 노드끼리 연결한 자료구조입니다. 인접 리스트·인접 행렬 표현과 BFS·DFS 순회를 C 코드와 함께 비교합니다. 데드락은 두 개 이상의 실행 흐름이 서로가 쥔 락을 기다리며 영원히 멈추는 상황입니다. 상호배제·점유대기·비선점·순환대기라는 발생 필요조건 네 가지와, 락 순서 고정으로 순환대기를 끊어 이를 예방하는 방법을 C 코드로 재현합니다. 디자인 패턴은 반복되는 설계 문제에 대한 검증된 해법에 이름을 붙인 것입니다. GoF의 생성·구조·행동 패턴 분류와, 전략 패턴 코드를 SOLID 원칙과 연결해 다루며 패턴 남용(과잉 설계)을 피하는 판단 기준도 함께 정리합니다.