본문 바로가기

nodejs8

[Node.js] Nest.js 폴더 구조 설계하기 0. 개요 [ 기존의 구조 ] 보통 express에서는 컨트롤러, 서비스 별로 쭈욱 파일이 모여있다. 아래는 과거에 진행한 프로젝트 구조이다. 프로젝트를 진행하면서 mvp가 많아질수록 컨트롤러와 서비스는 많아졌고 점점 도메인 별로 코드를 찾기 어려워졌다. 이 구조는 서비스가 확장되면 도메인 별로 흩어져 있기 때문에 파일을 찾아서 개발하는 것이 힘들다. 그래서 좀 더 대규모 서비스의 폴더 구조는 어떻게 설계하는지 궁금해졌고, 이번에는 nest에서 최대한 DDD할 수 있는 폴더 구조를 알아보려 한다. ┣ 📂controllers ┃ ┣ 📜bookMarkController.ts ┃ ┣ 📜checklistController.ts ┃ ┣ 📜scheduleController.ts ┃ ┣ 📜subscribeContro.. 2022. 9. 25.
[AWS] Elastic Beanstalk(EB) 사용해서 웹 애플리케이션 배포하기 0. 개요 AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker를 사용하여 Apache, Nginx, Passenger, IIS와 같은 친숙한 서버에서 개발된 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스이다. 👍 이점 빠르고 간편한 시작 개발자 생산성 적절한 규모 유지 완벽한 리소스 제어 📌 AWS Elastic Beanstalk에서 웹 앱 배포 를 보고 배포해보자! 1. 웹 애플리케이션 구축 1) 배포할 앱 생성 간단하게 nest app을 생성했다. 2) 로컬에서 실행 작동 여부를 확인했다. 2. AWS Elastic Beanstalk ✔️Create Application Elastic Beansta.. 2022. 9. 22.
[#1] TypeScript + Express에서 Sequelize 시작하기 0. 개요 시퀄라이즈는 node.js ORM이다. Postgres, MySQL, MariaDB, SQLite, Microsoft SQL Server를 지원한다. 3차 웹 프로젝트에서 MySQL DB를 사용하기 위해서 Sequelize를 사용해보자! 1. 설치 yarn add sequelize sequelize-cli mysql2 sequelize: RDB와 매핑되도록 해주는 ORM 패키지 sequelize-cli: commandline for sequelize mysql2 : mysql과 연결을 위해 필요한 패키지 2. 초기 설정 ✔️ sequelize init sequelize 명령어 확인 -h 옵션으로 명령어를 확인할 수 있다. npx sequelize -h 아래 명령어를 입력하면 초기 폴더 구조가 .. 2022. 6. 14.
hard delete(물리삭제)와 soft delete(논리삭제), sequelize에서 구현 1. hard delete (물리삭제) : 직접 데이터를 삭제하는 방법이다. 삭제한 데이터가 추후에 조회할 필요가 없을 때 사용하는 방식이다. 2. soft delete (논리삭제) : 데이터를 삭제하지 않고 삭제 여부를 확인하는 칼럼에 값을 넣는 방식이다. 현업에서는 user 데이터는 soft delete를 한다고 한다. 👩‍💻 sequelize에서 구현 이제 sequelize에서 User 테이블에 soft delete, hard delete 하는 방법을 알아보자. 👉 공식 문서 1) Paranoid 옵션 sequelize는 모델을 정의할 때 deletedAt이라는 칼럼을 추가하는 옵션을 제공한다. paranoid: true 로 하면 자동으로 deletedAt 칼럼이 생긴다. 나는 칼럼명을 스네이크 표.. 2022. 6. 13.
TypeScript + Node.js + Express 에서 프로젝트 시작하기 0. 프로젝트 폴더 생성 나의 프로젝트 폴더 구조는 다음과 같다. 1. 패키치 설치 나는 package manager로 yarn을 사용했다. 내 프로젝트 폴더 구조 기준으로 back 폴더에서 다음 명령어를 실행했다. 1) yarn 초기화 $ yarn init 2) 필요한 패키치 설치 typescript 전역으로 설치 yarn add typescript -g $ yarn add ts-node nodemon typescript @types/express @types/node nodemon --dev $ yarn add express typescript는 node에서 바로 실행되지 않기 때문에 tsc를 사용해서 javascript로 변환한 다음 실행된다. 프로덕션 환경에 올리기 위해서는 모든 파일.. 2022. 6. 6.
Swagger를 활용한 API 명세와 개발 협업 2탄 0. 개요 💡 swagger를 명세하는 방법은 다양하다. 모듈을 설치해서 각각의 router 파일 상단에 직접 명세 yaml 파일이나 json 파일 하나에 모든 API 명세를 하는 방법 [ 이전 프로젝트에서 2번 방식을 선택한 이유 ] 개인적으로 라우터가 지저분해지는 것을 정말 싫어한다. 1번 방식은 코드가 복잡해지고 명세와 router 코드가 함께 있어 코드 가독성이 떨어졌다. 그래서 지난 프로젝트에서는 하나의 파일에 모든 API를 설계하는 방식으로 협업을 했다. [ 아놔.. 어디 괄호가 잘못된거야? ] 일단 yaml 파일, json 파일 두가지 모두 들여쓰기 또는 괄호가 중요하다. 그런데 점점 API가 많아질수록 괄호나 들여쓰기 실수가 발생했을 때 오류를 찾는 과정이 정말 피곤했다.. (정말정말) 🤣.. 2022. 6. 4.
[Node.js] mongoose에서 새로운 필드 추가하기 01. 개요 DB 구축을 완료한 후 스키마에 새로운 필드가 추가되는 경우가 있다. 우리 서비스에서는 좋아요 수를 스키마에 추가하게 되었고 default 값으로 0이 들어가 있길 바랐다. 기존 데이터에 추가해 새로운 데이터와 동기화하기 위해서 다음과 같은 방법을 사용했다. 02. updateMany static update = async () => { const findCocktail = await Cocktail.updateMany({}, { $set: { likes: 0 } }); return findCocktail; }; updateMany를 활용하여 전체 도큐먼트에 값을 수정해보자! 👉 Mongoose 공식문서 1. 첫번 째 인자 조회 조건문이다. 나는 모든 도큐먼트를 조회할 예정임으로 {} 비우뒀.. 2022. 5. 1.
[Node.js] Validation 라이브러리, Joi로 단단한 코드짜기 01. 개요 1차 프로젝트에서는 request로 들어오는 데이터를 '@sindresorhus/is' 라이브러리를 사용해서 req.body가 비어있는지 여부만 확인했다. 하지만 좀 더 강하게 validation을 하려면 타입이 맞게 들어왔는지, 올바른 칼럼이 들어왔는지 등을 확인해야 한다. 그래서 이번엔 Joi를 사용해서 Validation 해보려 한다. ✔️ 1차 프로젝트 GitHub Repository 👉 @sindresorhus/is 문서 02. Joi 라이브러리 코드 구현 👉 Joi npm 문서 👉 Joi API 문서 외부에서 들어오는 입력을 항상 validation 하는 습관은 중요하다고 한다. Joi에 대한 자료가 많지 않아 문서를 참고해서 구현해보자. 현재 라우터, 서비스 로직, 디비, 미들웨.. 2022. 4. 28.
반응형