코딩 공부 50

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

모노 알파베틱 암호화 (Monoalphabetic Cipher)

앞선 카이사르 암호화와 마찬가지로 치환암호 26자의 알파벳을 각기 다른 알파벳으로 치환시킴 코드화 알파벳이 오름차순된 ('abcd...') 문자열과 랜덤으로 뒤섞인 문자열을 준비해서 각 알파벳의 index를 참고하여 치환한다 function encrypt(str) { let resultArr = []; for (let i = 0; i < str.length; i++) { if (/[a-z]/.test(str[i])) resultArr.push(lowerMonoAlphabet[lowerAlphabet.indexOf(str[i])]); else if (/[A-Z]/.test(str[i])) resultArr.push(upperMonoAlphabet[upperAlphabet.indexOf(str[i])]); ..

카이사르 암호(Caesar cipher)

카이사르 암호란 각 글자를 n만큼 shift시킨 간단한 치환암호 예 : 'abz'를 +1만큼 shift -> 'bca' 코드화 문자열의 각 문자를 유니코드화 -> 각 유니코드에 원하는 shift만큼 더해줌 -> 이 때 'z' 다음에는 'a'가 와야하므로 'z'의 유니코드를 넘어서면 알파벳의 갯수인 26을 빼줌 -> 대문자도 고려해줌 -> 유니코드를 다시 알파벳으로 변환 -> 복호화는 반대로 하면 됨 function encrypt(str) { let resultArr = []; let unicodeArr = []; for (let i = 0; i < str.length; i++) { const unicode = str[i].charCodeAt(0); if (str[i] !== " ") { if ( (uni..

환경변수 사용법 (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_ 으로 시작하지 ..

RSA

RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 복호화가능 (일반적으로 민감만 정보 보호하려고 사용) 개인키로 암호화한 내용은 공개키로만 복호화가능 (공인인증서처럼 본인을 인증하는 용도로 사용) 공개키와 개인키를 만드는 과정 1. 두 소수 p와 q를 만든다 2. p-1, q-1과 각각 서로소인 정수 e를 준비한다. 3. ed를 (p-1)(q-1)로 나눴을때 나머지가 1인 d를 찾는다. ((p-1)(q-1)과 e가 서로소가 아니면 만족하는 d가 없음 그래서 2번과정 필요) 4. N = pd (N은 평문인 a보다 커야한다), N과 e는 공개키, d는 개인키 5. ..

openssl 설치 및 키 발급

openssl 이란 SSL과 TLS프로토콜의 개방형 소스구현 openssl을 이용하여 자체적으로 키를 생성할 수 있다. openssl 설치 brew update // 홈브루 최신상태 업데이트 brew search openssl // openssl 검색 brew install openssl1@1.1 // openssl 설치 터미널에서 openssl을 입력하면 접속됨 키 발급 개인키 만들기 openssl에 들어간후 genrsa -aes256 -out rootca_private.key 2048 // 암호화 하지 않으려면 -aes256빼고 만들면 됨 개인키로 공개키 만들기 openssl에 들어간후 rsa -in rootca_private.key -out rootca_public_key.pem -pubout op..

JSencrypt 라이브러리를 이용한 암호화, 복호화

JSencrypt 라이브러리는 RSA 방식으로 데이터를 암/복호화한다 RSA 방식 이란 RSA RSA란? 현재 SSL/TLS에 가장 많이 사용되는 공개키 암호화 알고리즘 전세계 대부분의 인터넷 뱅킹에서 사용 대칭키가 아닌 공개키와 개인키가 한 쌍을 이룸 공개키로 암호화한 내용은 개인키로만 fullfish.tistory.com JSencrypt 라이브러리 다운 주소 JSEncrypt Introduction When browsing the internet looking for a good solution to RSA Javascript encryption, there is a whole slew of libraries that basically take the fantastic work done by Tom..