목록Backend (18)
민프
처음 상품을 등록하는데, 등록되기 전까지는 product_id가 없다면?옵션이나 재료 등 연관 데이터가 product_id를 기준으로 저장돼야 하는 구조라면, 이 문제를 어떻게 풀어야 할까? 1. 문제 상황 요즘 SaaS 플랫폼이나 커머스 어드민 시스템을 만들다 보면, 상품을 등록하는 과정에서 아래와 같은 화면 구조를 자주 만나게 된다.상품 기본 정보 입력 (이름, 가격, 카테고리 등)옵션 그룹 추가재료 등록이미지 업로드그런데 문제는 이거다옵션, 재료, 이미지 등은 product_id가 있어야 DB에 저장할 수 있다.하지만 상품 등록은 마지막에 한 번만 한다. 이게 무슨 말이냐면, 아직 상품을 등록하지 않았기 때문에 product_id가 없고, 그렇다고 옵션/재료를 임시로 메모리에만 들고 있을 수도 없다..
NestJS에서 스케줄링이 필요한 이유? 백엔드를 개발하다 보면 “주기적으로 실행되어야 하는 작업”이 필요할 때가 많습니다. 예를 들어매 5분마다 결제되지 않은 주문 자동 취소매일 새벽 3시에 통계 집계매주 월요일 오전 9시에 이메일 발송정기적으로 캐시 정리이런 스케줄 작업을 Node.js에서 처리하려면 일반적으로 cron, setInterval, node-cron, bull, Agenda.js 등을 사용해 직접 구현해야 했습니다. 하지만 NestJS는 이런 개발자들의 니즈를 해결하기 위해, @nestjs/schedule이라는 공식 모듈을 제공합니다.NestJS Schedule이란? NestJS Schedule은 NestJS 기반 프로젝트에서 간편하게 크론(Cron) 작업과 반복 작업을 처리할 수 있게 ..

1. 왜 override 파일이 필요한가?보통 운영 환경(production)과 개발 환경(development)은 설정이 다릅니다.구분개발(dev)운영(prod)로그console.log 출력파일 저장DBlocal MySQL클라우드 RDSNODE_ENVdevelopmentproduction리빌드자주거의 없음docker-compose.override.yml는 docker-compose.yml의 설정을 자동으로 덮어씌우기 위한 개발자 전용 확장 설정입니다. 2. 작동 방식// 이렇게 하셔도 되지만docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d// 기본적으로 docker-compose.override.yml만 사용중이시라면 아..

1. 왜 docker-compose가 필요한가?단일 컨테이너 (예: Node.js 앱만 실행)는 docker run으로 충분합니다.하지만 실무에서는 보통 이런 구조입니다[Node.js 백엔드] ↔ [MySQL DB] ↔ [Redis] ↔ [Nginx]각각 다른 설정, 네트워크, 환경변수를 다 개별로 설정하려면 복잡하겠죠?docker-compose는 이런 복잡한 환경을 한 YAML 파일로 정의해서 한 번에 띄우고 관리할 수 있도록 해줍니다. 2. docker-compose가 해결하는 것기능설명여러 컨테이너를 하나로 묶음예: backend, db, redis 를 하나의 services: 아래 정의네트워크 자동 설정같은 프로젝트 내부 컨테이너끼리는 컨테이너 이름으로 접근 가능환경 변수 관리.env 파일로 쉽게..
요즘 프로젝트를 진행하면서 한 가지 중요한 DB 설계 포인트를 마주했다. 바로 “결제(Payments)와 주문(Orders)의 관계를 어떻게 정의할 것인가?” 였다. 처음엔 단순했다. 결제는 주문을 하나 처리하면 되겠지 싶었다. 하지만, 실제 비즈니스 요구사항이 점점 늘어나면서 단일 필드로 연결하는 방식의 한계를 절실히 느꼈다. 그래서 도입하게 된 게 바로 중간 테이블(Bridge Table, Mapping Table) 이다. 오늘은 그 이유와 실전 적용 과정을 실제 테이블 설계 예시를 통해 소개한다. 문제 정의 - 하나의 결제에 여러 주문?예시payments (table)- payment_id (PK)- order_id (FK) payments 테이블에서 order_id를 외래키로 직접 참조하는 방..

