일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dp
- 소켓
- 크롤링
- Nestjs
- javascript
- Crawling
- Node.js
- 프로그래머스
- 가천대
- 프로그래머스 레벨 2
- 수학
- type challenge
- HTTP
- 쉬운 문제
- HTTP 완벽 가이드
- 백준
- Algorithm
- 문자열
- 타입 챌린지
- TCP
- ip
- 자바스크립트
- 레벨 1
- 타입스크립트
- 알고리즘
- typescript
- BFS
- 그래프
- dfs
- socket
- Today
- Total
목록전체 글 (499)
kakasoo
AWS-CLI 설치 https://awscli.amazonaws.com/AWSCLIV2.pkg mac OS의 경우 위 경로에서 설치하면 된다. 현재는 version 2를 사용한다. Terraform 설치 brew tap hashicorp/tap brew install hashicorp/tap/terraform 테라폼 설치는 이렇게 한다. AWS Configure 설정 AWS는 CLI, SDK, CDK 등 다양한 방식으로 API를 제공한다. 테라폼 역시 SDK를 쓴다고 할 수 있는데, 이는 테라폼이 내부적으로 요청하기 때문이다. AWS는 누구나 사용할 수 있는 클라우드 서비스 제공자기 때문에 AWS 입장에서 사용자를 구분할 필요가 있다. 이 때 사용하는 것이 바로 AWS_ACCESS_KEY_ID, SECR..
brew install zsh mac 환경에서는 brew를 이용해서 간편하게 설치 가능하다. EC2 Password 설정 ssh -i my-private-key.pem ec2-user@my-ec2-ip-address ex) ssh -i private-key.pem ec2-user@13.125.215.78 AWS EC2의 기본 유저 계정은 ec2-user 라는 이름으로 되어 있다. ssh로 AWS EC2에 들어오면 초기에는 비밀번호 설정이 되어 있지 않다. 비밀번호 설정 명령어는 passwd username이고, sudo로 실행해야 한다. sudo passwd ec2-user zsh 설치 sudo yum install zsh sudo yum install uitl-linux-user.x86_64 # 기본 ..
generate_series SELECT * FROM generate_series('2022-12-01'::date, '2022-12-31'::date, '1 day'::interval) AS "day" generate_series 는 연속적인 값들을 나타낼 때 사용하는 함수다. generate_series의 arguments는 start, stop, step으로 시작 값, 끝 값, 그리고 간격이다. SELECT * FROM generate_series(1, 10); -- 1,2,3,4,5,6,7,8,9,10 -- SELECT * FROM generate_series(1, 10, 2); -- 1,3,5,7,9 -- 여기서 시작 값과 끝 값을 넣어주고 간격을 입력하면 그 사이의 값들을 rows로 표현해준다..
구글에는 googleapis 라는 라이브러리 (* 아래 링크) 도 있지만 사용하지 않는 것이 좋다. googleapis 이 라이브러리의 경우 구글에서 제공하는 모든 API가 다 들어 있기 때문에 어플리케이션에서 쓰기엔 버겁다. 용량 자체가 120MB 정도가 되는데 서버 성능이 부족하면, 예를 들어 EC2가 t3.micro, small 급이라면, 그런 경우에는 서버를 빌드할 때 JavaScript의 Heap memory가 부족하다는 오류를 내뱉으며 멈추게 된다. 그렇기 때문에 만약, 스프레드시트를 생성한다. 데이터를 넣는다. 그 시트를 구글 드라이브를 이용해 다른 사람에게 공유한다. 와 같이, 스프레드시트 이후에 연계될 다음 동작들이 있지 않다면 npm에서 적절한 라이브러리를 찾는 게 낫다. 여기서 말하는..
@IsDate() specificDate: Date; 날짜를 검증하기 위해서는 IsDate 데코레이터를 이용할 수 있다. 이렇게 작성할 경우 단순 String으로 된 Date는 무시당할 수 있기 때문에 Type 데코레이터도 필요하다. 날짜가 필수적인지 아닌지에 따라 아래와 같이 작성할 수 있다. import { applyDecorators } from '@nestjs/common'; import { Type } from 'class-transformer'; import { IsDate, IsNotEmpty } from 'class-validator'; export function IsNotEmptyDate() { return applyDecorators( IsNotEmpty(), IsDate(), Typ..
[Postgresql] TO_CHAR로 날짜 다루기 this.repository .createQueryBuilder('qb') .where(`TO_CHAR(qb.createAt, 'yyyy-mm') = TO_CHAR(CURRENT_DATE, 'yyyy-mm')`) .getMany(); 특정 날짜의 데이터를 뽑기 위해서는 일반적으로 검색 기간의 시작 날짜와 끝 날짜를 이용해 조회한다. 그래서 where문에 MoreThan, MoreThanEqual, LessThan, LessThanEqual, Between 을 사용한다. 다만 이 방식으로는 DB에서 사용 중인 시간 대에 맞게, 클라이언트, 서버, DB 간 시간 대를 맞춰주어야 한다. 서버에서 DB 시간을 맞추든, 아니면 값을 일일히 변환해주든, 변환 과정..
TO_CHAR를 이용해 데이터를 원하는 문자열로 변경할 수 있지만, 이는 타입까지 바꿔버린다. 단순히 연도, 월, 날짜 등을 비교하기 위한 거라면 TO_CHAR는 너무 멀리 간 듯한 느낌이 있다. 이럴 때는 차라리 DATE_TRUNC 함수를 사용하는 것이 더 직관적이다. DATE_TRUNC 함수는 date나 timestamp 값을 특정한 단위까지 자르는 걸 도와주는 함수다. SELECT DATE_TRUNC('day', timestamp_column) as truncated_timestamp FROM table_name;
SELECT TO_CHAR(u. "createAt", 'yyyy-mm') FROM user_entity AS u; TO_CHAR를 이용할 경우 날짜를 원하는 형태로 변경할 수 있다. 필요에 따라 yyyy-mm-dd, yyyy-mm 등 여러 가지 형태로 변경할 수 있다. 데이터는 그 데이터 각각의 항들이 쌓인 시계열로 조회하거나 또는 그룹화하는 일들이 매우 빈번하기 때문에, TO_CHAR 와 같은 함수는 매우 유용하다. TO_CHAR에는 아래와 같은 옵션들을 지정할 수 있다. FM MM DD HH24 MI SS AM or PM 이것들을 어떻게 조합하는지에 따라, 원하는 형태로 timestamp 값을 변경할 수 있다. 즉슨 yyyymmdd 도 상관없고, 아예 기상천외하게 dd yyyy mm 와 같이 만들어버..
SQL을 작성하다보면 계속해서 반복되는 쿼리가 발생한다. sub query에서 outer query에 접근하지 못하거나, 그 외에도 많은 경우에 동일한 쿼리를 짜야할 때가 있다. 이런 동일 쿼리가 발생할 경우, 작성도 어렵거니와 쿼리를 수정할 때 반복된 모든 구간에서의 수정이 필요하다. 따라서 이런 쿼리를 더 쉽고 간편하게 작성하기 위해서, 변수와 같이 쿼리를 저장해둘 필요가 있다. 그럴 때 사용하는 것이 바로 WITH 문이다. WITH의 사용 예시 WITH cte AS ( SELECT column1, column2, column3 FROM table1 WHERE column1 = 'some value' ) SELECT * FROM cte WHERE column2 = 'another value'; 이런 ..
Postgresql에서 UNION ALL 문은 여러 개의 SELECT 쿼리를 하나의 결과 집합으로 바꾸는 역할을 한다. 만약 이게 불가능하다면 각각의 쿼리문을 작성한 다음, 매번 돌아가면서 호출을 해야 하는데, 이렇게 될 경우 데이터를 한 눈에 파악하기 어렵다. 따라서 아래와 같이 작성할 수 있다. SELECT column1, column2, ... FROM table1 WHERE condition UNION ALL SELECT column1, column2, ... FROM table2 WHERE condition 추가적으로 호출해서 데이터를 보고 싶은 게 있다면 UNION ALL 이후 SELECT 문을 작성하면 된다. 중복을 제거한 UNION SELECT column1, column2, ... FRO..
1. 탁월함이란. 책을 읽기 전, 내가 그간 들었던 토스에 대한 이야기는 딱 한 단어로 얘기하면 '빡세다' 였다. 매일 새벽까지도 일해야 하는 팀이라는 소문이 들렸고, 그 때는 1~2년 바짝 일해서 목돈 마련하고 나가는 게 목적인 팀이라는 말도 들었다. ( 딱히 그거에 대해서 나쁘게 생각하지는 않는다. 내부 구성원들이 그렇게 일하면서도 재미를 느낀다면, 그건 오히려 정말 좋은 조직이라는 생각을 한다. ) 하지만 내가 사회 생활을 하면서 들은 이야기 중에는 그 반대의 이야기도 많았다. 토스의 성공 신화를 찬양하는가 하면 더 나아가 이승건 대표는 거의 신격화된 인물이었다. 토스에 대한 이야기는 무엇이 옳은 것일까. 그들은 정말로 신화를 써내려갔는가. 성공할 수는 있다. 하지만 성공했다고 해서 모두 신화처럼 ..
Response DTO를 이용한 응답 직렬화 (Serialization) 초기 기능 개발에는 서비스 로직으로 Response의 형태를 가공해서 제공해주곤 했다. 하지만 기능이 추가됨에 따라, 서비스는 유저 서비스와 판매자 서비스 등, 역할에 따라 모듈이 분리되기 시작했고, 모듈마다 동일한 형태의 데이터를 다루게 될 때마다, 서로 다른 모듈의 서비스를, 데이터 형태 가공 용으로 호출해도 되는지 의문이 됐다. 따라서, 서비스 로직 외에 응답 형태만을 가공하기 위한 레이어가 필요하다는 생각에 다다랐는데, 이 결론이 직렬화였다. 1. class-transformer와 글로벌 인터셉터 npm install reflect-metadata class-transformer reflect-metadata는 코드에 메타 ..