일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Generics
- MSA
- Certbot
- typescript
- Let's Encrypt
- 알고리즘
- stream
- node.js
- NPM
- ES6
- GIT
- https
- 파이썬
- Schema Registry
- html
- 비주얼 스튜디오 코드
- Express
- python
- 함수형프로그래밍
- V8
- vscode
- 자료구조
- MSK
- nestjs
- docker
- javascript
- nodeJS
- Functional Programming
- ChatGPT
- Linux
- Today
- Total
목록Backend (43)
JangBaGeum.gif

우리는 클러스터링 된 WebSocket 서버 환경에서 실시간 메시징 기능을 제공하고 있다. 클라이언트 수가 증가함에 따라 WebSocket 서버의 수평 확장이 자연스럽게 필요해졌고, 이에 따라 다음과 같은 메시지 라우팅 문제를 고민하게 되었다.예를 들어,사용자 A는 서버 1에 접속하고,사용자 B는 서버 3에 접속해 있다고 하자.이때 A가 B에게 메시지를 보내려면 B가 연결된 서버를 알아야 한다.즉, 클러스터 환경에서는 "어느 서버에 누구(userId)가 붙어 있는지"에 대한 라우팅 정보 관리가 핵심이다.이 문제를 해결하기 위한 대표적인 방법은 다음과 같다:Redis 등에 라우팅 테이블을 유지Gateway 서버에서 중앙 집중형 라우팅 처리Consistent Hashing 기반 라우팅우리는 가능한 한 모든 ..

Go 언어를 사용하지 않아도 goroutine이라는 단어는 한 번쯤 들어봤을 것 같다."가볍다", "수십만 개도 문제없다", "스레드보다 효율적이다" 같은 말이 항상 따라 나온다.그런데 실제로 goroutine이 어떻게 동작하길래 이련 평가를 받는가 라는 궁금증이 생겼다. 나는 Go 언어를 사용하는 개발자는 아니다. 하지만 주로 사용하지 않는 언어 혹은 기타 기술들의 동작 원리와 녹아있는 방법론, 사상을 공부하는 것은 늘 영갑을 주고 실제 개발을 할 때 적용할 수 있는지 고민하는데 정말 큰 도움을 준다. 특히 goroutine처럼 기존 병렬성 개념을 재해석한 구조를 깊이 들여다보면, 언어를 넘어서 시스템 설계나 성능 최적화에 대한 감각을 키우는 데에도 큰 도움이 될 것 같았다. 이번 글에서는 gorout..

담당하여 운영 중인 도메인 서비스에서 RabbitMQ로 이벤트 메시지를 발행하는 과정을 하드하게 운영하고 있다.주요 메시지는 주문/결제 등 고객 서비스에 직결되는 데이터였기 때문에, 단 한 건의 메시지도 누락되면 안 된다는 목표를 가질 수밖에 없었다.하지만 RabbitMQ는 메시지를 보장하는 여러 기법을 제공하고 있고, 이를 잘못 설계하거나 오용하면 "메시지를 보장하려다가 오히려 시스템이 느려지고 불안정해지는" 결과를 초래할 수도 있다.그래서 이번 과정에서 RabbitMQ의 메시지 발행자 입장에서 가능한 메시지 배달 보장 방식들을 전부 정리해 보고, 각 단계의 장단점과 성능 비용에 대한 감을 잡고 서비스에 맞는 골디락스 존을 찾고자 한다. # RabbitMQ 발행자 입장에서의 메시지 배달 보장 8단계메..

홈서버를 구축하면서 가장 고민이 많았던 부분 중 하나는 네트워크 구성이었다.현재 거주하고 있는 건물은 개별 공인 IP를 제공하지 않는 구조였기 때문에, 홈서버를 외부에 직접 노출시키는 것이 사실상 불가능했다. 따라서 외부에서 홈서버에 접근하려면 네트워크를 우회할 수 있는 방법이 필요했다.이 문제를 해결하기 위해 클라우드 컴퓨팅 서비스의 VM을 중간에 두고 네트워크 터널링을 구성했다. 홈서버와 클라우드 VM 사이에 WireGuard 기반의 VPN 터널을 구축한 뒤, 외부 요청은 VM이 받고 이를 홈서버로 전달하는 방식으로 설계했다.이 과정에서 중요한 역할을 한 것이 바로 iptables를 이용한 포트포워딩 규칙 설정 있다. 클라우드 VM에서 특정 포트로 들어오는 트래픽을 VPN을 통해 홈서버의 내부 IP로..

썸네일하고 본 글의 주제는 관련이 없습니다. '◡'✿ 나는 현업에 애플리케이션 구조를 설계할 때 가장 흔하면서 단순한 레이어드 아키텍처 Layerd Architecture를 많이 사용해 왔다.최근에 MSA Microservice Architecture를 공부하면서 접한 헥사고날 아키텍처 Hexagonal Architecture 패턴을 실무에 적용해 보면서 꽤나 긍정적인 경험을 했다. 이번 글에서는 헥사고날 아키텍처를 간단히 소개하면서 작고 소중한 내 작품에 실제로 적용하고 느낀 레이어드 아키텍처와의 차이점, 그리고 장점을 적어보려고 한다. 1. 헥사고날 아키텍처란 Hexagonal Architecture 헥사고날 아키텍처는 Alistair Cockburn(애자일 방법론을 제시한 인물 중 1인)이 제한한..

Node.js 환경에서 개발을 진행할 때, 비동기 작업을 동시에 진행하고 싶다면 먼저 떠올리는 것이 "Promise.all()" 일 것이다.Promise.all()은 Node.js 환경에서 다수의 비동기 작업을 병렬로 처리하고자 할 때 가장 자주 사용되는 도구 중 하나이다. 실제 서비스 코드에서도 외부 API 호출, 데이터베이스 조회, 파일 시스템 접근 등을 병렬로 처리하기 위해 Promise.all()이 널리 사용되니다. Promise에 대해서는 자세하게 다루지 않겠습니다. 하지만 아래와 같은 의문을 가져본 적 있을 것 같다. "Promise.all()" 이니까 비동기 작업이 진짜로 병렬로 실행되는 건가? Node.js 는 싱글 스레드로 동작을 하는데, 어떻게 "병렬"이 존재할까? 나도 Promise에..