banner image

전체 글 85

MQTT 프로토콜이란?

MQTT 프로토콜이란?MQTT(Message Queuing Telemetry Transport)는 경량 메시지 전송 프로토콜입니다. 주로 IoT 환경에서 데이터를 주고 받기 위해 사용하는 프로토콜입니다. 저전력, 제한적인 네트워크에서 효율적이기 때문입니다. 반대로 대용량 데이터 처리의 경우 비효율적일 수 있습니다. Publish/Subscribe 모델을 기반으로 하여 메시지 브로커가 publish와 subrscribe를 관리하는(메시지를 중개하는) 역할을 담당합니다. MQTT 특징경량 프로토콜MQTT는 헤더가 매우 작습니다. 따라서 대역폭이 제한된 네트워크에서도 원활히 작동할 수 있다는 장점이 있습니다.Pub/Sub 구조발행, 구독 모델을 사용합니다. 발행자가 특정 주제(topic)로 메시지를 발행하게 ..

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 3. MQTT

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 1. 개요[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 2. TCP[NestJS]내장된기능활용해마이크로서비스구현하기 - 3. MQTT[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 4. Kafka  Documentation | NestJS - A progressive Node.js frameworkNest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object O..

백엔드/NestJS 2024.11.04

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 2. TCP

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 1. 개요[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 2. TCP[NestJS]내장된기능활용해마이크로서비스구현하기 - 3. MQTT[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 4. Kafka  Documentation | NestJS - A progressive Node.js frameworkNest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object O..

백엔드/NestJS 2024.11.03

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 1. 개요

[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 1. 개요[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 2. TCP[NestJS]내장된기능활용해마이크로서비스구현하기 - 3. MQTT[NestJS]내장된 기능 활용해 마이크로서비스 구현하기 - 4. Kafka 저는 예전에 nest js를 이용한 MSA(마이크로서비스 아키텍처)를 구현하기 위해 nginx를 API Gateway처럼 사용하고, nginx에 들어온 요청을 여러 nest js로 프록시했습니다. 이때 nest js로 이뤄진 마이크로 서비스 간 통신은 전혀 하지 않아서, 이에 대해 고민을 하지 못했습니다. 하지만 더 다양한 기능을 개발하려다 보니 이러한 마이크로 서비스 간 통신도 불가피한 상황이 생겼습니다. 이때 마이크로 서..

백엔드/NestJS 2024.11.02

[Redis] Master/Slave 구조와 사용 방법

Master/Slave 구조란?redis의 master/slave 구조는 쓰기와 읽기 역할을 나누기 위한 구조입니다. Master는 쓰기 작업을 처리하고, Slave는 읽기 작업을 처리합니다. master는 한 개만 운영되고 slave는 여러개 운영됩니다. 즉, redis의 master/slave 구조는 읽기 역할을 담당하는 slave를 여러 개 생성해 읽기 성능을 향상시키고자 하기 위한 구조인것이죠. 아래는 더 자세한 redis의 master/slave 구조에 대한 설명입니다. Master/Slave 구조 특징읽기 부하 분산여러 Slave 노드를 이용해서 읽기 작업을 분산하기때문에 성능이 향상됩니다.내결함성Master는 단 한 개만 존재하기 때문에 해당 Master가 다운되면 위험한 구조입니다. 그러..

캐싱 전략을 이용한 백엔드 성능 향상

백엔드에서 데이터를 조회할 때 성능 향상을 위해서는 캐싱 전략을 활용할 수 있습니다. 이때 어떤 방식들이 존재하고 각 방식을 구현하는 방식에 대해 알아보겠습니다. 1. 메모리 캐싱 (In-Memory Caching)디스크 I/O 부담을 줄이기 위한 방법입니다. 자주 사용하는 데이터는 디스크(일반 DB)에 저장하지 않고 메모리에 저장하겠다는 캐싱 전략입니다. 메모리 I/O가 디스크 I/O보다 훨씬 빠르므로 이런 전략이 생겼습니다. 보통 Redis나 Memcached와 같은 인메모리 데이터 저장소를 사용해서 메모리 캐싱을 구현합니다. 2. 쿼리 캐싱 (Query Caching)서버에서 실행되는 쿼리와 해당 쿼리가 실행되었을 때 반환되는 값을 쌍으로 메모리에 저장하는 방식입니다. 이 방법이 메모리 캐싱과 뭐가..

백엔드 2024.11.02

강제 종료해도 다시 실행되는 mysql 문제 해결하기(맥북)

저는 맥북을 이용한 개발 중입니다. 이때 mysql이 kill 명령어로 종료시켜도 다른 PID로 바로 재실행되는 현상을 겪었습니다. 저와 같은 분들을 위해 강제로 mysql 종료하는 방법을 공유하겠습니다. 에러 상황아래와 같이 분명 확인되는 mysql 프로세스의 13202 PID값을 이용해 강제종료(kill -9)했지만 다시 lsof 명령어로 프로세스를 확인한 결과 mysql 프로세스가 새롭게 시작된 모습을 확인할 수 있습니다.shin@shin-MacBook-Air LaunchDaemons % sudo lsof -i :3306COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEmysqld 13202 _mysql 21u IPv..

에러 2024.11.01

웹 캐시(HTTP 캐시, 브라우저 캐시)를 이용해 성능 개선하기

여러분은 '캐시'에 대해 정확히 이해하고 계시나요? 저는 개인적으로 캐시에 대해 대충 느낌만 이해하고 있고 정확히 어떻게 동작하는지에 대한 내용을 잘 모르고 있었습니다. 캐시는 대충 자주 사용되는 데이터를 미리 저장해 빠르게 응답하기 위한 것 아니야? 이 정도로만 이해하고 있었습니다. 하지만 캐시에는 종류도 많고 각 캐시마다 역할도 달랐습니다. 오늘은 그 중 웹 브라우저에서 사용되는 웹 캐시(혹은 HTTP 캐시, 브라우저 캐시라고도 부름)에 대해 알아보겠습니다. 간단한 API 만들어 테스트하기저는 NestJS를 이용해 간단한 api를 만들고 이를 테스트해 보았습니다.먼저 localhost/test/1 요청을 처음으로 보냅니다.이후에 같은 url에 요청을 또 한 번 보냅니다.이때 이상하게 200 상태코드를..

REST API 정확하게 이해하고 개발하자

백엔드 개발은 굉장히 단순하게 표현하면 'REST API 만들기'라고 할 수 있습니다. 그리고 REST API를 단순하게 표현하면 '웹 상에서 클라이언트 요청에 응답하는 서버 기능'이라고 할 수 있죠.그럼 이때 요청에 대한 응답을 해주는 코드만 짜면 REST API를 만들었다고 할 수 있을까요? 오늘은 REST API에 대한 더 자세한 정보들을 통해 무엇이 REST API인지, REST API 종류와 그 특징들에 어떤 것들이 있는지 함께 알아보겠습니다. REST API(Representational State Transfer)란?참고 영상 : NAVER D2: 그런 REST API로 괜찮은가 ✅ REST API : 웹 상에서 HTTP 프로토콜을 통해 데이터를 주고받는 API로 REST 규칙을 따른다.위는..

NestJS vs Spring vs Django 무엇을 사용해야할까?

한국에서 가장 인기 있는 웹 프레임워크는 단연 자바를 이용한 Spring입니다. 저도 처음 개발을 배울 때는 Spring을 활용했었는데요. 확실히 Spring은 엔터프라이즈급 애플리케이션을 개발하기에 굉장히 좋고 관련 레퍼런스 자료도 많기 때문에 추천될 만한 프레임워크라고 생각합니다. 하지만 저는 Spring을 활용할 때는 항상 세팅 시간이나 개발 과정이 너무 오래 걸려 불편함을 느꼈습니다. 일례로 Spring에서는 의존성 주입을 위해 직접 pom.xml 혹은 build.gradle을 수정해야 하지만, 파이썬 Django나  자바스크립트(타입스크립트) NestJS는 pip 혹은 npm을 이용해 간단하게 의존성을 관리할 수 있었습니다. 또한 빌드 시간이 꽤 길다는 것도 큰 단점이라고 생각합니다.이런 여러..

백엔드 2024.10.29