전체 글 291

[NestJS] DB 캐시 Redis 사용하기

현재 앱 운영이 순조롭게 되고 있는 것 같지만, 내부적으로 서버 응답 속도가 느리다는 문제가 꾸준히 있었다. 사실 이 문제는 AWS CloudWatch에서도 꾸준히 보고되었고 예전부터 해결해야 할 과제 중 하나였는데, 다른 작업들에 밀려 우선순위가 낮아졌다. 이제서야 이 문제를 해결하게 되었다. 현재 문제 상황 현재 운영 중인 데이터의 구조는 postgresql에서 부모 데이터에 자식 데이터가 1:n으로 물려 있는 형태이다. 여기서 부모 데이터는 15만개 정도의 row 데이터가 있고, 자식 데이터는 그것의 10배 정도의 row 데이터가 있다. 이 데이터는 사용자의 tz 기준으로 하루에 대한 데이터를 뽑아내야 한다. 여기서 문제가 되는 것은 time을 기준으로 데이터를 범위 검색을 하다 보니 하루에 대한 ..

[NestJS] Guard 사용하기

웹서버에서 중요한 것 중의 하나는 보안 관련한 로직일 것이다. NestJS에서는 허용된 User가 아니면 query나 Mutation, Subscription을 요청하지 못하도록 하는 Middleware를 제공한다. 이것을 UseGuard라는 decorator로 제공하고 있다. 이번에 Query, Mutation, Subscription에 관해서 Guard를 제작한 경험을 작성하고자 한다. Guard 개념 Guard 개념은 간단하다. 허용된 유저가 아니면 요청 자체를 막아버리는 것이다. 예를 들어 모든 사용자가 서버에 요청을 할 수 있다면, DDos 같은 엄청난 트래픽이 들어올 때 모든 요청에 대하여 응답을 하게 될 것이다. 이러한 상황이 지속되면 서버의 자원에 낭비가 올 수 밖에 없으며, 결국에는 서버..

DockerHub 와 Github 연동하여 자동으로 이미지 만들기

배포 자동화는 계속 발전하고 있다. 개발자들이 개발에 집중할 수 있게 함으로서 생산성을 올리게 되는 선순환으로 이어지게 된다. 내가 현재 사용하는 개발환경은 nodejs 환경이며, 도커 컨테이너에 담아서 쉽게 deploy 할 수 있게 하고 있다. 최근에 도커에 대한 공부를 하면서 기존의 배포 환경을 한번 더 정리하는 식으로 정리해 둘려고 한다. 참고로 내가 하는 방법은 현재 "유료" 이다. (1년에 60달러를 결제하면 Pro 계정 사용이 가능하다.) DockerHub 에서 Github 코드 depoly 하기 먼저 dockerhub 사이트에서 github 계정이랑 연동한다. 나의 경우에는 Github 계정과 연동을 시켜 두었다. 그 다음으로는 Repository를 만들고 간단한 설정을 한다. 1. 도커 허..

[NestJS] 네이버 문자인증 로직 제작하기

새로 제작할 어플에 문자인증 로직이 새로 생겨서 문자인증 로직을 구현해야 했다. 문자 인증같은 경우에는 처음 시도해 보는 것이라서 생각이 좀 필요했다. 로직 구상하기 찾아보니, 문자 인증 자체를 제공하는 API는 거의 찾을 수 없었다. 그 대신 문자를 보낼 수 있는 API는 참 많았다. 그래서 문자를 보내는 API를 내 입맛에 잘 맞추어서 적용하면 문자인증 로직을 충분히 구현할 수 있을 것 같았다. 문자전송 API는 네이버 클라우드 플랫폼에서 제공하는 SENS를 사용하기로 했다. 기존의 문자 인증 메시지를 보면, 특정 자릿수의 난수를 불러주고 시간제한을 두면서 입력을 요구한다. 난수 생성은 간단히 6자리의 숫자로 이루어진 문자열을 반환하고, 시간이 지나면 문자 인증을 할 수 없게 한다. 여기서 기존에 만..

맥북 Monterey 업데이트 후 nodejs gyp error 해결하기

이번에 M1 맥북을 Monterey로 업데이트 했다. 신기한 기능들이 많이 추가되었다. 특히 Airplay 지원과 메모 태그 지원 등 신기한 기능들이 많이 생겼다. 하지만 개발자 입장에서는 외관만 좋아지고, 사소한 에러가 많이 생겼다. 특히 typescript로 개발중인 나에게는 별별 오류들이 많이 생겼다. 특히 인텔 16인치 맥북프로를 사용할 때 카탈리나에서 빅서로 넘어갈 때는 지옥이 따로 없었다... 여튼 이런 기억들이 생각이 난다. 나의 증상은 이렇다. 평소같이 nest 어플리케이션을 실행하기 위해 npm ci 명령어로 패키지 설치 중, 다음과 같은 오류가 떴다. 참고로 npm ci 명령어는 npm install과 같은 명령어인데, 인덱싱 방법에 차이가 있어 후자보다 2배정도 빠른 속도를 낸다. ...

