2026/04 8

[Redis HA | Part 2] Redis Cluster — 샤딩 + HA

목차WHY — 왜 Redis Cluster가 필요한가핵심 개념 — 샤딩과 해시 슬롯Redis Cluster 구성슬롯 라우팅 확인Failover 실습과반수 장애 시 클러스터 중단노드 추가 (Scale-out)노드 제거 (Scale-in)Sentinel vs Cluster전체 요약1. WHY — 왜 Redis Cluster가 필요한가Part 6에서 Sentinel로 HA를 구성했다. Sentinel은 Master 장애 시 자동 Failover를 보장하지만 한계가 있다.Sentinel 한계├── Master 1대에 모든 데이터가 쌓임├── 메모리 한계 도달 시 수평 확장 불가└── 아리 앱 카드 100만 장, 좋아요 수억 건 → 단일 Master로 감당 불가Redis Cluster는 데이터를 여러 노드에 분산..

Infra & Network 2026.04.30

[Docker | Part 5] Docker 네트워크 원리 이해

목차WHY — 왜 Docker 네트워크를 알아야 하는가Docker 네트워크 종류컨테이너 간 DNS 통신 원리커스텀 네트워크 구성 실습전체 요약1. WHY — 왜 Docker 네트워크를 알아야 하는가Redis Master-Replica를 구성할 때 Replica가 Master를 어떻게 찾는가?K8s에서 Spring Boot 앱이 Redis에 접속할 때 IP 대신 이름을 쓰는 이유는?컨테이너끼리 통신하는 원리를 모르면 이 질문에 답할 수 없다.Docker 네트워크는 단순한 설정이 아니라 MSA 서비스 간 통신의 기반이다.2. Docker 네트워크 종류구분특징사용 시점bridge기본 네트워크. 컨테이너끼리 격리된 공간에서 통신단일 호스트에서 컨테이너 간 통신host컨테이너가 Host OS 네트워크를 그대로 사..

Infra & Network 2026.04.30

[Docker | Part 4] Volume + Network + Registry

목차WHY — 왜 Volume / Network / Registry가 필요한가Volume — 데이터 영속성Network — 컨테이너 격리Registry — 이미지 배포전체 요약1. WHY — 왜 이걸 알아야 하는가세 가지 문제가 있다.① 데이터가 날아간다 : MySQL 컨테이너를 삭제하면 DB 데이터가 사라진다. Part1에서 배운 쓰기 가능 레이어가 컨테이너와 함께 소멸하기 때문이다 → Volume으로 해결② 네트워크 격리가 필요하다 : 모든 컨테이너가 같은 네트워크에 있으면 DB에 누구나 접근 가능하다 → Network로 해결③ 이미지를 서버에 전달해야 한다 : 로컬에서 빌드한 이미지를 K8s 서버에 어떻게 올리나? → Registry로 해결2. Volume — 데이터 영속성Volume 없을 때doc..

Infra & Network 2026.04.30

[Docker | Part 3] Docker Compose

목차WHY — 왜 Docker Compose가 필요한가docker-compose.yml 구조서비스 간 DNS 통신healthcheck + depends_on.env 파일로 환경변수 분리핵심 명령어 정리환경별 Compose 파일 분리전체 요약1. WHY — 왜 Docker Compose가 필요한가로컬에서 띄운다고 하면docker run -d --name mysql \ -e MYSQL_ROOT_PASSWORD=ari1234 \ -e MYSQL_DATABASE=aridb \ -p 3306:3306 \ mysql:8docker run -d --name redis \ -p 6379:6379 \ redis:7.2docker run -d --name ari-app \ -p 8080:8080 \ --li..

Infra & Network 2026.04.30

[Docker | Part 2] Dockerfile + Multi-stage Build

목차WHY — 왜 Dockerfile을 알아야 하는가Dockerfile 핵심 문법레이어 캐시 전략CMD vs ENTRYPOINTSpring Boot 앱 이미지 만들기Multi-stage Build.dockerignore전체 요약1. WHY — 왜 Dockerfile을 알아야 하는가Part 1에서 redis:7.2를 pull해서 컨테이너로 띄웠다. 그건 누군가 만들어둔 이미지를 가져다 쓴 것이다.아리 팬 커뮤니티의 카드 뽑기 서비스, 채팅 서비스를 K8s에 올리려면? 내 Spring Boot 앱을 직접 이미지로 만들어야 한다. Dockerfile을 모르면 그게 불가능하다.Dockerfile (설계도) │ │ docker build ▼Image (결과물) │ │ docker run..

Infra & Network 2026.04.28

[Docker | Part 1] Docker 핵심 구조 이해

목차환경 준비컨테이너 vs VM — 왜 컨테이너가 가벼운가Image 레이어 구조Image → Container 생성 원리핵심 명령어 실습전체 흐름 요약1. 환경 준비docker --version# Docker version 28.0.4docker images# redis:7.2 이미지 준비 (없으면 아래 명령어로 pull)docker pull redis:7.22. 컨테이너 vs VM — 왜 컨테이너가 가벼운가VM의 구조VM은 하드웨어를 통째로 가상화한다. Hypervisor 위에 Guest OS를 올리고, 그 위에 앱을 올리는 구조다.[Hardware] └── Hypervisor ├── Guest OS (수 GB) → App A └── Guest OS (수 G..

Infra & Network 2026.04.23

[Redis HA | Part 1] Redis Master-Replica + Sentinel 구성

목차환경 준비Docker 네트워크 구성Redis Master-Replica 구성Redis Sentinel 구성Failover 실습장애 복구 확인전체 HA 흐름 요약1. 환경 준비환경 확인docker --versiondocker compose versiondocker info | grep -E "Memory|CPUs"2. Docker 네트워크 구성커스텀 네트워크 생성docker network create redis-cluster-net네트워크 확인docker network lsdocker network inspect redis-cluster-net핵심 개념같은 네트워크 안의 컨테이너끼리는 컨테이너 이름으로 DNS 통신 가능AWS VPC 안의 EC2 인스턴스끼리 통신하는 원리와 동일외부(Mac)에서 컨테이너..

Infra & Network 2026.04.22

git 실무 활용 명령어 모음

인증(Mac 기준) brew install gh → gh auth login새 레포git init → git add . → git commit → gh repo create일상 관리git add . → git commit -m "..." → git push브랜치git checkout -b 브랜치명 → 작업 → git push origin 브랜치명되돌리기git restore (변경 취소) / git revert (커밋 취소) 1. 초기 설정 → 프로젝트 → 레포지토리 생성# Git 전역 설정 (최초 1회)git config --global user.name "이름"git config --global user.email "이메일"# GitHub CLI 설치 및 인증brew install ghgh auth l..

Etc. 2026.04.21