이번 포스팅에서는 Nestjs에서 NCP - Simple & Easy Notification Service 을 이용해서 SMS을 보내보도록 하겠습니다. 사전 준비 목록NAVER CLOUD Plaform 계정 생성결제 수단 등록 (마이페이지 -> 결제관리 -> 결제수단 -> 결제 수단 등록)인증키 관리 메뉴로 이동 후 신규 API 인증키 생성 버튼을 눌러 키를 발급 받는다. 1. VPC - Simple & Easy Notification Service - 프로젝트 생성https://console.ncloud.com/sens/project 위 링크에 접근하여 프로젝트 생성을 눌러서 프로젝트 생성을 해줍니다.저는 SMS, Biz Message둘 다 사용할 예정이라서 둘 다 체크하고 만들겠습니다. 2. 발신번..
1. 에러 메세지ERROR [ExceptionsHandler] Error: secretOrPrivateKey must have a value 2. 문제 정의JWT 토큰을 서명(sign)하려고 할 때, 필요한 secretOrPrivateKey가 존재하지 않아서 발생하는 오류이다. 3. 원인 분석env 파일에 JWT_SECRET 값이 정상적으로 불러오지 않았거나,JwtModule.registerAsync(...)에서 secret 값을 설정하지 않았거나,설정했지만 해당 모듈에서 제대로 로딩되지 않아서 발생한 문제이다.결정적으로 사용하는 곳(auth)에서 JwtModule.registerAsync를 등록해줘야하는데 app.module.ts에다 설정을 해놓고 auth.module.ts에는 설정해주지 않아서 문제가..

이전 포스팅에서 [Nest.js] NestJS란? | Node.js와의 차이점 및 비교 | NestJS 설치 | EC2 메모리 스왑1. NestJS란 무엇일까?A progressive Node.js framework for building efficient, reliable and scalable server-side applications.효율적이고 신뢰할 수 있으며 확장 가능한 서버 측 애플리케이션을 구축하기 위한 진보적인 Nodeminf.tistory.comNestjs는 Express위에서 만들어졌고, 구조는 Angular와 매우 비슷한 의존성 주입 기반의 구조를 가지고 있다고 하였습니다. 구조에서 핵심 구성 요소인 Module, Controller, Service가 각각 무엇을 하는지, 어떻게 서..

1. NGINX란 무엇일까?NGINX (pronounced "engine x" or "en-jin-eks") is the world's most popular Web Server, high performance Load Balancer, Reverse Proxy, API Gateway and Content Cache.NGINX(발음: "엔진 x" 또는 "엔진엑스")는 세계에서 가장 인기 있는 웹 서버, 고성능 로드 밸런서, 리버스 프록시, API 게이트웨이 및 콘텐츠 캐시입니다.- nginx 깃허브nginx(엔진 엑스)는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 포함한다.Nginx는 요청에 응답하기 위해 비동기 이벤트 기반 구조를 가진다...

1. NestJS란 무엇일까?A progressive Node.js framework for building efficient, reliable and scalable server-side applications.효율적이고 신뢰할 수 있으며 확장 가능한 서버 측 애플리케이션을 구축하기 위한 진보적인 Node.js 프레임워크입니다.- NestJS 공식홈페이지NestJS는 효율적이고 확장 가능한 서버사이드 Node.js 프로그램을 구축하기 위한 플랫폼이다. 카밀 미슬리비에츠가 개발했다. Express.js 프레임워크를 기본으로 사용하며 Fasity와도 호환된다.자바스크립트를 사용하고 타입스크립트를 완벽하게 지원하며 (여전히 개발자가 순수 자바스크립트로 코딩할 수 있음) OOP(객체 지향 프로그래밍), FP(..