본문 바로가기
반응형

전체 글171

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.
Valkey 란 무엇일까? valkey 는 redis 와 (거의) 같은거다!!무슨 말일까? Redis 가 라이센스 정책을 오픈 소스를 탈출? 하는것(https://redis.io/blog/redis-adopts-dual-source-available-licensing/)으로 결정 함에 따라 BSD 오픈소스 인 Valkey 에 관심이 쏠리는 것이다. Valkey은 Redis version 7.2.4을 folk 떠서 만든 것이고, redis 와 동일하게 in memory 저장소를 사용하며, caching, MQ, rua script, redis 가 지원하는 자료구조를 동일하게 지원한다. [공식 사이트]https://valkey.io/ ValkeyValkey is an open source (BSD) high-performance ke.. 2025. 3. 7.
(다음과정 미리보기) KRaft 를 이용한 Kafka 띄우기 2025. 3. 7.
KRaft 사용하여 Kafka 컨테이너 띄우기 1. KRaft 란?    : Kafka 의 기존 외부 의존성을 제거하고 Kafka 자체적으로 metadata 를 관리하기 위해 개발 됨     (기존에는 ZooKeeper 서버에 접속하여 관리하는 구조로써, ZooKeeper 를 대신하여 사용)  2. 왜 사용해야 할까?KRaft는 2021년 아파치 Kafka 2.8 버전과 같이 공개되었으며, Apache Kafka 3.7 버전이 Zookeeper 모드를 지원하는 마지막 버전이고, 이후 Kafka 4.0 버전의 경우는 KRaft 모드로만 사용 가능 3. 사용방법     : KRaft 모드를 사용하려면 주키퍼가 필요 없으며, 대신 Kafka의 자체 메타데이터 관리와 컨트롤러가 처리 4. Quorum     : 분산 시스템에서 결정을 내리거나 작업을 수행하.. 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.
Elastic Cloud version 정보 공개(최신) [요약]7.17.x 버전 사용중일 경우 올해 12월 전으로 version upgrade 필요8.16.x의 경우 3월 전, 8.17.x 의 경우 6월 전, 8.18.x 의 경우 9월 전, 8.19.x 의 경우 26년 12월 전 upgrade 필요 단, 8.x 에 대한 support 는 27년 6월 전까지 진행 (LTS 로 보여짐) [버전 변경 시 참고사항]The following will be the supported upgrade paths to 9.1:Versions prior to 7.17 → 7.17 → 8.19 → 9.17.17 → 8.19 → 9.18.x versions prior to 8.19 → 8.19 → 9.18.18 → 9.0 → 9.18.19 → 9.19.0 → 9.17.x or ea.. 2025. 2. 25.
카프카는 어떻게 빠른 속도를 보이는 것인가? ( Kafka Buffer Pool ) 카프카는 어떻게 빠른 속도를 보이는 것인가? 디스크 기반의 저장소를 사용하는 카프카는 메모리 기반의 저장소를 사용하는 레디스보다도 더 좋은 성능을 보인다.(memory 처리속도와 SSD 처리속도는 아래의 그림을 참고하면 된다.) 요약하면 "120 나노 세컨드"와 "50~150의 마이크로 세컨드"의 차이다. (어마어마한 차이인 것이다.) 그럼 카프카는 어떻게 memory 기반의 redis를 MQ로써 사용할 때 보다 더 빠른 성능을 보이는 것인가?그건 바로 저장소는 disk 기반으로 작동하지만, disk 에 저장하기전에 memory buffer pool에 batch 형식을 기반으로 동작한다는 것이다. Producer 에서 메시지 이벤트를 발생시켜, 카프카 브로커로 전달될 때 로직레벨에서 이를 바로 디스크.. 2025. 2. 21.
멱등성 이란 ? idempotent 멱등성이란 무엇인가?: 연산을 여러번 적용하더라도 결과는 달라지만 안된다! 이게 무슨 말인가?아래와 같은 상황이 있다고 가정해보자 1. 사용자의 클릭 따닥!(한번 클릭을 했음에도 불구하고 실수 또는 화면변화가 없어 확인차 한번더 클릭을 하는 경우)2. MQ 의 사용으로 crash(충동) 이 났을때 위의 두경우 백엔드 서비스 로직에서 한번만 실행되어야하는 로직이 2번 이상 요청이 되어질 수 있다.이때, 동일한 요청에 대해 처리 되었을 때 이를 중복으로 간주하고 "한번만 실행되도록 하는 것이 바로 멱등성"이란 것이다! 그럼 어떻게 적용을 할 것인가? Transaction Id 와 같은 값을 할당해서 이게 중복요청임을 알려야한다. 기존 로직에서 이미 동일한 Transaction Id 가 있을 경우, 로직을 타.. 2025. 2. 18.
(다음과정 미리보기) MSA 서비스 개발하기 - 마이크로 서비스 개발 2025. 2. 11.
(다음과정 미리보기) MSA 서비스 개발하기 (Application Gateway 개발) 2025. 2. 11.
(다음과정 미리보기) EDA 패턴 적용하기 2025. 2. 11.
Azure AKS 사용 시 비용 감축 방안 1 AKS 를 사용하다보면은 비용에 대해서 항상 고민이 아닐 수 없다.(항상 고민이다.) 사용량과 네트워킹 량이 늘어남에 따라 비용이 증가됨은 어쩔 수 없지만, 불필요한 비용이 발생하는 부분은 꼭 방지하고 싶다오늘은 그 방지하는 방법 중 하나를 다뤄보려고 한다. 오늘의 관점은 AKS 로그 부분이다.AKS 내에서 node 내부의 상태를 계속해서 모니터링을 하는데 이 주기가 기본 모드는 빈번하다 보니 조정이 필요하다(log data 를 실시간으로 수집할 필요는 없지않는가? 매 초마다 수집되는 영역을 5분, 10분으로만 조정해줘도 네트워크 트래픽이 획기적으로 단축되고 이게 곧 비용감소로 이어진다!)  방법은 다소 간단하다AKS 내부 접속 후 Monitoring 내 insight 로 들어가자거기서 Monitor s.. 2025. 2. 10.
개발 총괄이란 자리는? 커머스 서비스 개발에 합류한지도 대략 1년 반이 다되어 간다.그동안 다양한 분야에서 경험을 쌓았고(글로벌하게...), 국내 시장 한정, 커머스 서비스를 기획, 개발, 관리까지 총괄하는 임무를 수행중이다. 이전에는 일을 할 때에는1. 기술레벨 향상에  20%,2. 기능개발에 70%,3. 개발에 필요한 기획 부분에 대한 검토가 10% 의 비중으로 수행하였다면, 지금은 (데일리 업무 기준)1. 기술레벨향상에 5%,2. 개발자 채용 및 개발문화 효율성 향상에 5%, 3. 아키텍쳐와 인프라, 개발 등의 업무에 50%,4. 스프린트 로드맵 및 개발 범위 선정 등의 기획에 20%,5. 개발자 관리에 10%,6. 기타 회의에 필요한 모든 시간투여가 10% 정도로 업무의 범위가 매우 다양해졌고 개발에만 집중할 수 있는 .. 2025. 2. 9.
다시한번 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.
반응형