일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- class
- Bull
- Dinosaur
- TypeScript
- JavaScript
- Sequelize
- Nest.js
- Express
- game
- OCR
- Queue
- MySQL
- dfs
- 정렬
- jest
- MongoDB
- 게임
- GIT
- react
- mongoose
- flask
- AWS
- 공룡게임
- 자료구조
- Python
- nodejs
- nestjs
- cookie
- typeORM
- Today
- Total
목록TIL (128)
포시코딩
오늘은 묵혀놓은 궁금한 것들을 해결하는 시간을 가져보았다. 구글링 및 그동안 공부한 것들 종합 + 튜터님한테 직접 물어보는 방법을 통해 아래 다섯가지 상황과 결과를 정리해보았다. api 통합 vs 분리 개요 대기중인요청 진행중인 요청 완료된 요청 위 세가지 요청 리스트 api에 대해 정리하던중 다시 path를 깔끔하게 재할당 해줘야하는 상황이 생겼는데 두가지 선택사항이 생겼다. 방법 찾기 1. 라우터에서 부터 나눠지게? /api/orders/waiting?p=1 /api/orders/doing /api/orders/done?p=1 2. GET /api/orders로 들어가 컨트롤러에서 type에 따라 다른 service 호출? /api/orders?type=waiting&p=1 /api/orders?ty..
개발시간을 줄이기 log + 컨트롤 + 스페이스 log만 치고 컨트롤+스페이스 하면 console.log가 만들어짐 개귀찮게 console.log() 다 치고 있었는데 첨 알음 ㅋㅋ 객체 구조 분해 할당 시 key값 재작명 const test = { apple: '111', banana: '222', coke: '333' } const { apple, banana, coke: something } = test; console.log(`apple: ${apple}`); console.log(`banana: ${banana}`); // console.log(`coke: ${coke}`); console.log(`something: ${something}`); 예를들어 userInfo에서 객구분할(객체 구조 ..
개요 오늘은 기존에 WebSocket으로 구현했던 신청 알림 기능을 socket.io로 바꾸는 과정을 진행했다. 기존 WebSocket로 만든 코드 SocketManager.js const http = require('http'); const WebSocket = require('ws'); class SocketManager { constructor(app) { this.server = http.createServer(app); this.wss = new WebSocket.Server({ server: this.server }); this.load(); } static sockets = []; load = () => { this.wss.on('connection', (socket) => { SocketM..
개요 내가 사용하는 테이블 컬럼의 속성은 다음과 같다. 여기서 createdAt, updatedAt은 데이터를 넣을 때 자동으로 넣는 시간이 들어간다. 하지만 time zone 문제로 인해 현재 시간보다 정확히 9시간 전의 시간으로 들어가게 되는데 문득 나는 여기서 pickup에 대한 시간은 사용자가 선택해서 넣는데 그럼 동일한 시간에 대해 pickup 시간만 다른거 아냐? 라는 생각이 들었다. 만약 그렇다면 api를 통해 받은 해당 테이블의 데이터에 대해 createdAt은 9시간을 더하고 pickup은 9시간을 안더한 값을 쓰는 어지러운 상황이 연출될 것이다. 일단 진짜 생각한대로 그런지 테스트 해보았다. 알게된 사실 데이터 넣는 시간에 맞춰 pickup 데이터도 동일하게 선택해 넣었는데 놀랍게도 알..
console.log와 alert의 파라미터 타입 확인 개요 // 1 console.log('1. orderId=' + orderId); // 2 console.log('2. orderId=', orderId); // 3 alert('3. orderId=' + orderId); // 4 alert('4. orderId=', orderId); 예전에는 1번처럼만 사용했었는데 2번처럼 하는게 가능하다는 걸 알게 되고 나서부터는 계속 2번처럼 써왔다. 그러다가 똑같이 문자열로서 작성하는거니 alert()에도 같은 방법으로 사용했는데 뒤의 값이 나오지 않는 문제를 겪었다. 문제 발견 및 해결 일단 모든 값을 다 찍어서 비교해봤다. 이렇게 비교해보니 console.log()에서부터 다르다는걸 알았는데 콤마(,)가..
helmet helmet 라이브러리는 다양한 HTTP header를 설정하여 Express 앱을 보호하는데 도움을 준다. 사용방법 const express = require("express"); const helmet = require("helmet"); // (1) const app = express(); app.use(helmet()); // (2) 주석으로 해놓은 (1), (2) 두 줄이 끝이다. 최상위 helmet() 함수는 아래 15개의 작은 미들웨어를 감싸고 있다. 세부 미들웨어 간단 정리 helmet.contentSecurityPolicy(): 크로스 사이트 스크립팅 공격 완화 helmet.crossOriginEmbedderPolicy(): Cross-Origin-Embedder-Policy..
TypeScript tsconfig.json 설정 에러 변경한 설정이 적용이 안되고 에러가 나고 있을 때 shift + command + p typescript 치면 나오는 목록에서 TypeScript: Restart TS server 클릭하면 새로고침 된다. JavaScript에는 없는 Type 설치 npm i express dotenv npm i -D typescript @types/node @types/express @types/dotenv 이처럼 추가로 설치한 라이브러리에 대해 해당 라이브러리의 내부 코드에 대한 타입이 정의되어 있지 않아 타입스크립트 파일에서 타입 추론을 할 수 없는 상황에서 추가로 설치해줘야 하는 상황이 생길 수 있다. 그러면 위 처럼 추가로 설치하면 됨 ts-node 자동화 ..
사용 방법에 따른 메소드의 변화 다른 팀 프로젝트를 리뷰하면서 bcrypt 사용하는 부분에 대해 나와 같은 라이브러리를 가져다 쓰는데 리턴받는 값이 다르다는걸 알았다. 일단 사용하는 형태가 다르긴 했다. 나는 new Promise를 선언해 그 안에서 사용했고 다른 팀은 await을 붙여 사용했다. 아래는 그 코드다. 내 코드 encryptPassword = async (password) => { // ...생략 return new Promise((resolve, reject) => { bcrypt.hash(password, saltRounds, (err, hash) => { // ...생략 }); }); }; 다른 코드 const encryptPassword = await bcrypt.hash(passw..
Sequelize Transaction 다루기 팀스터디 중에 트랜잭션 관련해서 추가로 나한테 주어진 과제가 있었다. repository에서 구현한 transaction 로직을 각각의 repo method를 구분지어 service에서 구현할 수 없을까 Error message의 성격별로 status code를 구분지어 리턴하는 방법 트랜잭션 level? 전파?에 대해 알아보고 적용하는 방법 repo가 아닌 service에서 transaction 구현 일단 기존에 repo에서 성공적으로 transactiond을 구현했기 때문에 바로 떠오르는 아이디어가 있었다. repo에서 했던대로 service에서 transaction 객체를 호출한 뒤 repo method를 호출할 때 파라미터로 넘겨 transaction..
데이터베이스 심화 자신이 데이터베이트 엔진을 만드는 프로그래머일 때 이중화 기능을 어떻게 구현해볼지 검색 없이 생각해오라는 과제를 받았었고, 이에 대해 다음과 같이 생각해보았다. 먼저, 두개의 프로세스로 나눈다. 마스터와 스탠바이의 싱크 맞추기 마스터 터졌을 때 스탠바이로 넘겨주는 방법 1. 싱크는 a 폴더의 카피본인 a' 폴더에 대해 리눅스에서 cp 하듯 처리하면 a'에 없는 파일만 옮겨진다거나 a'에만 있는 파일은 삭제되는 명령어가 있는걸로 기억하는데 이 명령어를 마스터에 write/update/delete가 있을 때마다 아니면 일정시간마다 수행되게 한다. -> 근데 지금 작성하며 생각해보니 이 방법은 하나의 같은 pc 안에서나 가능하고 두 서버가 물리적으로 다르다면 불가능할 것이므로 다른 방법이 필..