NestJS로 커머스 백엔드 API를 구현합니다.
회원가입, 상품 관리, 장바구니, 결제 등의 주요 API를 제공하여 쉽게 커머스 애플리케이션을 만들 수 있도록 합니다.
TypeORM이 적용된 코드는 refactor/typeorm 브랜치에서 확인할 수 있습니다!
분류 | 기술 스택 |
---|---|
Language | |
Backend | |
DB | |
Testing | |
DevOps | |
Documentation |
로컬에서 프로젝트를 실행하는 방법을 소개합니다.
TypeORM 코드의 경우 refactor/typeorm 리드미에서 별도로 확인 가능합니다!
$ git clone https://github.com/rimo030/nestjs-e-commerce-frame.git
$ cd nestjs-e-commerce-frame
$ npm install
.env.example
을 참고해 .env
파일을 작성합니다.
mysql 컨테이너를 생성합니다.
$ docker-compose up -d
컨테이너에 접속해 데이터베이스를 생성합니다.
$ docker exec -it CommerceDB bash
$ mysql -u 계정이름 -p 비밀번호
$ create database commerce;
$ npx prisma db push
$ npm run start
# dev
$ npm run start:dev
http://localhost:3000/api
이슈를 통해 여러 기술적인 내용을 논의하였습니다.
배운 내용은 잘 기억하고 나누기 위해 개인 블로그에 정리하고 있습니다!
Git 이용한 첫 프로젝트입니다. 기초적인 clone, pull, push부터 cherry-pick, rebase등 Git의 여러 기능을 학습했습니다.
프로젝트에 Git-commit-convention과 Git-flow를 적용하였습니다.
학습 기록
Node.js 개발 생태계에 대해 배웠습니다.
근간이 되는 자바스크립트를 더 잘 이해하고자 블로그에 관련 도서나 자료를 읽고 정리하고 있습니다.
학습 기록
- ✏️[JS] JavaScript와 Node.js
- ✏️[Node.js] npm과 package.json
- ✏️[JS] 함수형 프로그래밍 (FP : Functional Programming)
- ✏️[JS] 자바스크립트가 데이터를 할당하는 방법 (feat. 불변성, 가변성)
- ✏️[JS] 자바스크립트의 변수 복사 (feat. 얕은복사, 깊은복사)
- ✏️[JS] 프로토타입(Prototype) 이해하기
NestJS를 이용한 첫 프로젝트입니다. DI와 계층 간 역할 분리의 개념에 대해 배울 수 있었습니다.
학습 기록
- NestJS 구조정리
- ✏️[NestJS] Swagger 적용하기 (feat. API 문서화)
- ✏️[NestJS] Exception filters 추가하기 (feat.Custom Exception)
- ✏️[NestJS] Logging Interceptor 추가하기
타입스크립트를 심도 있게 공부하고자 노력합니다.
타입챌린지(rimo030/type-challenges)에 꾸준히 도전하여 100문제 이상 풀이했습니다.
관련 내용은 이슈와 블로그로 정리하고 있습니다!
학습 기록
- ✏️[TS] TypeScript 시작하기
- ✏️[TS] TypeScript의 기본 타입
- ✏️[TS] TypeScript의 타입 조작 (제너릭, 조건부타입, infer)
- ✏️[TS] 유틸리티(Utility) 타입
- ✏️[TS] 타입이 추론되는 String.prototype.split - 1
- ✏️[TS] 타입이 추론되는 String.prototype.split - 2
- ✏️[TS] DeepMerge 타입 구현해보기
- ✏️[TS] extends와 implements
- ✏️[TS] Greater Than 타입 구현해보기 - 1
- ✏️[TS] Greater Than 타입 구현해보기 - 2
트랜잭션, 인덱스 등 데이터베이스의 이론적인 내용을 공부했습니다.
- ✏️[DB] ORM(Object Relational Mapping)이란, 객체-관계 불일치
- ✏️[DB] 트랜잭션(Transaction)과 트랜잭션 격리 수준(Isolation Level)
- ✏️[DB] NoSQL과 레디스(Redis)
- ✏️[DB] SQL의 기본 문법
- ✏️[DB] 인덱스(Index)
- ✏️[DB] 정규형(Normal form)
- ✏️[DB] 락(Lock)과 트랜잭션
- ✏️[DB] MySQL의 락 (feat. Auto Increment Lock)
- ✏️[DB] 인덱스에서 B+Tree를 사용하는 이유
- ✏️[DB] MySQL에서 UUID PK를 사용할 때 고려해야 할 점
TDD의 개념을 배우고 프로젝트에 유닛테스트 및 e2e 테스트를 적용하였습니다.
좋은 테스트 코드가 무엇일지 고민하며 작성하고 있습니다.
학습 기록
NestJS의 주요 ORM인 TypeORM과 Prisma를 모두 사용해 보면서, 기술 스택의 다양성을 가지게 되었습니다.
학습 기록
- TypeORM의 Repository Pattern과 QueryBuilder Pattern #41
- Prisma (Migrate from TypeORM) #95
- Prisma Soft-delete Client-extensions #108