When designing and implementing web interfaces to ensure they are usable by everyone.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When designing loosely coupled systems that react to state changes asynchronously.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Tightly coupled systems break and scale poorly. Event-driven architectures decouple producers from consumers by using immutable, timestamped facts as the communication mechanism. This enables systems to evolve independently, scale horizontally, and handle distributed failures gracefully.
OrderPlaced, UserRegistered, PaymentProcessed)OrderPlaced not PlaceOrder)SendEmailEvent) rather than facts (UserCreated)❌ Anti-pattern (Commands as events, synchronous coupling, no idempotency):
// WRONG: Command not event
publishEvent('SendEmail', { userId, subject });
// WRONG: Synchronous dependency
async function handleOrderPlaced(event) {
const order = await orderService.fetch(event.orderId); // Blocks on external service
await emailService.send(order.email); // Fails if service is down
}
// WRONG: No idempotency tracking - processes duplicate
async function handleUserCreated(event) {
await database.createUser(event); // Processes same event twice = duplicate user
}
✅ Correct pattern (Events, async, idempotent):
// CORRECT: Past-tense event with minimal payload
publishEvent({
type: 'UserCreated',
id: uuid(),
timestamp: new Date(),
payload: {
userId: event.userId,
email: event.email
}
});
// CORRECT: Asynchronous, idempotent consumer
async function handleUserCreated(event) {
// 1. Track processed events (idempotency)
const alreadyProcessed = await cache.get(`processed:${event.id}`);
if (alreadyProcessed) return; // Skip duplicate
// 2. Process without waiting for external services
await emailQueue.enqueue({
email: event.payload.email,
template: 'welcome'
});
// 3. Mark as processed
await cache.set(`processed:${event.id}`, true, { ttl: 86400 });
}
// 4. Dead Letter Queue for failed events
async function handleFailedEvent(event, error) {
await dlq.store({
originalEvent: event,
error: error.message,
timestamp: new Date(),
retryCount: 0
});
}
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
When designing and implementing web interfaces to ensure they are usable by everyone.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When creating or extending an HTTP API for client consumption.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When improving read performance and reducing database load.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When configuring automated build, test, and deployment workflows for a repository.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When asynchronously reviewing peer code before merging into the main branch.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
When addressing slow application endpoints, high database CPU usage, or standardizing data access patterns.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.