코딩 공부/공부 16

docker

장점 의존성 충돌 문제를 해결해 준다 개발과 배포 환경을 일치시킨다 수평 확장을 쉽게 해준다 각 서버에 새로운 내용을 배포하기 쉽게 만들어준다 mac 설치 https://docs.docker.com/desktop/install/mac-install/ linux 설치 https://docs.docker.com/engine/install/ubuntu/ docker --version으로 설치 확인 이미지화 할 폴더내에 Dockerfile 파일을 만들고 FROM node:current-slim # 앱 디렉터리 생성 WORKDIR /usr/src/app # 앱 의존성 설치 # 가능한 경우(npm@5+) package.json과 package-lock.json을 모두 복사하기 위해 # 와일드카드를 사용 COPY p..

nginx

프록시 서버로 쓰려고 씀 설치법 mac일 때 brew install nginx // 설치 sudo nano /opt/homebrew/etc/nginx/nginx.conf // nginx 파일 수정 (nginx파일의 위치는 brew info nginx를 하면 알 수 있음 /opt/homebrew/Cellar/nginx/1.19.8 이런식으로 나오는데 위에처럼 쓰면됨) linux일 때 sudo apt update sudo apt install nginx // 설치한다 sudo nano /etc/nginx/sites-available/default 일반적으로 클라이언트가 8001번 포트고 서버가 8000번 포트라면 클라이언트에서 8000번으로 요청을 한다 하지만 nginx를 쓰면 브라우저에서 80번 포트로 ..

nodemailer를 이용한 mail보내기

EmailJs 처음에는 EmailJs로 메일을 보내려고 하였다 메일 전송에는 성공하였으나 무료회원은 한달 200개의 횟수제한, 토큰을 3개나 받아오며 보내는 절차가 복잡하기에 별다른 제약없는 nodemailer로 갈아탔다 nodemailer 우선 설치한다 npm install nodemailer 그리고 예제대로 코딩을해서 실행을 시켜보면 const nodemailer = require("nodemailer"); async function main() { let testAccount = await nodemailer.createTestAccount(); let transporter = nodemailer.createTransport({ host: "smtp.ethereal.email", port: 587,..

환경변수 사용법 (react, webpack, aws)

일반적으로 환경변수는 .env파일에 선언한것을 process.env.환경변수이름으로 불러와서 사용한다 node.js 환경 dotenv 라이브러리는 node.js환경에서 .env파일을 읽어오는것. react환경 기본적으로 처리가 되어있어서 따로 라이브러리 불러올 필요는 없지만 변수이름 앞에 REACT_APP_을 꼭 붙여줘야함 webpack으로 구성한 react환경 dotenv-webpack 라이브러리 필요 (REACT_APP_을 안붙여줘도됨) (아래 블로그가 설명이 잘 되어 있다) [React] Webpack으로 구축한 React 프로젝트에서 환경 변수(.env) 사용하기 TL;DR Webpack을 통해 직접 구성한 리액트 프로젝트 .env 파일에 환경 변수를 선언할 때 REACT_APP_ 으로 시작하지 ..

**연산자에대한 고찰

**연산자는 거듭제곱을 해주는 연산자이다 2^50을 2**50으로 쓸 수 있다. 나는 2**50은 let result = 1; let base = 2; for (let i = 0; i < 50; i++) { result *= base; } 과 마찬가지로 50번 반복을 할 줄알았는데 for 반복문, **연산자와 내가 쓴 거듭제곱의 시간복잡도를 O(logN)으로 줄이는 알고리즘 거듭제곱 시간복잡도 줄이기 거듭제곱이란 base^exponent의 형태인데 예를들어 2^50이면 2를 50번 곱하는것이며 반복되는 횟수는 50번이다 for문으로 나타낸다면 let result = 1 for(let i = 0 ; i < exponent; i++){ result *= base } consol.. fullfish.tisto..

socket.io

socket.io를 이용해서 실시간 채팅 구현하기 서버 코드 //index.js var app = require('express')(); var server = require('http').createServer(app); // http server를 socket.io server로 upgrade한다 var io = require('socket.io')(server); // localhost:3000으로 서버에 접속하면 클라이언트로 index.html을 전송한다 app.get('/', function(req, res) { res.sendFile(__dirname + '/index.html'); }); // connection event handler // connection이 수립되면 event hand..

구글 맵 API

https://console.cloud.google.com/google/maps-apis/start?hl=ko Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com 우선 해당 링크에 들어가서 로그인 및 다음 절차들을 완료해준다 구글 맵 api가 기본적으로는 유료지만 한달 200달러까지는 무료이며 api로 위치만 받아오는 행위는 1회에 0.007달러라서 사실상 공부목적으로 사용한다면 무료나 마찬가지이다 기본적인 코드 위도, 경도에다가 위도, 경도를 입력해준후에 API_KEY에 본인 key값을 입력해주면된다 zoom은 처음 떳을때의 확대정도인데 개인적으로 17정도가 적당해보인다 ..

정규표현식의 capture, group

//예시 문자열 let str = "안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 G gd god good goood!."; capture는 ()로 사용 str.match(/전화번호/) //반환 [ '전화번호', index: 11, input: '안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 good!.', groups: undefined ] str.match(/전화(번호)/) //반환 [ '전화번호', '번호', index: 11, input: '안녕하세요 안녕 제 전화번호는 010-1234-5678입니다 good!.', groups: undefined ] 위 코드에서 처럼 '번호'에 capture을 할 경후 match의 반환값 2번째 인자로 capture안의 문자열이 들어..

node-cron을 이용한 schedule

npm install node-cron // 설치 사용 예시 const cron = require('node-cron'); cron.schedule('* * * * * *', function () { console.log('매 초 마다 작업 실행'); }); cron.schedule의 첫인자로 실행 주기, 두번째 인자로 콜백 함수 입력 메소드 기본적으로 자동실행인데 const cron = require('node-cron'); const a = cron.schedule('* * * * * *', function () { console.log('매 초 마다 작업 실행'); }, { scheduled: false }); a.start(); scheduled를 false로 주면 a.start()해야지만 실행된..