본문 바로가기

분류 전체보기

(180)
NestJS - 대충 서비스 만들어보기 (3) - Controller & Provider 이전 포스팅에서 nest-cli 를 이용해 리소르를 바로 생성하다보니, NestJS 의 구성중 핵심인 Module 중 Controller 에 대한 부분도 제대로 보지 않고 지나갔었네요. // ads.module.ts @Module({ controllers: [AdsController], providers: [AdsService], }) 작성했다고 하기도 뭐하지만 현재 ads.module.ts 파일의 내용은 위와 같을겁니다. 저기서 Controller 는 우리가 일반적으로 알고있는대로 들어오는 요청을 받고 처리된 결과를 응답으로 돌려주는 인터페이스 역할을 합니다. REST API 로 만들었었지만 이는 Microservice 로 생성했어도 크게 다르지 않구요. 보통..
NestJS - 대충 서비스 만들어보기 (2) 지난 포스팅에서 생성만 했던 nest-ad 프로젝트에서 이어서 가겠습니다. - 리소스 생성 NestJS 에선 cli 로 필요한 리소스를 쉽게 생성할 수 있습니다. 먼저 nest-cli 가 어떤 것들을 지원하는지 살펴보겠습니다. > nest --help 이전 포스팅에서 package.json 의 scripts 를 간략히 볼 때 나왔던 build, start 등의 커맨드도 보입니다. 프로젝트에서 필요한 리소스를 구성하는데 주로 사용할 커맨드는 아무래도 generate 입니다. alias 인 g 를 쓸 수도 있네요. 그 아래는 생성할 수 있는 컬렉션들을 보여주고 있습니다. 저는 간단한 광고 서비스 서버를 만들고 싶으니 Ads 라는 도메인에 대해 먼저 Controller 부터 생성해보고자 합니다. > nest..
NestJS - 대충 서비스 만들어보기 (1) - NestJS Nest is a framework for building efficient, scalable Node.JS server-side applications. NestJS 공식 페이지에 있는 첫 소개 문구입니다. NestJS is a framework 는 문구 그대로 우리가 짜는 코드는 이 프레임워크 안에서 사용되며 앱의 제어 흐름은 프레임워크가 쥐게 됩니다. NestJS 를 좀 더 자세히 봐야겠다는 생각이 근래 들어 좀 들게 되었는데요. 현재 팀에선 NestJS 도 사용하고 있긴하지만, 대체로 관리중인 대부분의 서버들이 Express 또는 Koa 로 구성되어있습니다. 예전엔 Express 나 Koa 를 사용함으로써 자유도 높은 개발 환경이 이것저것 해볼 수 있어서 좋다고 생각하긴했지만, 근..
ZeroMQ 의 다양한 패턴 이전 포스팅에서 ZeroMQ 을 간략히 보면서, 그 중에서도 pub/sub 패턴을 사용해 간단한 단방향 메시징에 대해 알아봤습니다. ZeroMQ 는 pub/sub 패턴 외에도 push/pull 과 request/reply 등 일반적인 메시징 패턴도 지원하는데 이번 포스팅에선 이 패턴들에 대해 살펴보고자 합니다. - PUSH/PULL 이 패턴은 파이프라인 패턴으로도 불리며, AMQP 포스팅에서 이미 적긴 했지만 환풍기 또는 경쟁 소비자 패턴과 유사합니다. 파이프라인 이라는 처리 형식은 Node.JS 개발자라면 더 익숙할 것 같습니다. 이름 그대로 PUSH 소켓은 메시지를 전송하기 위한 소켓이고, PULL 소켓은 수신용 소켓이며, PUSH 에서 PULL 방향으로 단방향 통신이 이루어집니다. 이는 reque..
Use AMQP (w/ RabbitMQ) 계속해서 메시징 관련해 이번 포스팅에선 AMQP 에 대해 좀 보려고 합니다. ZeroMQ 나 Redis 의 pub/sub 등의 메시징 시스템을 간단하게 사용하는 것으로도 충분히 그 장점을 느낄 수 있지만, 이러한 시스템들은 단순한만큼 신뢰성은 약간 떨어진다고 할 수 있습니다. 물론 그런 상황이니까 사용하는 것도 있지만요. 메시징 시스템에선 신뢰성을 설명할 때 QoS(Quality of Service) 의 레벨을 들곤 합니다. 그 레벨은 아래와 같습니다. QoS0 최대 한 번. 가장 간단하며 메시지가 지속되지도 않고 전달되는 것을 확인하지도 않습니다. 따라서 이 경우엔 메시지가 손실될 수 있습니다. QoS1 최소 한 번. 메시지가 적어도 한번은 수신되도록 보장합니다. 메시지를 받았을 경우 클라이언트는 무조..
Use ZeroMQ 이전 포스팅들에서 메시징에 대해 계속 적고 있다보니, ZeroMQ (ØMQ) 에 대해 짧게 어떤 물건인지 보려고 합니다. ZeroMQ 공식 문서에 적혀있는 내용을 그대로 가져와보자면, ZeroMQ 는 고성능의 비동기 메세징 라이브러리이고, 분산 어플리케이션 또는 동시성 어플리케이션에서 사용하는 것에 초점이 맞춰져있습니다. 메세지 큐를 제공하긴 하지만, 다른 메세지 지향 미들웨어와 달리 전용 메세지 브로커 없이 ZeroMQ 시스템을 사용할 수 있습니다. ZeroMQ 는 TCP, in-process, inter-process, multicast, WebSocket 등의 다양한 전송 방식을 통해 pub/sub, request/reply, client/server 등의 일반적인 메세징 패턴을 지원합니다. 프로..
Messaging System 이전 포스팅에서 MSA 를 얘기할 때 잠깐 적기도 했던 내용이지만 분산 어플리케이션을 구성하는데에 메세지를 사용해 시스템 전체에 데이터나 이벤트를 전파하는 것은 주요합니다. 경우에 따라 직접 구현하기도하고, 클라우트 서비스의 도움을 받기도 하고, 간단하게 redis 등을 사용하기도 합니다. 메세징 시스템을 구축할 때 고려할 부분은 아래와 같은 포인트가 있습니다. 통신의 방향 메세지 목적 및 타이밍 p2p 방식 또는 브로커를 통한 메세지 전달 - 통신의 방향 통신의 방향은 단방향과 양방향이 있고 쉬운건 단방향이겠지만 양방향이 훨씬 인기가 많고 많이 쓰이는 것 같습니다. 채팅 프로그램같은걸 구현할 때 많이 사용하는 WebSocket 이 단방향 통신의 예시로 볼 수 있습니다. 양방향 통신은 멀리갈 것도 없이..
MSA Node.JS 에서 중요한 패턴이라고 한다면 너무 많은 일을 하는 커다란 어플리케이션을 작성하지 말라는 것입니다. 사실 뭐 이건 이제 Node.JS 에만 국한된 이야기는 아닐거라고 생각하긴 합니다만.. 이전의 포스팅에서 사용했던 그림을 재탕했습니다. 대규모 어플리케이션을 작성하는 대신 위 그림에서 Y축인 서비스 및 기능으로 분해하여 별도의 작은 어플리케이션으로 나눠서 운영하는 것이 그 방식입니다. 모놀리틱 아키텍쳐에 정반대되는 개념이며, Micro Service Architecture(MSA) 패턴으로 볼 수 있습니다. 물론 무조건 모든 어플리케이션을 MSA 로 만드는 것은 그리 적절한 방법은 아닐 수 있습니다. MSA 설계시엔 우리가 소프트웨어 이론에서 늘상 얘기하는 높은 응집도, 낮은 결합도, 복잡성..