전체 288

[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..

AWS EC2 서버에 도메인 적용과 SSL 인증서 적용하기

최근에 http로 서버를 열었다가 낭패를 본 경험이 있었다. 그래서 이것을 해결하기 위해서 SSL 인증서를 도입함과 동시에 공부도 할 겸 도메인 적용까지 하기로 했다. 이걸 하겠다고 이틀동안 별 짓을 다 했던것 같다. 그래도 결과는 나름 잘 나온다고 생각한다. 최종 결과 1. SSL 인증서가 적용되어 주소창 왼쪽에 자물쇠 아이콘이 뜬다. 2. http 로 접속해도 https로 접속이 가능하다. 3. 포트 번호 및 아이피 주소가 포함된 주소가 아닌 도메인 주소로 표기된다. 도메인 구매 먼저, 도메인을 구매해야 한다. 여기서 도메인이란, 주소를 의미한다. 예를들어 naver.com 또는 google.com 같은 주소를 말한다. 도메인 주소를 구매할 수 있는 곳은 여러곳이 있다. 국내 기준으로 보면 호스팅kr..

프로그램 백그라운드 실행 nohup

개인적으로 정리하면서 확인할려고 작성한 포스트입니다. 리눅스에서 터미널을 열고 프로그램을 실행하고 있는 상황이라고 가정하자. 이 때 터미널 창을 종료하면 해당 터미널에서 실행하고 있는 프로그램들도 모두 종료하게 된다. 이와 마찬가지로 ec2 인스턴스에 ssh로 접속한 상태에서 프로그램 실행 후 종료하게 되면 해당 프로그램은 종료되게 된다. 이를 해결하기 위해서는 프로그램을 서비스 단에서 실행하거나(예 : 도커 등) , 백그라운드에서 실행하게 만들어야 한다. nohup nohup 명령어를 통해서 백그라운드 실행이 가능하게 한다. 실행 방법은 실행하고자 하는 명령 앞에 nohup을 붙여준다. 예) nohup python3 app.py 로그를 기록하고 싶으면 리다이렉션을 실행한다. 예) nohup python..

urllib SSL: CERTIFICATE_VERIFY_FAILED 에러 해결하기

오랜만에 urllib를 이용해서 웹 크롤러를 돌려볼 일이 생겼는데, 갑자기 제목과 같은 에러메시지가 뜨면서 크롤링이 불가능해졌다. 원인을 찾아보니, SSL 인증서 관련한 오류였다. SSL 인증서를 적용하지 않은 사이트 (http:// 로 시작되는 사이트) 에 대해서 오류가 나는 듯 했다. 조금만 찾아보니 간단하게 해결할 수 있었다. 1 2 3 4 5 6 import urllib.request import ssl context = ssl._create_unverified_context() urllib.request.urlopen("크롤링 주소", context=context) Colored by Color Scripter cs SSL 인증서의 역할이 갈수록 중요해지는 것 같다. 참고링크 : https://..