일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 위키백과
- AWS
- 5주차
- cors
- Node.js
- Await
- MongoDB
- SQL
- Get
- 비동기
- post
- 4주차
- NoSQL
- 2주차
- 개발일지
- OpenAPI
- dynamo db
- 1주차
- 웹 스크래핑(크롤링)
- PROMISE
- Sequelize
- nginx
- JWT
- 숙제
- 3주차
- 트랜잭션
- 부트스트랩
- HTTPS
- 항해99
- 스파르타코딩클럽
- Today
- Total
목록
728x90
전체 글 (117)
얼음꽃의 일지
인덱싱 작업이란? 보통 사전 처럼 정리가 필요한 걸 나중에 찾기 위해 미리 준비하는 작업이라고 보는데 tinyint 값인 경우 boolean이라 0 혹은 1 으로만 보통 이루어져 있어서 인덱싱 작업이 필요없다고 생각했습니다. 근데 데이터가 많아지고 확인할 부분이 많아지면서, 인덱싱 작업을 한번 해봤는데 속도 차이가 확실히 보였습니다. 확인해보니 자주 조회가 되는 필드면 tinyint여도 인덱싱 작업이 필요하다고 합니다. 해당 필드로 where 절 / join / order 절 등 엄청나게 많이 사용되는 경우라면 인덱싱 작업을 통해서 속도를 좀 더 개선 할 수 있습니다. 대신, 값의 분포가 적거나 필드 업데이트가 많다면 피하는게 맞다고 봅니다.
DB 데이터에서 중복된 값들 을 group by 시켜서 가져와 그 중 desc를 쓰고 싶었으나... group by 를 하게되면 항상 asc 형태를 가져와 원하는 값을 못사용 하는 경우가 있었습니다. 그래서 방법을 찾아보니 WITH 함수가 있다고 하더라구여!! WITH 문법은 SQL에서 공통 테이블 표현식(CTE, Common Table Expression)을 정의하는데 사용됩니다. 이를 통해 복잡한 쿼리나 서브쿼리를 보다 간단하게 작성하고, 반복적으로 사용해야 하는 쿼리 부분을 재사용할 수 있습니다.WITH new_data AS ( SELECT column1, column2 FROM table WHERE conditions)SELECT column1, column2FROM new_dat..
[Redis / DynamoDB 비교]특징RedisDynamoDB확장성수동 설정 필요자동 확장설정 및 관리복잡함간단함일관성애매일관성능매우 빠름 (인메모리)빠름 (디스크)비용메모리 기반사용량 기반 Redis와 DynamoDB를 두개 다 사용하고 있는 점에서 두가지를 비교했을때 표와 같이 나타낼 수 있습니다. 처음에는 Redis만 사용을 했는데 사실 메모리 기반이라 정해진 틀에서 써보고 늘리냐 줄이냐 이런식으로 진행하는 경우가 큽니다. 물론, 트래픽이 늘어나면서 redis 사용이 많아지는 경우에는 어느 정도 커버를 할 수 있다고는 하지만 매일 그렇게 발생하는게 아니면 정해진 메모리 안에서 사용하는게 득일 수도 독이 될 수도 있다고 봅니다. 반면, DynamoDB를 사용하는 경우에는 알아서 사용량에 따라 비용..
현재까지 await 과 promise를 둘 다 사용해봤을때,다양한걸 사용할때는 속도 측면으로 promise 가 더 빠르다고 느꼈습니다. 여러개의 create/update/delete같은 작업을 진행할때, 각각의 진행값이 이루어져야하는필수 순서가 있다면 await을 쓰는게 맞지만, 순서없이 값을 변경하는 이유라면 promise가 최적의 속도를 냅니다. promise 안에서는 여러개의 작업이 동시에 진행되지만, 먼저 빨리 끝나는대로 정리가 되기에 순서랑 상관없게 됩니다. const task1 = new Promise((resolve, reject) => { setTimeout(() => { console.log("Task 1 completed"); resolve("Task 1 result"); ..
[for와 관련된 문법] 1. for2. for...in3. for...of4. forEach [for 각각의 정보] 문법설명장점단점for초기화, 조건검사, 증감식으로 구성된 기본 반목문- 높은 유연성 및 제어가능- 조건에 따라 루프를 중단(break)하거나 건너뛸 수 있음(continue)- 코드가 길어질 수 있음- 가독성이 떨어질 수 있음for...in객체의 열거 간으한 속성(Key)을 반복- 객체의 속성을 순회하기에 유용- 간결한 문법- 배열 순회에 적합하지 않음- 객체의 프로토타입 체인에 있는 속성까지 순회할 수 있음for...of이터러블 객체(Array, Map, Set, String 등)을 순회- 이터러블 객체 순회에 적합- 간결한 문법- break, continue, return 사용가능- ..
Dynamo DB 코드 사용법 [설치] npm i @aws-sdk/client-dynamodbnpm i @aws-sdk/lib-dynamodb [코드]const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');const { DynamoDBDocumentClient, PutCommand, QueryCommand, GetCommand, DeleteCommand,} = require('@aws-sdk/lib-dynamodb');const client = new DynamoDBClient({ region: '사용하는 지역', credentials: { accessKeyId: process.env.DYNAMODB_ACCESS_KEY, s..
[Dynamo DB 생성 방법] 1. AWS -> Dynamo DB 검색 -> 왼쪽 목록에서 테이블 선택 후 테이블 생성 2. 테이블 이름은 원하는걸로 설정 3. 파티션 키는 이제 Dynamo DB 함수를 사용할때 오리지널 키 값으로 검색을 할때 쓰임으로 잘 정해서 넣기 4. 밑에 테이블 생성 누르기 [오리지널 파티션 키말고도 다른 키 값으로 나중에 검색을 하고 싶을때] (GSI) 1. 만든 테이블 이름 클릭 2. 오른쪽에 테이블 세부 정보 보기 누르기 3. 목록 중 인덱스 클릭 -> 인덱스 생성 누르기 4. 코드에서 사용할 Key값의 이름을 파티션 키에 넣기 5. 인덱스 이름은 나중에 검색할때 필요한 값이므로 파티션 키랑 같은 값으로 하거나 구분 가능한 이름으로 설정( 보통 기본적으로 파티션 키 넣으..
Winston 이란? Node.js 에서 로깅을 위하 라이브러리라고 보시면됩니다. 물론, pm2에 있는 log를 보는 방식을 app.js 에서 인위적으로 바꾸는 법도 있지만, 이러한 라이브러리를 사용하게되면 다양한 설정 및 유연한 로깅 레벨을 제공하기에 좀 더 쉽고 이쁘게 기록,관리가 가능합니다. Winston 사용법 npm install winston const winston = require('winston'); // 사용자 정의된 로그 포맷 설정 const myFormat = winston.format.printf(({ level, message, timestamp }) => { return `${timestamp} [${level.toUpperCase()}]: ${message}`; }); // ..