IT 이야기 2021.10.30

[NestJs] PayloadTooLargeError: request entity too large 해결하기

최근에 대량의 Mutation을 실행하기 위해서 서버에 요청을 보낸 적이 있었다. 그런데 PayloadTooLargeError: request entity too large 라는 에러가 뜨면서 Mutation 요청에 실패하는 일이 발생했다. 찾아보니 express 기반의 서버에서 발생하는 오류 같은데, 요청이 특정 크기를 넘어가게 되면은 막아버리는 것 같았다. 그래서 해결법을 찾아보니 express의 버전에 따라서 약간의 차이는 있으나, 해결법은 비슷해 보였다. 해결법 나는 아래와 같은 방법으로 해결했다. bodyParser 모듈을 설치한 다음 limit를 풀어 주었다. 아래 코드들은 main.ts 파일이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { NestF..

갤럭시워치 4 구매 후기

살면서 워치 시리즈는 절대 안살것 같았는데, 이번에 워치 시리즈가 타이젠에서 웨어OS로 넘어감과 동시에 워치의 완성도도 높아졌다고 생각했기에, 한번 구매해 보았다. 참고로 나는 이전에 한 번도 워치 시리즈를 이용한 적이 없다. 첫인상 내가 구매한 모델은 갤럭시워치4 40mm 모델이다. 처음에는 44mm모델을 살까 고민도 했으나 실착을 해 보고 40mm가 적당하다고 생각했다. 손목이 두꺼운 남성분들은 44mm가 더 어울릴 것 같았다. 처음 착용감은 그렇게 무겁지도 않고 이질감 별로 없는 시계라는 느낌이 들었다. 워치 페이스까지 일반 시계 모양으로 해놓으니 별 위화감이 없었다. 착용사진도 이래저래 무난해 보였다. 매력적인 기능들 사실 나는 워치에 대해서는 별 기대를 하지 않는 사람이다. 제일 관심있게 보는 ..

[NestJs] 환경변수 설정하기

NestJs 서버를 구축하면서 서버 환경에 따라 달라지는 변수나 설정값들이 있다. 대표적 예시로는 prod 서버와 test 서버가 있을 것이다. prod 서버는 prod db 또는 그에 맞는 환경이 있고, test 서버는 test db 또는 그에 맞는 설정값들이 있다. 서버를 deploy할 때 이러한 구분을 잘 해두면 쉽게 개발 환경과 배포 환경을 구분해서 사용할 수 있다. 기존의 방법 기존에는 애플리케이션 실행할 때 인자로 환경변수를 주면서 실행하게 되면 process.env.환경변수 를 이용해서 문자열로 불러와서 사용할 수 있었다. 이를 확장해서 dotenv 환경을 사용했다. dotenv를 사용하게 되면 .env 파일 안에 다양한 환경변수를 입력하여 프로그램 실행 시에 인자로 넣을 수 있다. Nest..

맥에서 "개발자를 확인할 수 없기 때문에 열 수 없습니다" 문제 해결하기

가끔씩 인터넷에서 받은 앱을 실행할려고 할 때, 개발자를 확인할 수 없기 때문에 열 수 없다는 문구가 뜨면서 실행이 안 될 때가 있었다. 이럴때는 애플에서 정한 격리 속성을 해제하면 된다. xattr [파일명] : 속성 확인 quarantine 글자가 들어가는 속성들을 해제하면 된다. xattr -d com.apple.quarantine [파일명] 명령어를 실행한 후 프로그램을 실행하면 잘 실행할 것이다.

IT 이야기 2021.10.04

Grafana에 AWS Cloudwatch 연동하기

AWS의 서비스를 이용하면서 다양한 데이터를 모니터링할 수 있다. 하지만 AWS 콘솔에 로그인하지 않고 데이터만 볼 수 있는 Grafana 라는 툴이 있다. 그라파나를 이용해서 AWS의 데이터를 모니터링해보자. AWS 준비 1. IAM 계정을 준비한다. 왜냐하면 그라파나에서 인증을 할 때 IAM 자격 증명이 필요하기 때문이다. IAM 자격 증명에 필요한 엑세스 키도 미리 만들어 준비한다. 2. 확인하고자 하는 모든 인스턴스들의 IAM 역할을 수정해야 한다. Grafana 시작하기 그라파나를 시작할 때 해당 사이트에서 받아서 실행했다. 운영체제에 맞게 다운받은 후, bin 폴더 안에서 그라파나 서버를 실행한다. 나의 경우에는 맥os에 개인 사용자에 맞게 아래의 링크에서 다운받았다. 서버는 localhost..