NATS, the Ultra-Low Latency and Messaging Distributed System Used by Naver Interviewers
At some point in backend development, you start to have these concerns.
It's that moment when services expand and traffic increases, and you begin to feel the limitations of simple REST communication and CRUD structures. I experienced these same issues in the field and went through much trial and error balancing performance and structural complexity.
The solution I chose during that process was NATS. Its simple configuration based on a single binary, ultra-low latency performance in microseconds, and the fact that it provides essential features—from Pub/Sub to Queue Groups and JetStream—without being overkill made it a very practical choice for real-world service environments.
This course is not just a list of NATS features. Based on the problems I faced in practice, I explain through code and workflows why I chose NATS in certain situations and how I designed the architecture. This course is designed to help everyone—from those new to messaging systems to backend developers preparing for employment and senior developers considering better architectures—understand distributed systems and grow to the next level.
I took this course to learn more about NATS since I had a rare opportunity to use it in a real-world project. The concepts were well-organized and explained simply, making the hands-on practice very enjoyable.
Although the practice sessions use JS, I followed along by setting everything up myself in a Kotlin and Spring Boot environment. It wasn't too difficult to do by combining the course concepts with the official documentation (it feels very intuitive and simple compared to Kafka...).
This was very helpful!
5.0
Ande
92% enrolled
I'm developing at Naver, which created this course, and it's called Ande!!
NATS... It might be unfamiliar to you all, but it's truly an excellent platform with an incredibly useful structure.
I personally use it frequently and actively utilize it in production environments as well.
I've tried my best to share the parts I've experienced and know about, so I hope you enjoy it and please provide lots of feedback.
Have a great day!!
5.0
02년생 개발자
96% enrolled
I truly think this is a lecture that teaches you everything even if you know nothing about NATS. The explanations are excellent, and it feels like a skilled developer is right next to you explaining why this platform is useful and how to use it...
I really enjoyed this great lecture. Thank you.
What you will gain after the course
Ability to directly design and implement a NATS-based ultra-low latency messaging architecture
Design capability to select and apply Pub/Sub, Request-Reply, and Queue Groups according to the specific situation.
Experience in configuring a stable distributed messaging architecture considering consumer lag and bottlenecks
Implementing Message Persistence and Practical Event Processing Pipelines Using JetStream
Backend capabilities to explain and design event-driven distributed systems beyond simple CRUD.
Development · Programming · Backend
If you are postponing the introduction of Kafka
As a service grows, REST calls alone reach their limits. However, when trying to implement messaging, Kafka feels too heavy and daunting to operate. NATS is the alternative in between. You can start light and transition to JetStream when persistence becomes necessary.
Difficulty: Beginner
Docker Practice
Core NATS · JetStream
to operations
Unlimited Access Period
From Core to OperationsPub/Sub · Queue Groups · JetStream
Practice-orientedSet up with Docker Compose and run each pattern yourself
Two current developers10-year veteran at Naver HQ · Pangyo platform server development
NATS is a communication layer for distributed systems that send and receive messages. Core NATS is used for lightweight delivery aiming for microsecond-level latency, while JetStream is used when messages need to be persisted.
Where this course begins
It's not that you have to choose one of the two.
Core NATS
Fast without leaving a trace
If there is no receiver, the message simply disappears. Instead, it is lightweight and fast.
Same system Two modes
JetStream
Save and Re-read
Messages are stored and consumed again later. This is also where Consumer Lag occurs.
This course is divided into two parts. In Sections 2 and 3, you will learn communication patterns using Core NATS, and from Section 4 onwards, we will cover persistence and operations with JetStream. The goal is to be able to determine which one to use and when.
Structure
A server is placed in the middle.
The sender does not know who the receiver is. They simply send messages knowing only the subject name, and those who have subscribed to that subject receive them. This is why services do not need to know each other directly.
ProducerSends messages to a Subject. There is no need to know how many recipients there are
→
NATS Serverruns as a single binary. It only requires a single configuration file with no external dependencies
→
ConsumerThose who subscribe to the same subject will receive it. If there are multiple, they receive it divided into Queue Groups
This is the extent of Core NATS. If there are no receivers, the message simply disappears. When you need to persist messages, you enable JetStream on the server, and from that point, topics like storage, re-consumption, and Consumer Lag come into play.
Where this lecture all began
This is a conversation that actually took place.
When a Naver developer newly joined the team, the first topic they brought up was NATS.
This is a conversation that took place when a Naver developer joined the team.
NNaver DeveloperDoes anyone happen to know about NATS? I use it quite often, so I'm thinking of filming a video on that topic.
KKakao Developer (Interviewer)Oh, I've used that before. I believe you can get performance down to microseconds if you use it at the Core level.
NNaver DeveloperThat's right. But realistically, instead of using Core, it's often used in the JetStream form for HA. It's very useful for implementing and introducing simple message queues.
HHongI've only heard of NATS and haven't had the chance to use it yet, but if you guide me, I'll work hard to build it.
TToss DeveloperI've been busy lately... I want to build something new someday too, and I heard NATS is really good. Routing is also very dynamic and easy.
KKakao Interviewer (Developer)Naver developers are really good at development. I'm glad you've joined us like this.
What you will learn
Learn the patterns and go all the way to operation.
Pub / SubThe most fundamental publish-subscribe pattern
Request / ReplyHow to send and receive requests and responses over messaging
Queue Groups Examine the internal workings and practice load balancing.
Subject RoutingA policy that determines where to send messages based on topics
JetStream Stream and ConsumerRetain messages and define consumption strategies
Consumer Lag and DLQHow to monitor lagging consumers and where to send failed messages
High Availability and ClusteringFrom operational precautions to Best Practices
KV Bucket and Object StorageUses beyond messaging as well
NATS is not just for messaging. As the official documentation describes it, the following are included together within a single binary:
Pub / Sub
Streaming (JetStream)
Key-Value Store
Object Store
Microservices
Multi-cloud to Edge
If you have already deployed NATS, there are cases where you don't need to attach an additional storage for configuration sharing or file archiving. Section 6 covers KV Buckets and Object Storage through hands-on practice.
It doesn't end with just reading.
We will spin it up with Docker Compose and run each pattern ourselves.
The front part covers Core NATS, the middle covers JetStream, and the final part covers advanced topics and comparisons with other messaging systems.
01
Course Introduction
Course Introduction
Theory Summary
Source Code
NATS Official Document
02
Introduction and why you should learn NATS, the ultra-high-performance messaging system
NATS Introduction, History, and Architecture
Core NATS vs JetStream
NATS Implementation Optimization Use Cases
Overall Architecture & Communication
03
How to utilize NATS at the application level
Docker Compose environment configuration
[Practice] Pub & Sub Pattern
[Hands-on] Request & Reply Pattern
Internal workings of Queue Groups
[Hands-on] Queue Groups Load Balancing
[Practice] Subject-based message routing policy
04
JetStream for NATS Data Persistence
[Practice] JetStream Basic Concepts and Stream Creation
[Hands-on] JetStream Consumer and Message Processing Strategies
05
Practical Applications of NATS JetStream
[Hands-on] JetStream Consumer Lag Management and Monitoring
[Practice] JetStream Dead Letter Queue Handling Strategy
[Hands-on] Practical Event Processing Pipeline using JetStream
[Hands-on] JetStream High Availability and Clustering Configuration
Precautions and Best Practices for Operating JetStream
06
Advanced Topics in NATS — Object Storage · KV Bucket and Messaging Platform Comparison
Introduction and Utilization of NATS Key-Value Buckets
[Hands-on] File Management using NATS Object Storage
Messaging Platform Comparison: NATS vs Kafka vs RabbitMQ
Considerations and Migration Strategies for Adopting NATS
Course Wrap-up and Community Information
For people like this
Who is this course for?
Backend developers who feel the limits of scalability with only REST communication and CRUD structures
Developers who are putting off the introduction of Kafka
Job seekers who don't know where to start with event-driven architecture
Working developers who are unable to solve Consumer Lag issues
Developers who lack experience in designing ultra-low latency real-time communication systems
The current market
Stories about AI replacing developers
New recruitment is decreasing, and companies are trying to hire only those who are proven. These are articles that have come out in recent months.
Krafton, which achieved record-breaking performance, has begun downsizing its workforce. The reason cited was its transition into an 'AI-first' company.
SW specialist companies are stopping the recruitment of new developers. There are also projections that the hiring of entry-level developers will plummet by 77%.
53% of game designers answered, "AI will replace my job." Cases of recommended resignation have also been reported.
As much as companies are feeling uneasy, those being hired must demonstrate a clearer distinction. Ultimately, studying is something you do on your own, but depending on what you look at and from which perspective, the depth of what you can explain changes even when spending the same amount of time. I created this lecture to pass on that perspective.
Course Reviews
Stories from those who listened first
These were copied directly from the Inflearn course reviews.
"I took this course to learn more because I had some rare experience using NATS in practice. The concepts were well-organized and explained easily, so I had fun with the hands-on exercises. Although the exercises are conducted in JS, I followed along by setting it up myself in a Kotlin and Spring Boot environment, and it wasn't that difficult if you follow the course concepts and documentation. Compared to Kafka, it feels very intuitive and simple."
Gamsung Coding · Written after 73% completion
"I truly believe this is a lecture that teaches you everything, even if you know absolutely nothing about NATS. The explanations are excellent, and it feels like a highly skilled developer is right beside you, explaining why this platform is useful and how to use it."
Developer born in '02 · Written after 96% completion
Instructor
Created together by two current developers
It was co-created by Ande, a 10-year backend developer at NAVER headquarters, and Hong, a platform server developer in Pangyo.
NAVER · BACKEND ENGINEER · 10th Year
Ande
I am a 10-year backend developer building servers at NAVER headquarters. Most of the architectures and decision-making criteria covered in this course are things I've personally organized while experiencing them in the field. Please feel free to leave any questions.
"There is no need to pull out Kafka from the start. You only need to become as heavy as necessary."
Current NAVER Server (HQ) Developer · Former Shinsegae Group Backend Developer · Former Healthcare Startup Server Developer · Computer Science Major
Knowledge Sharer · Pangyo Platform Server Development
Hong
I am in charge of platform server development in Pangyo. I continue my activities as a knowledge sharer to share the methods I studied myself and the problems and solutions encountered in practice. The lectures are not created alone, but together with various developers currently working in the field.
"It's not that adding messaging is difficult; it's knowing when to add it that's difficult."
Platform Server DevelopmentEvent-Driven ArchitectureMultiple Backend Courses
Frequently Asked Questions
NATS Course Frequently Asked Questions
Q.How is NATS different from Kafka?
⌄
The biggest difference is weight. In Core mode, NATS focuses on delivering messages quickly without storing them, and you enable JetStream if persistence is needed. Kafka, on the other hand, is structured to log messages from the start. Section 6 compares it alongside Kafka and RabbitMQ, covering considerations for adoption and migration strategies.
Q.Can I use a messaging system even if it's my first time?
⌄
The difficulty level is set to introductory. We start with the background of NATS and its architecture in Section 2, and in Section 3, we practice the most basic patterns like Pub/Sub one by one in a Docker Compose environment.
Q.Should I use Core NATS or JetStream?
⌄
It depends on whether losing messages is acceptable. With Core NATS, messages disappear if there is no receiver. In exchange, it is lightweight and fast. If you need to persist messages and read them again later, you should use JetStream. This course covers both separately, and Section 2 first addresses the criteria for deciding between them.
Q.Do you cover Consumer Lag?
⌄
That is covered in the first lecture of Section 5. We cover Consumer Lag management and monitoring through hands-on practice, followed by Dead Letter Queue handling strategies. This is why "working developers who cannot solve Consumer Lag issues" are included in the recommended audience.
Q.How is the practice environment configured?
⌄
It is set up using Docker Compose. The first lecture of Section 3 covers the environment configuration, followed by hands-on exercises for each pattern.
Q.Are there other uses besides messaging?
⌄
Section 6 covers Key-Value Buckets and Object Storage. Since they can be used for sharing configuration values or handling files, if you already have NATS running, there are cases where you can resolve these needs without a separate storage system.
Kafka is not the only answer
A path that starts light and becomes as heavy as needed. We will cover everything from the Core to operations.
It takes a long time when you're stuck alone. There is a separate space where you can comfortably share everything from parts you get stuck on while taking the course, questions that arise while applying it to your own service, to stories about careers and the industry.
OPEN CHAT · Developer Community
What do we share?
We discuss real-world problems encountered in practice, the architectures others have chosen, and stories about developer careers. Questions related to the lectures are also welcome.
"The spots where you get stuck are usually where others get stuck too. Asking someone who has already passed through is the fastest way."
I started studying development after becoming interested in it while idling at home, and I am currently responsible for platform server development in Pangyo. I am continuing my activities as a knowledge sharer because I want to provide you with the methods I used to study, as well as the various problems and solutions you may encounter in practice.
These lectures are not created solely through my own knowledge. There are others who collaborate on every lecture.
It seems like this is the only course on Inflearn that covers the NATS platform. I know it's actually used a lot in game servers, and it was great to be able to learn the content so easily.
I really enjoyed the great content.
The content was intuitive and easy to follow, and I especially liked how you pointed out the differences from other MSQ services and when it's best to use it at the end.
I'm developing at Naver, which created this course, and it's called Ande!!
NATS... It might be unfamiliar to you all, but it's truly an excellent platform with an incredibly useful structure.
I personally use it frequently and actively utilize it in production environments as well.
I've tried my best to share the parts I've experienced and know about, so I hope you enjoy it and please provide lots of feedback.
Have a great day!!