본문 바로가기
728x90

Node js36

[다음강의 미리보기] @testcontainers/redis @testcontainers/redis 를 이용한 redis test container 구성 https://testcontainers.com/modules/redis/?language=nodejs Testcontainers Redis ModuleStart testing with real dependencies using the Redis Module for Testcontainers fortestcontainers.com 통합테스트 작성 시, 분산락 등을 구현할 때 mock만을 참조하게 되면 제대로 된 테스트가 되지 않으며, redis 직접 참조 시 여러명이 동시에 테스트 코드를 돌리게 된다면, 결과에 영향을 미치게 된다.(실 환경도 마찮가지) 그렇게 때문에 테스트 컨테이너를 이용하여(테스트 시 컨테이너.. 2025. 4. 28.
[Back-end] Node js or NestJS 기반으로 사용중인 "국내" 회사 리스트 [회사 현황 - 계속 update 예정] 1. 리디https://ridibooks.com/webtoon/recommendation 2. 토스https://toss.im/ 3. 당근https://www.daangn.com/kr/ 4. 클라썸https://www.classum.com/ko/ 5. 설로인https://www.sirloin.co.kr/ 6. 뤼튼https://wrtn.ai/ 7. 모두싸인https://modusign.co.kr/ 8. 아임웹https://imweb.me/ 2025. 3. 28.
Node.js 란? 인프런 강의를 시작하면서, 보다 원론적인 것부터 설명이 필요하다는 것을 느꼈다.(이는 실무중심의 멘토링 서비스를 제공하는 "항해플러스"의 시스템과는 상이한 부분이다.) Node.js란? 결론부터 말하면나무위키나 공식사이트를 참고하면, Node.js 는 Javascript를 브라우저 밖에서도 실행하게 해주는 런타임환경이다?라고 표현되어 있지만, Electron Framework 등 특정상황을 제외 하면, Javascript 언어로 서버환경을 구성하게 해주는 환경이다.즉, Node.js 로 공식사이트와 같이 아래와 같은 코딩을 하게 되면 웹서버 역할로써 Node.js 가 되는 것이다.const { createServer } = require('node:http');const hostname = '127.0... 2025. 3. 23.
NestJS 강의를 듣기 희망하시는 분들은 아래 링크 확인해주세요 ! https://inf.run/gsdZZ 커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka) 강의 | 김빌 (Bill Kim) - 인프런김빌 (Bill Kim) | , 15년차 개발자가 알려주는NestJS 미드급 개발로 가는 길멘토링을 통해 많은 주니어 개발자를 만나보니, 기본적인 CRUD는 쉽게 만들지만, 동시성 제어와 Redis, Kafka를 활용한 부하 분www.inflearn.com NestJS 기반의 아키구성NestJS를 현업레벨에 맞도록 Prisma 세팅 및 개발Docker, Redis, Kafka 와 연계하여 개발목표 2025. 3. 20.
Typescript 성능개선 발표! (x 10) MS 사가 개발 관리 중인 Typescript 관련 하여 컴파일러와 Tool의 native 포팅을 통해 기존 성능에서 10배 이상 향상된 성능을 발표하였다!  자세한 내용은 하기 링크 참조! https://news.hada.io/topic?id=19695 10배 더 빠른 TypeScript | GeekNewsMicrosoft가 컴파일러와 도구의 네이티브 포팅을 통해 Typescript 성능 10배 향상 발표에디터 시작 시간 대폭 향상, 빌드 타임 10배 단축, 메모리 사용량을 대폭 줄임2025년 중반까지 tsc 미리 보기 버전news.hada.io 2025. 3. 13.
(다음과정 미리보기) KRaft 를 이용한 Kafka 띄우기 2025. 3. 7.
n 패키지로 node 버전 관리 시 경로 이슈 (installed, active) n 으로 전역 설치 후 node 버전을 관리하면서 사용중이다가 노드 버전을 변경해야할 일이 간헐 적으로 생긴다(최신 노드버전으로 프로젝트를 해야해서 노드 버전을 변경하는 경우도 있고 반대로 legacy 소스를 수정해야할 때도 과거 노드 버전으로 수정이 필요한 경우가 있다.) 이 경우 아래와 같이 n 을 전역으로 설치해서 사용하면되는데...npm install -g nsudo n lts 설치후 n 명령어를 입력한 뒤 엔터를 누르면 노드 버전이 바껴야 함에도 불구하고 변경되지 않는 경우가 있다.바로 설치된 node 위치와 active 된 node 위치가 다르기 때문에 링크를 변경해 줘야 한다.그럴 경우 아래와 같이 링크를 일치 시켜주는 명령어를 사용하면 된다! ln -sf installed_path acti.. 2025. 3. 1.
(다음과정 미리보기) MSA 서비스 개발하기 (Application Gateway 개발) 2025. 2. 11.
(다음과정 미리보기) EDA 패턴 적용하기 2025. 2. 11.
다시한번 Node 붐이 올 것인가? 노드 기반의 Nest.js 개발자라면 누구나 한 번쯤 고민해보고, 또 바라는 상황일 것이다.개인적인 견해를 말하자면, 나는 이렇게 생각한다. "가능성이 없진 않다!" 2020년부터 노드 네스트(Nest.js) 붐이 시작되었고, 이 붐은 대부분의 스타트업에서 일어난 현상이었다고 해도 과언이 아니다.당시 배경을 살펴보면, 코로나 지원금과 제로금리에 가까운 저금리 기조가 전 세계적으로 유지되었고, 시장에 돈이 풀린 상황에서 창업을 시작한 창업자들은 너나 할 것 없이 개발자 채용에 힘썼다.심지어 몇몇 기업에서는 신입 초봉이 6000만원, 6500만원에 달하는 파격적인 대우를 제시하기도 했다.비전공자 개발자들도 개발 세계로 뛰어들기 시작했고, 이러한 상황 속에서 상대적으로 개발자 채용이 어려운 스타트업들은 비교적.. 2025. 2. 5.
nest 에서 metrics data 수집하기 (서버 모니터링 용) 이를 위해 npm 부터 설치하자yarn add prom-client 아래와 같이 서비스 레이어 부터 작성해 준다.(prom-client 에서 얻은 정보를 컨트롤러로 공유하기 위한 목적이다.)import { Injectable } from '@nestjs/common';import * as promClient from 'prom-client';@Injectable()export class BaseService { private readonly collectDefaultMetrics: () => void; private readonly httpRequestsTotal: promClient.Counter; private readonly httpRequestDurationSeconds: promClient.. 2025. 2. 4.
nest 래디스 캐시 redis cache 적용하기 https://docs.nestjs.com/techniques/caching 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 Oriented Programming), FP (Functional Programming), and FRP (Functional Readocs.nestjs.comNest 공식사이트 참고하면 자세한 설명이 나와있다.. 2025. 2. 4.
(다음과정 미리보기) 리펙토링 (관심사 분리 및 보완 패턴 적용) 리펙토링 포인트! - 현재의 구조에선 Product 만 존재하는데 Product 정보를 바쳐주는 option table, detail table 등을 추가해서 리펙토링  - 주문 로직이 다소 복잡해 보여요. 가독성과 성능 기반으로 리펙토링  - redis 를 이용하여 cart db 를 분리했지만, 대부분의 비지니스 로직이 repository 에 머물러 있습니다.  이를 service 영역과 repository 를 분리필요 - Kafka 로 분리는 cart 내역 삭제는 분리했지만, cart 전체를 분리 - Kafka 기반에 트랜젝션이 실패했을때 보상트렌젝션 로직를 구성 2025. 2. 1.
Mac 에서 사용중인 port 확인 및 종료하기 Node 로 서버 여러개를 (f/e, b/e) 를 띄우다가 얘기치 않게 종료된 경우, 다시 서버를 실행하려고 하면 이미 해당 포트는 사용중이라는 오류를 접하게 된다. 그럴때 간단하게 점유중인 포트를 종료하는 명령어가 있다. 1. 우선 종료하고자 하는 port 에 누가 점유하고 있는지를 찾는다.(PID 정보추출목적)lsof -i :3000 예를 들면 결과가 이렇게 나왔을경우COMMAND     PID USER   FD   TYPE           DEVICE SIZE/OFF NODE NAMEcom.docke 31044  test  2. 점유 중인 process 종료하기kill -9 31044 를 입력하면 해당포트를 사용할 수 있다. 2025. 1. 31.
(다음과정 미리보기) Test Container 개발 with Prisma and Mysql 테스트 코드를 왜 작성해야하는가?: 앞써 리펙토링을 진행했을때 처럼, 회원수의 증가에 따라 이용량이 증가하게되고 기존의 서버에서 처리가 가능했던게 처리가 힘들어지게 됨에 따라 어쩔 수 없이 리펙토링을 해야하는 상황에서 새롭게 개발한 소스가 이전과 동일하게 작동되고 있는지를 검증해야한다. 2025. 1. 27.
(다음과정 미리보기) (번외) Nest js 기반 Test Container 구축하기 시스템이 확장됨에 따라, 테스트의 중요성은 강조된다.이미 개발한 내역이 많기 때문에, 현재 개발중인 내역으로 인해 전파 이슈가 발생하면 안되기 때문인데,그렇다고 내가 개발한 내용은 1주일 정도량인데, 현재까지 개발된 내용이 2년 치라면?2년+1주일 분량전체를 테스트 할 것인가? 여기서 시스템의 안정성을 높이고, 개발 테스트 소요시간을 단축할 수 있는 방안이 바로테스트 코드 이다.(단위테스트, 통합테스트, e2e 테스트 등) 다만, 여기서 테스트 수행 시 DB가 항상 접속이 되어있어야 할까?는 다소 의문스러운 영역이긴하다왜? 독립적인 구성에서의 테스트가 이루어 져야하기 때문이다.예를 들면, Kafka 를 도입해서 사용중인데, Kafka 가 항상 있어야만 테스트를 돌릴수 있는가?라는 상황이면, github .. 2025. 1. 27.
(다음과정 미리보기) Graphql 사용하기 1. Graphql 이란    : GraphQL은 API를 위한 "데이터 요청 언어"로, 클라이언트가 원하는 데이터를 효율적으로      서버에서 가져올 수 있도록 돕는 기술  2. Why Graphql?    : RestAPI와 비교시 여러가지 "장점"들이 있는데 아래와 같이 나열해보겠다.     - B/E server End point가 하나이다!      : rest 의 경우 /users(사용자목록), /orders(주문목록) 이나, Graphql 의 경우 /graphql 하나!)      - 필요한 Data 만 요청 가능      : orders(주문목록) 중 상품명, 가격, 옵션, 변경일자, 재고 수량 중에 상품명과 가격만 필요한 경우가 있다고 가정하자       rest의 경우 2개의 필드정보.. 2025. 1. 27.
9. Kafka 설명 & 연동 (한방에 해결하자) 1. Kafka 란?    : Apache 재단에 등록된 오픈소스로써, 분산형 스트리밍, 대규모 트래픽처리, 대용량 데이터 처리를 원활하게 처리하기 Message Queue (https://kafka.apache.org/) Apache KafkaApache Kafka: A Distributed Streaming Platform.kafka.apache.org  2. Kafka 구조 및 흐름     : kafka 의 구성은 main 의 역할인 kafka와 헬스체크 등 보조적인 역할인 zookeeper 가있다.     (최근에 zookeeper 의 의존성을 없애기 위해 kafka 단독으로 개발하여 나온 툴이 있는데,      zookeeper 대비 개선점은 확인되지 않는다.)      1) Kafka 기본구조.. 2025. 1. 27.
8. Redis 연동 (장바구니 리펙토링) 1. Redis 란?    : Key value 기반의 data 저장소(nosql) 이자, pub sub 이 지원 되는 Message Queue 2. 주요 특징     - Key, Value 구조에 TTL 세팅 가능     - 인메모리 기반 데이터저장소(속도가 빠름)     - String, Lists, Sets, Sorted Sets, Hashes 등의 다양한 자료 구조 지원 3. 속도비교       : 1ns(nano seconds) 는? 10의 -9승 = 0.000000001 초          (redis는 100ns!!)         1µs(microsecond) = 0.000001초.         RDB(Postgresql기준)는 1ms(millisecond) = 0.001 초 4. red.. 2025. 1. 27.
7. Docker (Nest js 로 개발한 서버를 docker로 띄워보자) 1. Docker 란?    : VM(Viture Machine)의 경량화 버전으로, 응용프로그램실행에 꼭 필요한 경량화된 OS 및 서버를 설치하여 컨테이너 기반으로       실행, 관리하는 오픈 소스(하나의 격리된 작은 PC 개념)    (추가설명 링크: https://www.ibm.com/kr-ko/topics/docker )  2. Docker 설치     1) 다운로드 : https://www.docker.com/ Docker: Accelerated Container Application DevelopmentDocker is a platform designed to help developers build, share, and run container applications. We handle t.. 2025. 1. 27.
6-2 비관적락을 이용한 동시성 제어(with Prisma) 1. 개발한 소스에 동시성 테스트 실시 1000명의 사용자가 10초 내 30개의 재고상품이 있는 상품을 구매할 수 있는 동시성(부하테스트)를 실행한 결과이다.서비스 로직을 보면,const result: boolean = await this.prisma.$transaction(async (tx) => {로 트랜젝션 단위를 보장하고 있는데, 이러한 구조로 인해 일부 동시성 이슈가 나타나지 않는것이다.좀더 자세히 설명하면?? 1) 트랜잭션 사용 : prisma.$transaction 내에서 여러 DB 작업을 묶어서 원자적으로 처리할 수 있는데, 트랜잭션이 끝날 때까지 중간에 다른 요청이 개입할 수 없다. 트랜잭션이 성공적으로 커밋되기 전에는 데이터 변경이 실제로 반영되지 않기 때문에, 두 사용자.. 2025. 1. 27.
6-1 서비스 로직 완성 주문하기 서비스 로직(장바구니 기반) 1) 장바구니 정보 조회 2) 장바구니에 담긴 상품 정보 조회(재고량, 가격, 판매유무 등) 3) 주문상세 정보 생성 4) 주문 정보 생성 5) 장바구니 정보 삭제 기타) 적절한 곳에서 validation 필요 2025. 1. 27.
PrismaClientInitializationError: Unable to require(`/app/node_modules/.prisma/client/libquery_engine-linux-musl.so.node`). 오류 해결방법 위와 같은 오류를 보았다면!https://hub.docker.com/layers/library/node/18-alpine3.20/images/sha256-7000d2e73f938c4f62fdda6d398d7dffd50e6c129409ae2b1a36ccebf9289ffe?context=repo https://hub.docker.com/layers/library/node/18-alpine3.20/images/sha256-7000d2e73f938c4f62fdda6d398d7dffd50e6c129409ae2b1a36ccebf9289ffe?context=repo hub.docker.com dockerfile 수정하면 된다!!node:18-alpine 부분을!! node 버전 20으로!!  [예시]FROM --pl.. 2024. 12. 15.
5-2. repository 완성 ( with Prisma ) 1. 개발해야할 repository 리스트!    1) 카트 추가하기    2) 카트 조회하기    3) 주문하기    4) 주문내역확인하기    5) 상품 조회하기    6) 상품 재고 차감하기 2. Prisma의 transaction    const result: boolean = await this.prisma.$transaction(async (tx) => { const products = await this.productRepository.getProductByIds(productIds, tx); await this.orderDetailRepository.createOrderDetail(detailWithOrderNo, tx) } async createOrderDetail(cre.. 2024. 12. 6.
5-1. prisma 기본 1. 왜 Prisma 인가? : https://www.prisma.io/docs/orm/more/comparisons/prisma-and-typeorm Prisma ORM vs TypeORM | Prisma DocumentationLearn how Prisma compares to TypeORM.www.prisma.io TypeORMPrisma종합기존의 ORM으로, 데이터베이스 테이블을 클래스 모델로 매핑최신화된 ORM으로, 기존 ORM에서 발생하는 문제(복잡한 모델 인스턴스, 비즈니스 로직과 저장 로직의 혼합, 타입 안정성 부족 등)를 해결객체관리entity 객체의 관리를 통해 DB 와 mappingPrisma 스키마로 데이터 모델 관리프로그램밍 측면객체 지향 프로그래밍(OOP) 기반더 간결하고.. 2024. 12. 6.
4. controller & service정리 1. 불필요한 Controller 및 Service 코드 제거    - Default로 생성된 불필요한 코드 제거  2. Controller 및 Service 에서 사용할 DTO 정의    - controller 의 DTO 와 service 의 DTO를 분리해보기!    - prisma의 entity를 DTO로 변환해서 return    3. 2번의 작업을 하는이유!    1) 책임의 분리         : Controller와 Service는 각기 다른 역할을 수행하는데, DTO를 분리하면 각 레이어가 서로의 책임을 명확히 할 수 있다.    2) 유연성 및 확장성         : Controller와 Service에서 DTO를 분리하면, 특정 레이어에 변경이 생겼을 때 다른 레이어에 영향을 미치지 .. 2024. 12. 6.
3. Nest 프로젝트 생성 및 예상 아키텍처 1. 설치     (1) 설치 명령어(기존에 설치하지 않은 경우에만)     (pnpm 을 권장드리나, yarn이나 npm 이 편할 경우 사용해도 됨) pnpm i -g @nestjs/cli     (강의 내용은  npm i -g @nestjs/cli@10.4.8 버전 기반)nest new commerce   nest 명령어를 사용하여, nest 프로젝트를 생성해보자    또는    git clone 으로 Nest 프로젝트 시작가능git clone https://github.com/nestjs/typescript-starter.git project(cd project)yarn install (pnpm 사용해도 됨)      (2) 빌드 명령어npm run build or yarn build or pnpm.. 2024. 12. 6.
2. 요구사항 분석 및 ERD 설계 요구사항 분석현업에서 개발을 진행할 때 요구사항 분석 과정 없이 바로 개발부터 진행하는 주니어 개발자들이 눈에 많이 보입니다. 개발 이후 막히거나, 기획쪽 수정될 내용을 뒤늦게 찾게되면, 기존 개발했던 로직들을 전반적으로 수정해야해서 개발 시간을 더 달라는 개발자들이 있습니다. 그럴때 저는 반대로 질문합니다.요구사항 분석 제대로 하셨나요?개발 전에 충분히 알 수 있었던 내용으로 보입니다만? 개발자 중 어떤 개발자는 질적으로도 속도로도 잘하는 개발자가 있는 방면, 어떤개발자는 코드 리뷰에도 수정될 부분이 많이 발생하고 개발시간도 느리게 개발하는 사람들이 있어요. 그런데 그 중 원인을 분석해보면, 요구사항분석을 개발전에 진행했냐? 안했냐로 구분되기도 합니다. 요구사항 분석 제대로 하기 : 무엇을 개발할 지를.. 2024. 12. 6.
1. Nest js 기본 (간략하게 집고 넘어가보자) Nest js 란?: 카밀 미슬리비에츠가 개발한 "node js 의 웹 프레임워크"로, WAS framework 인 Express 또는 Fasity 기반으로 OOP를 지향하며, 개발이 가능 하다.  Node js 란? (대부분 이미 알겠지만!): Javascript 의 런타임 환경으로 서버 사이드 개발을 지원 함  Node js 의 주요 특징은?  1) 비동기 단일 쓰레드(여러 I/O를 병렬적으로 처리가능, 고성능 서버 구축)  2) NPM(Node Package Manager) 를 이용하여 다양한 라이브러리를 쉽게 설치 및 사용 가능  3) 빠른 처리속도(가볍다, 필요한 것만 설치해서 사용가능)    4) 모듈화  5) 이벤트 기반   6) Javascript 기반  설치는? (version: LTS(.. 2024. 12. 5.
0. [과정을 들어가면서] 과정소개 0. 강의제작 배경 및 학습목표 - 국내에는 Nest강의가 Spring 에 비해 상대적으로 적음. - 많은 주니어 개발자들이 CRUD 등의 간단한 기능은 잘사용하는것으로 보이나, DB lock, redis, Kafka 와 연계하는 응용부분은 추가설명이 필요했음 - Nest 개발자 중에 TypeORM 기반이 아닌 실무에 적합한 Prisma 에 대한 이해도가 부족한 개발자들이 다수 보였음강의 이후 실무에 최대한 빠른 적응! or 레벨업! 1. Nest js 개발 관련 기본사항 1) Nest 장점 2) ERD 설계 3) 개발 architecture 4) OOP(Object-Oriented Programming) & FP(Functional Progra.. 2024. 12. 4.
728x90