null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
⌂
임베디드 개발자를 위한 네트워크 기초 — IP 주소부터 PHY 레지스터까지
Structure
ip-addressing
•
공인 IP, 사설 IP, 그리고 NAT가 존재하는 이유
•
고정 IP vs 유동 IP — DHCP의 동작 원리
•
네트워크 클래스 — IP 주소를 나누는 논리
•
서브넷 마스크와 게이트웨이 — 네트워크를 쪼개는 방법
•
CIDR 표기법 — /24가 의미하는 것
•
DNS — 이름을 IP로, IP를 이름으로
mac-transmission
•
MAC 주소와 OUI — 하드웨어 식별의 기초
•
유니캐스트, 멀티캐스트, 브로드캐스트 — 전송 방식의 선택
•
멀티캐스트 MAC 주소 — IP에서 MAC으로의 변환 원리
•
VLAN — 하나의 스위치에서 여러 네트워크 분리하기
port-and-layer
•
포트(Port) — 하나의 IP에서 수천 개의 통신 채널을 분리하는 법
•
PDU — 프레임, 패킷, 세그먼트의 차이
•
OSI 7계층 vs TCP/IP 모델 — 두 모델이 공존하는 이유
physical-layer
•
NIC와 PHY — 임베디드 이더넷 하드웨어 구조
•
MDC/MDIO — PHY 레지스터를 제어하는 2-Wire 인터페이스
•
NLP, FLP, Auto-negotiation — PHY가 링크를 협상하는 방법
•
Extended Register — Clause 22의 32개 제한을 넘는 법
•
"Docker 기초 — 컨테이너의 모든 것"
•
Store-and-Forward vs Cut-through
wireshark-debug
•
Wireshark에서 IP Checksum이 0인 이유
•
"Docker Compose — 멀티 컨테이너 오케스트레이션"
•
FCS/CRC와 Wireshark의 4바이트 미스터리
•
"TypeScript 기초 — JavaScript에 타입을 더하다"
•
임베디드 이더넷 디버깅 — Wireshark 실전 사용법
Flow Structure
Wireshark에서 IP Checksum이 0인 이유
21 / 24
FCS/CRC와 Wireshark의 4바이트 미스터리
☆ Star
↗ Full
"Docker Compose — 멀티 컨테이너 오케스트레이션"
#docker
#docker-compose
#devops
#인프라
@devpc
|
2026-05-05 15:44:42
|
GET /api/v1/flows/23/nodes/419?fv=2&nv=2
Context:
Flow v2
→
Node v2
0
Views
1
Calls
## Docker Compose란? 단일 `docker-compose.yml` 파일로 **여러 컨테이너를 정의하고 함께 실행**하는 도구. ``` docker run -d ... (반복) docker run -d ... docker run -d ... ↓ Compose로 통합 docker compose up -d (한 번에!) ``` --- ## 기본 구조 ```yaml # docker-compose.yml version: '3.9' services: web: build: . ports: - "8000:8000" environment: - DATABASE_URL=postgresql://user:pass@db:5432/mydb depends_on: - db volumes: - .:/app db: image: postgres:15 environment: POSTGRES_USER: user POSTGRES_PASSWORD: pass POSTGRES_DB: mydb volumes: - pgdata:/var/lib/postgresql/data redis: image: redis:7-alpine ports: - "6379:6379" volumes: pgdata: ``` **포인트**: `db` 서비스의 호스트명은 자동으로 `db`가 된다. 같은 Compose 네트워크 안에서는 서비스 이름으로 통신. --- ## 핵심 명령어 ```bash # 모든 서비스 빌드 + 백그라운드 실행 docker compose up -d --build # 서비스 상태 확인 docker compose ps # 특정 서비스 로그 docker compose logs web -f # 특정 서비스 내부 접속 docker compose exec web bash docker compose exec db psql -U user mydb # 중지 (컨테이너 유지) docker compose stop # 중지 + 컨테이너 삭제 docker compose down # 중지 + 컨테이너 + 볼륨 삭제 (데이터 완전 삭제) docker compose down -v ``` --- ## 실전 패턴 ### 환경별 분리 (.env) ```bash # .env POSTGRES_PASSWORD=supersecret APP_PORT=8000 ``` ```yaml services: web: ports: - "${APP_PORT}:8000" db: environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ``` ### override 파일 (로컬 개발용) ```yaml # docker-compose.override.yml (자동으로 merge됨) services: web: volumes: - .:/app # 핫 리로드용 마운트 command: uvicorn main:app --reload ``` 프로덕션에서는 `docker-compose.override.yml` 없이 실행하거나: ```bash docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` ### 헬스체크 ```yaml services: db: image: postgres:15 healthcheck: test: ["CMD-SHELL", "pg_isready -U user"] interval: 10s timeout: 5s retries: 5 web: depends_on: db: condition: service_healthy # DB 준비 완료 후 web 시작 ``` --- ## 실습: FastAPI + PostgreSQL + Redis ```yaml version: '3.9' services: api: build: . ports: ["8000:8000"] env_file: .env depends_on: db: condition: service_healthy db: image: postgres:15 env_file: .env volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 5s retries: 5 cache: image: redis:7-alpine volumes: pgdata: ``` ```bash docker compose up -d --build docker compose exec api python -c "from app.db import engine; print('DB connected')" ``` --- ## 정리 | 상황 | 명령 | |------|------| | 처음 시작 (빌드 포함) | `docker compose up -d --build` | | 코드 변경 후 재시작 | `docker compose up -d --build web` | | 로그 실시간 확인 | `docker compose logs -f` | | 완전 초기화 | `docker compose down -v` | | 서비스 하나만 재시작 | `docker compose restart web` | Compose는 로컬 개발 환경의 표준. 팀원 누구나 `docker compose up`으로 동일 환경을 실행할 수 있다.
Wireshark에서 IP Checksum이 0인 이유
FCS/CRC와 Wireshark의 4바이트 미스터리
// COMMENTS
Newest First
ON THIS PAGE
No content selected.