본문 바로가기

전체 글

(123)
카프카로 메시지 전송하기 - Nest.js와 python 카프카로 메시지 전송하기 - Nest.js와 python Nest.js에서 유튜브 링크를 python 코드로 작성된 서버에 전송하면 받아서 해당 영상 정보를 출력해주는 간단한 서비스를 구현해 보았다. 이전 글에서는 axios로 http 통신을 통해 정보를 주고 받는 코드를 구현해 보았다. (참조: https://issuebombom.tistory.com/117) 이번에는 주고 받는 것은 아니지만 카프카 메시지 브로커를 중간에 두고서 메시지를 전달하는 코드를 구현해 보았다. Kafka란 무엇인가? (간단하게) 어디에선가 받은 이벤트를 잘 보관하고 있다가 구독자에게 이벤트를 잘 전달해주는 이벤트 브로커를 말한다. 이벤트 브로커는 토픽이라는 일종의 파일시스템(fs)의 폴더와 같은 저장 공간을 가지고 그 안에 ..
백엔드 기술면접 회고 (2) Node.js 간단하게 파헤치기 Node.js의 구성요소와 구조 Node.js의 소스코드는 C++, 자바스크립트, 파이썬 등을 기반으로 구성요소가 구현되어 있다고 알려져 있으며 그 중 Node.js에서 중요한 구성요소인 V8과 libuv에 대해서 알아보자 V8 C++로 만든 자바스크립트 엔진을 말하며 즉 사용자가 작성한 코드를 실행하는 프로그램을 뜻한다. 이는 파서, 컴파일러, 인터프리터, 가비지컬렉터, 콜 스텍, 힙으로 구성되어 있으며, 인터프리터 역할을 하는 이그니션과 컴파일러 역할을 하는 터보팬을 함께 사용한다. 코드의 실행 순서는 아래와 같다. 작성한 자바스크립트 코드가 파서에 전달된다. 추상 구문 트리로 만든다. 이그니션에 전달되어 추상 구문 트리를 바이트코드로 만든다. 최적화가 필요한 부분은 이그니션이 터보팬으로 추상 구문 ..
백엔드 기술 면접 회고 (객체지향, 데이터베이스, 호이스팅과 스코프) 객체지향프로그래밍에 대한 질문 파이썬을 처음 공부하던 시절부터 지금까지 몇 차례 객체지향에 대해 정리된 글들을 읽어왔었지만 항상 구체적으로 어떻게 구현해야할까 생각하면 쉽게 감이 오지 않았다. 지금 생각해보면 Nest.js 프레임워크가 객체지향 프로그래밍을 따르는 것으로 보인다. 컨트롤러와 서비스 하나하나를 객체로 구분하고 의존성 주입, 상속 등의 개념이 객체지향과 연관되어 있으니 말이다. 이렇듯 완성된 거대한 구조를 지닌 객체지향 프로그래밍의 예시를 주로 접하다 보니 설계 관점에서 바라봤을 때 너무 큰 벽으로 느껴졌기에 그저 막막했던게 아닌가 생각한다. 객체지향이란? 객체 지향은 소프트웨어의 핵심을 기능이 아닌 객체로 삼으며 “누가 어떠한 일을 할 것인가?”에 초점을 둔다. 책임과 권한을 가진 객체들이..
http 프로토콜로 서버 간 통신하기 - Nest.js와 Flask Nest.js에서 파이썬 Flask 서버에 접근하기 해당 과정은 MSA 학습 과정에서 메시징, 큐 기반 통신을 구현하기 전, http 통신으로 서버간 소통한다면 어떻게 구현할 수 있을까를 알아보는 과정에서 구현한 결과이다. Python 서버와 Node.js 서버 간 통신하기 아래 과정을 간단하게 구현한다. pytube라는 파이썬 패키지를 사용하면 유튜브 링크 입력 시 해당 영상 정보를 받을 수 있다. 1번 기능을 하는 서버를 Flask로 구축하고, Nest.js 서버에서 Flask서버로 유튜브 링크를 보내면 관련 정보를 받도록 한다. 파이썬 pytube 서버 # app.py from flask import Flask, request from werkzeug.exceptions import BadReque..
Nestjs 기반 테스트코드 작성법 공부중 - 2일 차 회고 지난 시간 Nest.js 공식 문서를 참조하여 내가 만든 간단한 API를 기반으로 테스트 코드를 아래와 같이 무작정 작성했다. 아래 테스트코드에 담긴 의미는 "컨트롤러가 서비스에 잘 연결되어 있나?" 이다. 아래 코드는 현재 문제가 많은 상태이며 오늘 어떤 문제게 직면했고, 어떻게 수정했는지 살펴보고자 한다. import { Test, TestingModule } from '@nestjs/testing'; import { UserService } from './user.service'; import { User } from './user.entity'; import { UserController } from './user.controller'; describe('UserService', () => { l..
Nestjs 기반 테스트코드 작성법 공부중 - 1일 차 회고 Nestjs로 테스트코드를 작성하는 방법을 배워 둘 필요성을 느껴 공부를 시작했다. 가장 먼저 Nest 공식 문서를 참고했지만 솔직히 어떤 느낌으로 접근하는지 정도만 파악할 수 있었을 뿐 거~의 도움이 되지 않았다. 공식문서에서 아래 코드를 확인할 수 있다. import { Test } from '@nestjs/testing'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; describe('CatsController', () => { let catsController: CatsController; let catsService: CatsService; beforeEach(asy..
socket.io를 활용한 채팅 기능 구현에 대한 회고 이전 라이브 스트리밍 프로젝트에서 작성한 채팅 구현 코드를 회고하는 과정에서 문제점을 개선했습니다. 먼저 WebSocket과 Socket.io의 차이점에 대해서 다시 살펴보았습니다. WebSocket: 웹 표준 프로토콜로, RFC 6455에 정의되어 있습니다. 이는 웹 브라우저와 웹 서버 간의 표준화된 양방향 통신 프로토콜입니다. Socket.io: WebSocket을 기반으로 하지만, 실제로는 여러 프로토콜을 사용할 수 있습니다. 먼저 WebSocket을 시도하고, 그 후에 다른 전송 방법(예: 폴링)을 사용할 수 있습니다. 또한 이벤트 처리, 룸, 네임스페이스 등의 기능을 내장하고 있어 WebSocket 연결 이후 여러 부수적인 기능을 지원하는 편의성을 지니고 있습니다. 결론적으로, WebSocket..
마이크로 서비스에 대해 간략히 살펴보기 마이크로 서비스란? 클라우드 서비스의 발전으로 서버 인프라 구축에 드는 시간이 월등히 감소했고, 이에 맞춰 애플리케이션 개발과 운영도 적시에 진행되도록 하는 설계, 개발, 운영 기법이 요구되었다. 그 중 하나로 떠오른 기법이 바로 마이크로 서비스 기법이다. 이는 독립적으로 개발된 서비스(서비스 컴포넌트)를 여러 개 조합해서 하나의 애플리케이션으로 만드는 구조를 말한다. 이를 통해 소규모 서비스를 빠르게 런칭하고, 철회하는 것이 가능한 유연한 환경을 구성하여 빠른 시장 선점을 기대한다. 장점 작은 단위의 애플리케이션의 릴리즈, 변경이 가능 (기존 모놀리스는 작은 단위의 수정이 곧 애플리케이션 전체 수정을 의미한다.) 각 서비스의 규모, 요청의 정도에 따라 유연한 스케일 인/아웃이 가능하다. (가령 주문 조..