
저번달에 api서버를 nestJS프레임워크로 개발해서 heroku로 배포를 했다. 당시에는 ec2에 대한 개념도 없었고, 인터넷강의에서 lightsail을 사용해서 배포하는데 나는 잘 안되고 해서 aws에 직접 배포하는 것은 포기하고 헤로쿠를 통해 배포를 했다. 아무래도 헤로쿠서버를 통하다 보니 속도가 느려서 불편하기도 했고 이번에 회사에 on-premise방식으로 sentry를 적용하면서 ec2를 다루는데 어느 정도 자신감이 생겨서 다시 한번 ec2에 직접 배포해보고자 한다. 개념은 ec2 인스턴스를 하나 빌려서 ssh로 접속한 뒤에 내 nestJS프로젝트 실행을 위해 자바스크립트 런타임인 node를 설치하고 git으로 내 프로젝트를 클론 받아서 실행시켜 주면 된다. 공부를 하면서 몇 개의 블로그를 봤..

사실 nodeJS 책을 봤는데 그 책에 크롤링 cheerio, nodemailer, exceljs, node-cron에 대해 잠깐 배울 수 있었다. 이것들을 배우고 나니 써먹고싶어서 친한 친구에게 뭐 좀 도와줄까? 하고 물어서..ㅋㅋ 증권업계에 종사하는 친구를 위해 아침 7시에 각종 지수를 모아서 엑셀로 만들어 메일로 보내주는 nodejs 코드를 작성했다. cron.schedule( '0 7 * * *', async () => { const indexes = await getIndex(); const excelFile = await genExcel(indexes); sendMail(excelFile); }, { scheduled: true, timezone: 'Asia/Seoul', } ); 매일 아침 ..

쿼리스트링 받아서 페이지네이션 처리하기 export class Page { pageSize: number; totalCount: number; totalPage: number; items: T[]; constructor(totalCount: number, pageSize: number, items: T[]) { this.pageSize = pageSize; this.totalCount = totalCount; this.totalPage = Math.ceil(totalCount / pageSize); this.items = items; } } 유저에게 res로 보낼 Page 클래스 db는 mongoDB, mongoose사용함. .count() 로 전체 개수 가져옴 프런트에서 처리하겠지만, 존재하는 페이지 ..

nest 기초강의에서 이미지를 s3버킷에 업로드하고 그 결과를 리턴 받는 함수를 만들었다. awsService의 uploadFileToS3 메소드를 실행시키고 폴더명과 해당 파일객체를 보낸다. 그럼 s3에 putObject 메소드를 실행해서 해당 파일객체를 저장하고 필요한 정보가 있는 객체를 리턴해준다. 기초 강의에서는 이미지를 1장만 업로드했기 때문에 async await을 사용해서 해당 메서드만 비동기처리를 해주면 된다. 이 함수를 그대로 쓰면 되는데, 우리 서비스는 한번에 최대 5장의 이미지까지 받을 예정이다. files 객체를 프론트엔드로부터 전달받아서 콘솔에 찍어보면 이렇게 배열에 file객체가 총5개 들어가 있다. files배열에 map메서드를 사용해서 전부 하나씩 순회하면서 uploadFil..

백엔드 첫 프로젝트 시작 프론트엔드에서 회원가입 데이터를 body로 받을 예정 nest를 사용할 때는 class-validator라는 라이브러리를 사용해서 아주 편하게 유효성 검사를 할 수 있다. 데이터를 받아올때 DTO(data transfer object)를 사용하면 dto선언한 파일 내부에서 깔끔하게 유효성 검사를 할 수 있다. req로 받는 데이터중에 nickname이 특수문자를 포함하지 않도록 유효성 검사가 필요. class-validator 깃헙과 스택오버플로우를 검색해서 Matches()를 활용한 특수문자 포함여부 유효성검사 코드를 작성.

nestJS 공식문서 request lifecycle. 미들웨어는 라우터 핸들러보다 먼저 호출되는 함수(미들웨어 말고도 몇 개 있지만..) Nest의 미들웨어는 express에서 설명하는 미들웨어와 동일하다. Nest 미들웨어는 클래스와 @Injectable데코레이터 를 사용해서 구현할 수 있다. 클래스는 NestMeddleware 인터페이스로 구현한다. 이 미들웨어를 사용하고자 하는 모듈에서 의존성주입을 한다. 하지만 @Module에는 미들웨어를 위한 자리가 따로 없다. 그래서 모듈클래스의 configure() 메서드를 사용해야 한다. 미들웨어를 포함하는 모듈은 NestModule 인터페이스를 구현해야한다. forRoutes() 내부에서 어떤 라우터로 이 미들웨어를 제한할 것인지, 어떤 RESTapi ..