네이버 면접관이 사용하는 초저지연 및 메시징 분산 시스템 NATS
개발 · 프로그래밍 · 백엔드
Kafka 도입을
미루고 있다면
서비스가 커지면 REST 호출만으로는 한계가 옵니다. 그런데 메시징을 붙이려니 Kafka는 무겁고, 운영할 자신도 없습니다. NATS는 그 사이의 선택지입니다. 가볍게 시작해서 영속성이 필요해지면 JetStream으로 넘어갑니다.
- Core부터 운영까지Pub/Sub · Queue Groups · JetStream
- 실습 중심Docker Compose로 띄우고 패턴마다 직접 돌립니다
- 현직 개발자 2인네이버 본사 10년차 · 판교 플랫폼 서버 개발
NATS는 메시지를 주고받는 분산 시스템용 통신 계층입니다. Core NATS는 마이크로초 단위를 노리는 가벼운 전달에, JetStream은 메시지를 남겨야 할 때 씁니다
이 강의가 출발하는 자리
둘 중 하나를 골라야 하는 게 아닙니다
Core NATS
남기지 않고 빠르게
받는 쪽이 없으면 메시지는 그냥 사라집니다. 대신 가볍고 빠릅니다.
두 모드
JetStream
남기고 다시 읽기
메시지를 저장해 두고 나중에 다시 소비합니다. Consumer Lag도 여기서 생깁니다.
이 강의는 둘을 나눠서 배웁니다. 섹션 2~3에서 Core NATS로 통신 패턴을 익히고, 섹션 4부터 JetStream으로 영속성과 운영을 다룹니다. 언제 어느 쪽을 쓸지 판단하는 게 목표입니다.
구조
가운데에 서버 하나가 놓입니다
보내는 쪽은 받는 쪽이 누구인지 모릅니다. Subject라는 주제 이름만 알고 던지면, 그 주제를 구독한 쪽이 받습니다. 서비스끼리 서로를 직접 알지 않아도 되는 이유입니다.
여기까지가 Core NATS입니다. 받는 쪽이 하나도 없으면 메시지는 그냥 사라집니다. 남겨야 할 때 서버에 JetStream을 켜고, 그때부터 저장·재소비·Consumer Lag 같은 이야기가 시작됩니다.
이 강의가 시작된 자리
실제로 오간 대화입니다
네이버 개발자가 팀에 새로 합류하면서 첫 주제로 꺼낸 것이 NATS였습니다.
네이버 개발자가 팀에 합류하면서 오간 이야기입니다.
무엇을 배우나
패턴을 익히고, 운영까지 갑니다
- Pub / Sub가장 기본이 되는 발행·구독 패턴
- Request / Reply메시징 위에서 요청과 응답을 주고받는 방법
- Queue Groups내부 동작을 보고 로드밸런싱까지 실습합니다
- Subject 라우팅주제 기반으로 메시지를 어디로 보낼지 정하는 정책
- JetStream Stream과 Consumer메시지를 남기고 소비 전략을 정합니다
- Consumer Lag와 DLQ밀리는 소비자를 어떻게 보고, 실패한 메시지를 어디로 보낼 것인가
- 고가용성과 클러스터링운영 시 주의사항과 Best Practice까지
- KV Bucket과 Object Storage메시징 외의 쓰임새도 함께
NATS는 메시징만 하는 물건이 아닙니다. 공식 문서가 스스로를 소개하는 표현대로, 하나의 바이너리 안에 다음이 함께 들어 있습니다.
- Pub / Sub
- Streaming (JetStream)
- Key-Value Store
- Object Store
- Microservices
- Multi-cloud to Edge
이미 NATS를 띄워 뒀다면 설정값 공유나 파일 보관 때문에 저장소를 하나 더 붙이지 않아도 되는 경우가 있습니다. 섹션 6에서 KV Bucket과 Object Storage를 실습으로 다룹니다.
커리큘럼
무엇을 어떤 순서로 다루나
앞쪽이 Core NATS, 가운데가 JetStream, 마지막이 고급 주제와 다른 메시징 시스템과의 비교입니다.
01
강의 소개
- 강의 소개
- 이론 요약본
- Source Code
- NATS 공식 Document
02
메시징 처리 초고성능 NATS를 배워야 하는 이유 및 소개
- NATS 소개와 역사 그리고 Architecture
- Core NATS vs JetStream
- NATS 적용 최적화 Use Case
- Overall Architecture & Communication
03
NATS의 Application Level에서의 활용법
- Docker Compose 환경 구성
- [실습] Pub & Sub 패턴
- [실습] Request & Reply 패턴
- Queue Groups 내부 동작
- [실습] Queue Groups 로드밸런싱
- [실습] Subject 기반 메시지 라우팅 정책
04
NATS의 데이터 영속성을 위한 JetStream
- [실습] JetStream 기본 개념 및 Stream 생성
- [실습] JetStream Consumer 및 메시지 처리 전략
05
NATS의 JetStream 실전 활용법
- [실습] JetStream의 Consumer Lag 관리 및 모니터링
- [실습] JetStream의 Dead Letter Queue 처리 전략
- [실습] JetStream을 활용한 실무형 이벤트 처리 파이프라인
- [실습] JetStream의 고가용성 및 클러스터링 구성
- JetStream 운영 시 주의사항 및 Best Practice
06
NATS의 고급 주제 — Object Storage · KV Bucket 및 MSQ 비교
- NATS Key-Value Bucket 소개 및 활용
- [실습] NATS Object Storage를 활용한 파일 관리
- NATS vs Kafka vs RabbitMQ 메시징 플랫폼 비교
- NATS 도입 시 고려사항 및 마이그레이션 전략
- 강의 마무리 및 커뮤니티 안내
이런 분께
이 강의는 누구를 위한 강의인가요
- REST 통신과 CRUD 구조만으로 확장에 한계를 느끼는 백엔드 개발자
- Kafka 도입을 미루고 있는 개발자
- 이벤트 기반 아키텍처의 시작점을 모르는 취준생
- Consumer Lag 문제를 못 풀고 있는 실무 개발자
- 초저지연 실시간 통신 설계 경험이 부족한 개발자
지금 시장
AI가 개발자를 대체한다는 이야기
신입 채용은 줄고, 기업은 검증된 사람만 뽑으려 합니다. 최근 몇 달 사이 나온 기사들입니다.
- 사상 최대 실적을 낸 크래프톤이 인력 감원에 나섰습니다. 'AI 퍼스트' 기업으로 전환하겠다는 이유였습니다.
- SW 전문기업들이 신입 개발자 채용을 중단하고 있습니다. 초급 개발자 채용이 77% 급감할 것이라는 전망도 나왔습니다.
- 게임 디자이너의 53%가 "AI가 내 일을 대체할 것"이라고 답했습니다. 권고사직 사례도 보고됐습니다.
기업이 불안한 만큼, 뽑히는 쪽은 더 분명한 차이를 보여줘야 합니다. 공부는 결국 스스로 하는 것이지만, 무엇을 어떤 관점으로 보느냐에 따라 같은 시간을 쓰고도 설명할 수 있는 깊이가 달라집니다. 이 강의는 그 관점을 넘기려고 만들었습니다.
수강평
먼저 들은 분들의 이야기
인프런 수강평에서 그대로 옮겼습니다.
"실무에서 흔치 않게 NATS를 활용해 본 경험이 있어서 조금 더 알아보고자 수강했는데요, 개념 정리도 잘되어 있고 쉽게 설명해 주셔서 재밌게 실습했습니다. 실습은 JS로 진행하지만 저는 Kotlin, Spring Boot 환경에서 직접 세팅해 보면서 수강했는데 강의 개념과 문서를 보면서 하면 그렇게 어렵지 않은 것 같아요. 카프카에 비해서 굉장히 직관적이고 단순하달까."
감성코딩 · 73% 수강 후 작성
"진짜 이 NATS에 대해서 아무것도 몰라도 모든 것을 알려주는 강의라고 생각합니다. 설명도 너무 잘하시고 이 플랫폼이 왜 유용한지, 그리고 어떻게 사용해야 하는지 실력 좋은 개발자분이 옆에서 알려 주시는 것 같아요."
02년생 개발자 · 96% 수강 후 작성
강사
현직 개발자 둘이 함께 만들었습니다
네이버 본사 10년차 백엔드 개발자 Ande와, 판교 플랫폼 서버 개발자 Hong이 함께 만들었습니다.
Ande
네이버 본사에서 서버를 개발하는 10년차 백엔드 개발자입니다. 강의에서 다루는 구조와 판단 기준은 대부분 현장에서 실제로 겪으며 정리한 것들이에요. 질문은 편하게 남겨주세요.
"Kafka부터 꺼내 들 필요는 없습니다. 필요한 만큼만 무거워지면 됩니다."
現 네이버 서버(본사) 개발자 · 前 신세계 그룹 백엔드 개발자 · 前 헬스케어 스타트업 서버 개발자 · 컴퓨터공학 전공
Hong
판교에서 플랫폼 서버 개발을 담당하고 있습니다. 직접 공부한 방법과 실무에서 마주치는 문제·해결책을 나누려고 지식공유자 활동을 이어가고 있어요. 강의는 혼자가 아니라 현업의 여러 개발자와 함께 만듭니다.
"메시징을 붙이는 게 어려운 게 아니라, 언제 붙여야 하는지가 어렵습니다."
자주 묻는 질문
NATS 강의 자주 묻는 질문
Q.NATS는 Kafka와 무엇이 다른가요?
⌄
Q.메시징 시스템을 처음 써도 되나요?
⌄
Q.Core NATS와 JetStream 중 뭘 써야 하나요?
⌄
Q.Consumer Lag를 다루나요?
⌄
Q.실습 환경은 어떻게 구성하나요?
⌄
Q.메시징 말고 다른 쓰임새도 있나요?
⌄
함께 이야기 나눠요
개발자 오픈채팅 커뮤니티
혼자 막히면 오래 걸립니다. 강의를 듣다 걸리는 부분, 자기 서비스에 적용하면서 생기는 질문, 커리어와 현업 이야기까지 편하게 나누는 공간이 따로 있습니다.
무엇을 나누나요
실무에서 실제로 겪는 문제, 다른 분들이 어떤 구조를 골랐는지, 그리고 개발자 커리어에 대한 이야기를 나눕니다. 강의 관련 질문도 환영합니다.
"막히는 자리는 대체로 남들도 막힙니다. 먼저 지나간 사람에게 물어보는 게 제일 빠릅니다."