HashiCorp Consul 마스터 노트 시리즈 1편. 서비스 디스커버리·헬스 체크·KV·서비스 메시 4기능, 서버 모드 vs 클라이언트 모드 vs 개발 모드, Raft 합의 알고리즘과 쿼럼 계산, LAN/WAN Gossip 풀의 결정적 차이, 핵심 포트 7개까지 — Consul Associate 시험 Objective 1의 토대를 한 흐름으로.
이 글은 HashiCorp Consul 마스터 노트 시리즈의 첫 번째 편입니다. HashiCorp Certified Consul Associate는 57문항·60분의 자격증 시험이에요. 이 시리즈 7편은 시험의 9가지 Objective를 모두 다룹니다.
Consul은 마이크로서비스가 서로를 찾고·인증하고·암호화 통신하는 서비스 네트워킹 플랫폼이에요. Kubernetes·EC2·온프레미스 어디에서든 똑같이 동작해요. 1편의 목표 — 서버/클라이언트 모드·Raft·Gossip 세 단어를 손에 잡히게 만들기.
이 시리즈는 HashiCorp Consul 공식 문서, Consul Associate 시험 가이드, 여러 인프라 학습 자료를 참고해 한국어 학습 노트로 풀어쓴 자료입니다.
읽으면서 로컬에 consul agent -dev로 단일 노드를 띄워 보고 명령어를 직접 쳐 보면 본문이 머리에 훨씬 잘 박혀요. 30분이면 첫 서비스 등록·DNS 조회까지 끝낼 수 있습니다.
처음 Consul이 어렵게 느껴지는 이유
이유는 두 가지예요.
첫째, 에이전트·서버·클라이언트·노드 같은 단어가 한꺼번에 들어옵니다. Consul "에이전트"라는 한 바이너리가 두 모드(서버/클라이언트)로 돌고, "노드"는 그 에이전트가 도는 서버를 의미. 처음엔 어떤 게 어떤 건지 헷갈려요.
둘째, Raft와 Gossip 두 프로토콜이 동시에 등장합니다. 둘 다 분산 합의·전파에 쓰이는 도구지만 목적·참여자가 달라요.
해결법은 한 가지예요. 회사 비유로 잡으세요. 서버 = 본사 임원진 (Raft로 의사결정), 클라이언트 = 지점 직원 (Gossip으로 인사 정보 공유). 지점 직원은 자기 결재권 없고, 본사에 결정 위임. 이 비유 하나로 모드 차이가 정리됩니다.
Consul의 4가지 핵심 기능
| 기능 | 설명 |
|---|---|
| Service Discovery | 서비스 등록 → 다른 서비스가 이름으로 찾음 |
| Health Checking | 비정상 인스턴스 트래픽에서 자동 제외 |
| Key/Value Store | 동적 설정·기능 플래그·조율 데이터 |
| Service Mesh (Connect) | mTLS 기반 서비스 간 암호화·접근 제어 |
이 4가지가 시험 9 Objective의 토대예요.
에이전트 모드 3종
Consul 바이너리는 하나지만 3가지 모드로 실행돼요.
서버 모드 (Server)
server = true
- 역할: 클러스터의 두뇌. Raft 합의 참여, 모든 상태 저장
- 데이터: KV·서비스 카탈로그·ACL을 Raft 로그로 저장
- Gossip 참여: LAN(모든 DC 멤버) + WAN(서버 전용)
- 권장 수량: 3, 5, 7 노드 (홀수), 5가 실무 표준
- 주의: 9개 이상은 합의 성능 저하
클라이언트 모드 (Client)
server = false # 기본값
- 역할: 데이터 저장 X, 에이전트 역할만 — 서비스 등록·헬스 체크·DNS/API
- 무상태(Stateless): 서버에 위임
- Gossip: LAN만 참여
- 스케일: 수천 노드까지
- 배포 위치: 애플리케이션 도는 모든 노드에 설치
개발 모드 (Dev)
consul agent -dev
- 단일 노드 즉시 시작
- 디스크 저장 X, 메모리만
- Connect 자동 활성
- 프로덕션 절대 X — 재시작 시 데이터 손실
모드 비교
| 특성 | 서버 | 클라이언트 | 개발 |
|---|---|---|---|
| Raft 참여 | ◯ | X | ◯ (단독) |
| 데이터 저장 | ◯ | X | 메모리만 |
| LAN Gossip | ◯ | ◯ | ◯ |
| WAN Gossip | ◯ | X | X |
| Connect 기본 | X | X | ◯ |
| 프로덕션 | ◯ | ◯ | X |
여기서 정말 중요한 시험 함정 — 서버는 LAN+WAN 둘 다, 클라이언트는 LAN만. WAN Gossip은 서버 전용. 이 한 줄이 시험에 자주.
Raft 합의 알고리즘
분산 시스템에서 일관성 보장하는 합의 알고리즘. Consul 서버들이 Raft로 상태 동기화.
노드 역할
| 역할 | 설명 |
|---|---|
| Leader | 유일한 리더. 모든 쓰기 처리 + 팔로워에 복제 |
| Follower | 리더의 복제본. 읽기 처리 가능. 리더 장애 시 선거 참여 |
| Candidate | 리더 선거 중간 상태. 투표 요청 |
쿼럼 (Quorum) 계산
공식:
quorum = floor(N/2) + 1=(N+1)/2
쿼럼 = 클러스터가 결정 내리려면 필요한 최소 서버 수.
| 클러스터 N | 쿼럼 | 허용 장애 |
|---|---|---|
| 1 | 1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 2 |
| 6 | 4 | 2 |
| 7 | 4 | 3 |
여기서 정말 중요한 시험 함정 — 5노드가 실무 표준. 2개 장애 허용 + 합리적 크기. 짝수는 권장 X — 추가 장애 허용 없이 쿼럼만 높아짐.
스플릿 브레인 방지
쿼럼이 있어야 네트워크 파티션 시 두 파티션이 동시 리더 선출하는 스플릿 브레인 방지.
3 서버 클러스터: A, B, C
네트워크 분할: [A] | [B, C]
A 단독 → 쿼럼(2) 미달 → 리더 선출 X
B+C → 쿼럼 충족 → 새 리더 선출 → 정상 동작
Gossip 프로토콜 — Serf
HashiCorp의 Serf 라이브러리 기반. 전염병처럼 정보가 퍼져 Gossip이라 부름.
특징
- 목적: 멤버십 관리(가입/탈퇴/장애 감지), 이벤트 전파
- 분산화 + 결국 일관성 (Eventual Consistency)
- UDP 기반 (효율적)
두 가지 Gossip 풀
LAN Gossip (포트 8301)
대상: 단일 DC 모든 서버 + 클라이언트
목적:
- 노드 장애 감지
- 새 노드 발견
- 이벤트 전파
WAN Gossip (포트 8302)
대상: 여러 DC의 서버만 (클라이언트 X)
목적:
- 다중 DC 멤버십 공유
- 교차 DC 서비스 라우팅
여기서 정말 중요한 시험 함정 — WAN Gossip은 서버만 참여. 클라이언트는 LAN만.
Gossip vs Raft
| 특성 | Gossip (Serf) | Raft |
|---|---|---|
| 목적 | 멤버십·이벤트 전파 | 상태 데이터 합의 |
| 참여자 | 모든 에이전트 | 서버만 |
| 일관성 | 결국 일관성 | 강한 일관성 |
| 포트 | 8301·8302 | 8300 |
핵심 포트 7개 — 시험 단골
| 포트 | 프로토콜 | 용도 |
|---|---|---|
| 8500 | TCP | HTTP API / Web UI |
| 8501 | TCP | HTTPS API (TLS 활성 시) |
| 8301 | TCP/UDP | LAN Gossip (Serf) |
| 8302 | TCP/UDP | WAN Gossip (Serf) |
| 8300 | TCP | RPC (서버 간 통신) |
| 8600 | TCP/UDP | DNS 인터페이스 |
| 21000-21255 | TCP | Envoy 사이드카 프록시 |
여기서 시험 함정이 하나 있어요. 8301 vs 8302 vs 8300 헷갈리면 시험 즉답 어려움. 외워두기:
- 8300 = RPC (3 = Raft·서버 간)
- 8301 = LAN
- 8302 = WAN
- 8500 = HTTP (5 = 단순)
- 8600 = DNS (6 =
dig)
데이터센터 (Datacenter)
Consul의 논리적 운영 단위. 하나의 DC = 하나의 Consul 클러스터.
datacenter = "dc1"
여러 DC 운영 — Federation 으로 연결.
DC1 (서울) ←─ WAN Gossip ─→ DC2 (도쿄)
서버 3~7 서버만 서버 3~7
+ 클라이언트 + 클라이언트
WAN Gossip으로 서로 발견. 한 DC 안 클라이언트가 다른 DC 서비스 호출 가능.
핵심 명령어 (Cheat Sheet)
# 에이전트 시작
consul agent -config-file=/etc/consul/consul.hcl
consul agent -config-dir=/etc/consul.d
consul agent -dev # 개발 모드
# 클러스터 관리
consul members # 클러스터 멤버 목록
consul join <IP> # 다른 노드와 합류
consul leave # 클러스터에서 깔끔히 떠남
# 정보 조회
consul info # 에이전트 정보
consul operator raft list-peers # Raft 피어 상태
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 1편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- Consul 4기능 — Service Discovery / Health Check / KV / Service Mesh (Connect)
- 에이전트 모드 3종 — Server / Client / Dev
- 서버 = Raft 참여 + 데이터 저장 + LAN+WAN Gossip
- 클라이언트 = Stateless + LAN Gossip만
- Dev 모드 프로덕션 X — 메모리만, Connect 자동 활성
- 서버 권장 — 3, 5, 7 (홀수), 5가 표준
- 짝수 노드 X — 추가 장애 허용 없이 쿼럼만 높아짐
- 9개+ = 합의 성능 저하
- Raft = 강한 일관성, 서버만, 포트 8300
- 노드 역할 — Leader / Follower / Candidate
- 쿼럼 = (N+1)/2 = floor(N/2) + 1
- 5 서버 = 쿼럼 3, 2개 장애 허용
- 스플릿 브레인 방지 = 쿼럼 미달 파티션은 리더 선출 X
- Gossip (Serf) = 멤버십·이벤트, UDP, 결국 일관성
- LAN (8301) = 서버 + 클라이언트
- WAN (8302) = 서버만
- 핵심 포트 — 8500 HTTP / 8501 HTTPS / 8300 RPC / 8301 LAN / 8302 WAN / 8600 DNS / 21000-21255 Envoy
- Datacenter = 논리적 단위, Federation으로 연결
consul members/consul join/consul leave
시리즈 다른 편
같은 시리즈의 다른 글들도 같은 톤으로 묶어 정리되어 있어요. 1편 토대가 잡히면 2편 배포부터 본격 운영입니다.
- 1편 — Consul 입문 (현재 글)
- 2편 — 단일 데이터센터 배포
- 3편 — 서비스 등록 & Service Discovery
- 4편 — Key/Value 저장소
- 5편 — 백업 & 복구
- 6편 — Service Mesh (Connect)
- 7편 — 보안 운영 (TLS·ACL·Gossip)
공식 문서: Consul Documentation와 Consul Associate 시험 가이드에서 더 깊이.
다음 글(2편)에서는 단일 DC 배포 — 구성 파일·5 서버 부트스트랩·systemd 통합·UI 활성화까지 풀어 갑니다.