본문 바로가기
728x90

분류 전체보기157

다시한번 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.
prometheus 사용하여 docker container 연결하기 prometheus.yml 파일을 특정 폴더내 아래와 같이 만들고[prometheus.yml]global: scrape_interval: 5sscrape_configs: - job_name: "nestjs-application" static_configs: - targets: ["localhost:3010"] 아래 명령어를 실행 해보자.docker run -d -p 9090:9090 \ -v /Users/유저명/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ --name=prometheus \ prom/prometheus  Docker dashboard 내 컨테이너가 실행되는 것을 확인할 수 있다. 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.
mysql docker 실행하기 FROM mysqlENV MYSQL_USER=adminENV MYSQL_PASSWORD=1234ENV MYSQL_ROOT_PASSWORD=1234ENV MYSQL_DATABASE=commerceCMD ["--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] 위의 dockerfile 을 직접 실행 or docker image 를 실행할때 위의 ENV 정보를 넣어주면 된다. 2025. 1. 29.
(다음과정 미리보기) 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.
RDBMS 에서의 비관적락 처리 과정 및 주의사항 멘토링을 진행하면서, 낙관적락 사용과 비관적락 사용에 대해 정확히 인지하지 못하는 주니어 개발자들이 많다는 것을 느꼈다.val Object = 오늘은 왜 충돌이 많이 발생하는 상황에서 비관적락이 낙관적락보다 더 처리속도가 빠른지를 포스팅 하려고 한다.  1. 비관적락에서의 대기시간    : 비관적 락(Pessimistic Lock)에서 최초 락을 획득하고 이후 트랜젝션이 락을 점유하려고 요청 시 이전 락이 해제될 때까지 다음 트랜잭션은 DB 레벨에서 대기하게 된다. 2. 비관적 락과 락 관리 순서    - 비관적 락은 주로 SELECT ... FOR UPDATE 같은 쿼리에서 사용되며, 해당 데이터에 대한 락을 DB 레벨에서 걸고 관리한다.    - 트랜잭션이 완료되어 커밋(commit) 또는 롤백(ro.. 2025. 1. 27.
항해플러스 ? 왜 항해플러스를 선택하는가? 구글링이나 네이버에서 개발자 스터디 or 개발자 성장 이란 검색을 많이 한 개발자의 경우 항해플러스를 직,간접적으로 접했을 것이다. 다양한 주제의 블로그와 과정내용을 직접 공개하는 블로그 글도 상당한데, 나는 여기서 배우는 관점과 채용관점 두부분을 나누어 포스팅 하려고 한다.  1. 배우는 관점    : 국내, 주니어 개발자만을 위한 교육 프로그램을 찾아보기 어렵다. 대부분의 교육 과정이 신입 개발자를 대상으로 기본적인 프로그래밍 언어나 도구 활용법에 집중되어 있기 때문! 하지만 항해플러스는 이러한 기존 프로그램과 차별화된 방식으로, 실무 중심의 프로젝트와 실제 문제 해결 과정을 통해 학습자가 바로 현업에 투입될 수 있는 역량을 키우도록 돕는다. 단순히 강의를 듣고 따라 하는 형태가 아니라, 팀 단위로 .. 2025. 1. 27.
구글 서치콘솔 리디렉션 오류 구글에 검색을 해도 나오지 않는 page 의 경우 구글 서치콘솔을 이용하여, 강제 색인을 요청할 수가 있다.(이때 색인을 여러번 요청해도 우선순위가 올라가는 것은 아니며, 크롤링 시 이슈가 없으면 등록된다.) 하지만, 아래와 같이 어떤한 이유에서 URL 이 Google에 등록되지 않는경우가 있다.대표적으로 접할 수 있는 원인이 "리디렉션 오류"이다.  그럼 이것이 왜 나타나는 것일까?사이트 내에 해당 사이트 url 을 등록할 경우 (다른 페이지로 이동 등) 대표적으로 발생할 수 있다.또는 구글봇이 접근 시 pc 버전으로 접속하였으나, 의도치 않게 모바일 버전으로 리디렉션 되는 경우도,색인되지 않는 이유에 해당한다. 만약 티스토리를 사용하는 경우라면, 아래와 같이 모바일웹 설정에서 티스토리 모바일 웹 자동.. 2025. 1. 17.
항해플러스 할인코드 항해플러스(항플) 백엔드 8기 곧 모집 항해플러스 신청 가이드현재 항해플러스 백엔드 7기, 프론트앤드 4기, AI 2기 학습이 어느덧 중반무렵에 이르렀습니다. 이제 곧 항해플러스 백엔드 8기 / 프론트엔드 5기 모집이 시작될 예정입니다.주니어 인데, "물경력"만 차는것 같고, 주변에 잘하는 시니어개발자가 없어, 답답함을 느끼고 있는 개발자들!신청하여, 미들급 개발자로 선장했으면 합니다.  "할인코드 공유" : HHPC0010  "수강료 결제"할 시 위의 코드 입력하면 할인받을 수 있습니다.(프론트, 백엔드, AI 모두 가능) 커리큘럼으로,TDD 부터 클릭아키텍처 서버 구축! (2주 동안)직접 서버개발(코틀린, 자바, TS 중 택1) (3주 동안)대용량 트래픽과 데이터 처리(4주동안)장애대응(1주동안) 2025. 1. 12.
mongodb 에서 data 한꺼번에 삭제하는 법 use dbname삭제할 data 가 들어있는 db 로 이동한다. db.order.deleteMany({div:’test’})'dbname' 이라는 db 에 order 라는 collection 이 있는데 이중 조건이 div = test 인것을 삭제하고 싶을 경우! 위에 처럼 하면 된다. (하나만 삭제할때에는 deleteOne!) 2025. 1. 8.
728x90