일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- react
- MySQL
- nestjs
- Bull
- dfs
- Dinosaur
- OCR
- Python
- cookie
- TypeScript
- Express
- jest
- mongoose
- 게임
- 공룡게임
- GIT
- game
- 정렬
- flask
- 자료구조
- nodejs
- MongoDB
- Nest.js
- class
- JavaScript
- typeORM
- AWS
- Queue
- Sequelize
- Today
- Total
목록TIL (128)
포시코딩
개요 인터넷에 널린 S3 사용법에 대해 공부하다보면 IAM을 통해 사용자 등록하는 부분에서 아주 최근에 UI가 바뀌어 블로그 내용과 달라 진행하지 못한 사람이 있을 것이다. 그런 중생들을 구원하고자 이번 글을 작성하게 되었다. (나도 그중 하나였음) 방법 사용자 생성 1. IAM 진입 2. 사용자 탭 진입 3. 들어와서 오른쪽 위 사용자 추가 클릭 4. 아마 여기부터 다를건데 위 사진과 똑같이 진행하면 된다. 사용자 이름 작성 사용자 지정 암호 작성 체크 똑같이 해준 뒤 다음 클릭 5. 마찬가지 사진과 똑같이 하면 된다. 직접 정책 연결 선택 권한 정책에서 s3full 검색 후 나오는 AmazonS3FullAccess 정책 체크 후 다음 6. 블로그에선 아마 사용자 세부 설정이 다를텐데 그냥 사진과 같이..
개요 lodash를 사용하며 _.isEmpty() 를 쓸 때와 _.isNil() 을 쓸 때가 헷갈려 정리해보았다. https://lodash.com/docs/4.17.15 Lodash Documentation _(value) source Creates a lodash object which wraps value to enable implicit method chain sequences. Methods that operate on and return arrays, collections, and functions can be chained together. Methods that retrieve a single value or may return a primiti lodash.com 공식 홈페이지를 참고했음..
개요 Nest.js에서 TypeORM을 쓰며 pagination(페이지네이션)을 구현하게 되어 새로 알게된 부분을 정리해보았다. Basic Repository async findAllUsers({ id, page }: FindAllUserInput): Promise { // ...생략 const allUsers = await this.users.find({ where: { id }, take: 10, skip: (page - 1) * 10, }); // ...생략 } 기본 Repository를 쓸 경우에 find를 쓰면서 where 처럼 take, skip을 써서 pagination을 구현하는 경우이다. take: 한 번에 보여줄 개수 - mysql에서의 limit을 생각하면 된다. skip: 말 그대로..
개요 로그인한 유저의 정보를 받기 위한 테스트 중 그냥 Get 요청에 Request를 받게끔 하여 req.cookies로 accessToken, refreshToken을 받아야 하는 상황이 있었는데 아무런 cookie도 보내고 있지 않은 상황에서 accessToken과 refreshToken이 전달되고 있었다. 그것도 빈 값으로 일부러 값을 넣고 추가로 다른 cookie값도 넣어서 테스트 해봤더니 accessToken, refreshToken은 그대로 빈 문자열 값인데에 반해 test는 정상적으로 값을 전달받고 있었다. 그렇다면 어딘가에서 accessToken, refreshToken에 대해 값을 덮어씌워주고 있다는 소리인데 그 원인을 찾아봤다. 원인파악 알고보니 로그인 할 때 팀원이 코드에 임시로 re..
개요 이번 프로젝트에서는 GitHub organization에 프로젝트를 만들고 각자 fork한 다음 fork한 프로젝트에서 브랜치를 만들어 개발 후 브랜치를 본인 repo로 push -> organization의 원본 프로젝트(upstream)로 pr 이런 흐름으로 진행하기로 결정됐다. 이 과정에서 메모해놓으면 좋을 git 명령어들과 상황에 대해 정리해보고자 한다. 일단 GitHub상에서 직접 fork 해서 가져가는거랑 가져온 프로젝트를 git clone한 다음 브랜치 새로 만들어서 작업하는거 정돈 기본으로 알고 있다고 생각할거임. (모르면 바보) upstream 등록 내가 fork해온 repo를 내 컴퓨터에 clone 했다면 upstream에 새 반영사항이 있을 때 최신화를 시켜야 한다. 여기서 두가..
개요 FK 종속 관계를 부여해놓은 Meetup, Join 라는 이름의 두 entity가 있는데 Meetup(모임)을 만들 때 Join(참가)에 작성자 id를 같이 넣는 로직이 있어 Meetup 데이터를 새로 만들 경우 만든 Meetup의 PK를 FK로 갖는 Join 데이터가 만들어지는 구조이다. 이번에 softDelete 없이 Meetup을 삭제하는 API를 만드는 과정에서 테스트 도중 위와 같은 에러가 발생했는데 entity를 세팅할 때 CASCADE 옵션을 주지 않았기 때문에 delete or update를 할 수 없다고 알려주고 있었다. 그래서 이번엔 예전에 해야되겠네 하고 잊었던 CASCADE 옵션을 추가해볼 것이다. 적용 방법 기존 코드 meetup.entity.ts // ...생략 @Entit..
개요 Controller - Service - Repository의 형태의 아키텍쳐로 이루어진 Nest.js 프로젝트에서 jest로 테스트 코드를 작성하려는데 아주 기본적인 틀만 가지고도 에러가 발생해 그 해결 과정에 대해 정리해보고자 한다. 일단 원래 보통 service에서 repository를 바로 inject 해오기 때문에 repository class가 따로 필요 없으나 여러 테이블을 join하거나 transaction을 쓰기에는 따로 구분 짓는 게 편하다고 생각해 custom repository를 만들게 되었다. 아래는 해당 repository의 코드다. Repository // ...import 생략 @Injectable() export class MeetupsRepository extends..
개요 windows에서 Nest.js 프로젝트를 받아 npm i 한 후 .env 에서 MySQL 정보 세팅하고 서버 실행했더니 ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1) 콘솔에서 이런 에러가 계속 뜨며 서버가 실행되지 않았다. MySQL connect 관련에러로 보이는데 이전 프로젝트에선 잘 연결했었고 저때 당시에도 DBeaver나 MySQL Workbench로는 잘 접속되는 상태라 뭔가 MySQL 내부 세팅이 바뀐건가 해서 검색을 이리저리 해보았다. 해결방법 root 사용자에 대해 뭔가 세팅이 변해서 발생한 문제였다. SELECT Host, user, plugin, authentication_string FROM mysq..
개요 Nest.js에서는 @nestjs/throttler 를 통해 특정 유저(IP 기준)가 짧은 시간내에 여러 번 같은 API를 호출하는 것을 방지할 수 있다. 이것을 Rate Limit 기능이라고 한다. 설치 https://www.npmjs.com/package/@nestjs/throttler @nestjs/throttler A Rate-Limiting module for NestJS to work on Express, Fastify, Websockets, Socket.IO, and GraphQL, all rolled up into a simple package.. Latest version: 4.0.0, last published: a month ago. Start using @nestjs/throt..
공통점 debounce, throttle 둘 다 공통적으로 자주 사용되는 이벤트나 함수들의 실행되는 빈도를 줄여 성능상의 유리함을 가져오기 위한 개념인데 서버의 데이터를 요청하거나 UI 이벤트를 처리하는 과정에서 생기는 부하를 크게 줄여주기 때문에 알아두면 좋다. 차이점 둘의 차이점은 이벤트를 언제 발생시킬지의 시점 차이다. debounce는 입력이 끝날 때 까지 기다리지만 throttle은 입력이 시작되면 일정 주기로 계속 실행한다. 예시 debounce: onChange()를 활용한 자동완성 기능 throttle: 스크롤 이벤트, 게임에서의 동작 버튼 사용 방법 https://github.com/niksy/throttle-debounce GitHub - niksy/throttle-debounce: T..