본문 바로가기
  • 포르쉐타고싶다

인포테인먼트 - development82

[node.js] dotenv 사용법 및 적용 및 에러 해결 1. dotenv 실행 순서 1) dotenv를 설치한다. npm i dotenv —save 2) 보안이 담긴 값들을 담은 .env파일을 만든다 3) 서버 실행 시 가장 먼저 실행되는 파일(index.js나 app.js)에 env를 가져오는 명령어를 입력(두가지 상황) (1) 단일 상황에 대한 보안값을 담은 단일 파일 .env이면 require('dotenv').config(); (2) 몇가지의 상황(개발 or 배포)에 대한 보안값을 담은 몇개의 파일로 나뉘어 있다면(prod.env, dev.env)ㅋ if(process.env.NODE_ENV === 'production') { require('dotenv').config({ path: path.join(__dirname, '/env/server.env.. 2020. 4. 10.
[MySQL] Can't connect to local MySQL server through socket '/tmp/mysql.sock' 에러 해결 MySQL에 접속하려고 하는데 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 이런 오류가 발생하는 것을 볼 때가 있다. 이 문제의 원인은 경험상 1. MySQL을 재실행한 지 얼마 안되어서 부팅이 안 되어 있을 때, 2. MySQL이 실행되고 있지 않을 때 따라서 localhost:~/ brew services restart mysql 로 재실행 한 것을 조금 대기하면 들어가 질 수 있고 MySQL이 실행되고 있지 않다면 localhost:~/ brew services start mysql 로 MySQL을 재실행 시켜주면 되겠다. 2020. 4. 8.
[linux] MySQL 포트 변경하기 자신의 운영체제에 MySQL을 설치하고 실행하면 기본적으로 3306의 포트번호가 할당된다. 하지만 여러개의 mysql db를 관리해야 하는 시점이 오면 mysql 서버에 여러개의 포트를 할당해야 한다. 예를 들어 필자는 서버 하나를 운영하는 동안 이 서버를 배포하고 난 뒤 같이 배포된 DB가 아닌 지속적인 백그라운드 개발, 테스트를 진행하기 위해 또 다른 테스트DB를 만들고 데스크톱과 연결해야 하는 상황이 생겼다. (이 과정에서 dotenv를 이용하여 같은 서버에 대해 상황에 맞게 DB환경변수를 전환할 수 있는 환경을 구현하였다. 이 부분도 다음 포스팅에서 설명하려고 한다.) 기존에 로컬과 3306으로 연결되어 있었던 MySQL 데이터베이스는 AWS RDS에 올려놓은 DB서버였고 테스트 DB는 내 데스크.. 2020. 4. 7.
[MySQL] 프로시저를 사용한 cursor loop fetch 적용(sql의 for문) DB와 서버를 만지다 보면 DB에서 가져온 데이터 목록에 대해서 일괄처리, 그 중 반복문을 돌려 처리를 해야 하는 상황이 생긴다. 그런 상황은 단순한 상황과 복잡한 상황으로 나눠서 보자 예를 들어보자 먼저 단순한 상황을 생각해 보면 쿼리를 통해 db에서 가져온 목록들에 대해 for문을 돌려 특정 컬럼에 대해 분류를 해서 응답을 하는 경우가 있겠다. 이 같이 단순한 경우는 1. 쿼리문(DB)안에서 ORDER BY를 이용해 분류하고 서버에서 어느정도 분류된 데이터를 for문으로 돌려 나누는 방법 2. 쿼리문(DB) 단계에서는 다른 분류 없이 단순 select문을 통해 서버로 가져온 다음 서버단에서 for문을 통해 분류하는 방법 으로 나눌 수 있을 것이다. 이번엔 복잡한 상황을 생각해보자 예를 들어 스타벅스 .. 2020. 4. 6.
[알고리즘] DATABASE에서 여러 테이블을 JOIN해서 가져온 데이터배열 중복 제거, 정리(2) 두가지 프로퍼티를 재정리하기위해 데이터를 가져오면 훨씬 더 많은 중복되는 객체들이 나온다. 왜냐하면 프로퍼티의 개수만큼 객체가 곱해서 나오기 때문이다. (디비에서 가져오는 배열 크기 = 묶고싶은 객체 한덩어리 x 프로퍼티1 개수 x 프로퍼티2 개수) 하지만 전 포스팅에서 소개했던 방식을 그대로 추가된 프로퍼티에 대해 한 번씩만 더 써주면 된다. 먼저 상황을 가정해보자 - 우리가 원하는 배열 : A [ { board_idx : 1, comment : "안녕하세요", tag : [ 1, 2 ], img_url : [ "http://aaaa.aaaaa.aaaaaa", "http://bbbb.bbbbb.bbbbbb", ] }, { board_idx : 2, comment : "안녕히계세요", tag : [ 3,.. 2020. 4. 2.
[linux] zsh의 .zshrc 변경 후 변경사항 저장 mac의 Catalia 의 기본 쉘이 zsh로 변경되었다. 따라서 mac의 터미널의 기본 PATH에 경로를 저장하기 위해서는 vim ~/.zshrc 를 입력하여 환경설정 창으로 들어간 뒤 export PATH="[경로명]:$PATH" 를 입력하고 저장하고 빠져나온다. 이때 가장 중요한 점! 아직 변경사항이 적용되지 않은 것이다!!!! 이 변경사항을 적용하려면 source ~/.zshrc 를 입력해줘야 한다. 2020. 3. 31.
[MySQL] Insert 할 때 특정 컬럼만 select 보통의 INSERT문은 INSERT INTO [TABLE] (COLUMN1, COLUMN2, COLUMN3) VALUES (VALUE1, VALUE2, VALUE3) 의 형태로 사용된다. 하지만 본인은 쿼리문을 작성 중, 다른 테이블에서 어떠한 조건을 가진 레코드에 대해서, 해당 인덱스에 대해서만 다른 테이블에 그에 대한 정보를 insert해야할 일이 생겼다. 그리고 INSERT해야하는 값 중에는 다른테이블의 값이 아닌 일반 상수도 포함되어야 한다. 예를 들어, 학생들 중 점수가 90점이 넘은 학생들만 장학생 테이블에 추가한다고 해보자 먼저 학생 테이블 [STUDENT]를 보면 STUDENT_IDX STUDENT_NAME STUDENT_SCORE 1 철수 92 2 영희 87 3 민수 95 그리고 점수가 .. 2020. 3. 31.
[node.js] MYSQL 쿼리문 여러개(다중쿼리) 전송방법 node.js와 MYSQL을 연결하는 가장 기본적인 방법은 데이터베이스 config파일을 만든 뒤 const mysql = require("promise-mysql"); const dbConfig = { host : '[호스트 이름]', port : 3306, user : '[유저명]', password : '[비밀번호]', database : '[스키마 명]' } module.exports = mysql.createPool(dbConfig); 이렇게 작성을 해놓고 이 파일을 가져다 connection파일을 만드는 것이다. 이 connection파일을 사용하면서 db와 데이터를 주고받을 때 여러번 주고받는것은 효율성면에서 떨어진다. 이를 반대로 말하면 한 번 주고받을 때 많은 정보를 주고받는것이 효율적이.. 2020. 3. 30.
[nginx] DNS는 뭐고 도메인은 뭐고, 또 호스트는 뭐야 dns, 도메인, 호스트... 헷갈린다 이 참에 이제 절대 안 헷갈리도록 정리해보려고 한다. 호스트 네임 : 컴퓨터의 이름입니다. 도메인 네임 : 컴퓨터 그룹의 이름입니다. 예를 들어... 호스트 네임은 사람의 이름으로, 도메인 네임은 사람의 성 이라고 보면 된다 [김철수]라는 이름에서는 성은 [김]이고 이름은 [철수] 이렇게 구분할 수 있다. 또 [이영희]라는 이름에서는 성은 [이], 이름은 [영희]라고 할 수 있다. 여기서 [김], [이]와 같은 성을 도메인 네임으로, 호스트 네임은 [철수], [영희]로 이해하시면 됩니다. 직접 dns에 적용해보면 example.com 이라는 도메인을 구매했다고 하면 그 도메인을 이용해 웹서버, api서버를 지정할 수 있는데 api.example.com이라는 레코드를.. 2020. 3. 30.
[nginx] https 설정시 프록시 - https 상호관계 및 정리 1. 먼저 https를 사용하는 이유 : - http만 사용하면 그 사이트에 접속할 때 그 사이트가 CA로부터 검증된 사이트인지 모른다. - 보통의 사람들은 비슷한 아이디, 비밀번호를 여러 사이트에 공유하기 때문에 악의의 B 사이트가 원래의 A 사이트와 비슷하게 만들어서 도메인을 만들고 사용자가 A사이트인줄 알고 B사이트에 계정을 입력했을 때 그 유저의 또 다른 많은 계정이 털리는 것과 같은 결과를 초래한다. - 그래서 그 사이트가 정말 유저가 원하는 검증된 사이트임을 https가 알려주는 것이다. - 사이트 도용 뿐만 아니라 그 계정을 입력한 뒤 서버로 정보를 보낼 때 그 중간에 해커가 가로챌 염려가 있다. - https에서는 클라이언트(브라우저)와 웹서버 사이에 정보교류에서 그 데이터들을 암호화하기 .. 2020. 3. 29.
[nginx] 서버에 https 설정 시 자동 Let's encrypt 인증서 갱신 및 자동 nginx 리로드(Reload) https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx Certbot - Ubuntuxenial Nginx a project of the Electronic Frontier Foundation certbot instructions To use Certbot, you'll need... comfort with the command line command line ...and an HTTP website HTTP website that is already online already online with an open port 80 port 80 ...which i certbot.eff.org 위의 certbot의 instruction을 따라하면 자동으로 let's.. 2020. 3. 28.
[nginx] nginx 설정 - server_name 프록시 설정 : server{} 원래있던 server_name _; 는 server_name 도메인이름 처럼 바꿔주게 되는데 방문자가 어떤 주소로 들어오냐에따라 해당 도메인 이름을 가진 server{...} 블록이 처리한다. 요청된 도메인을 처리하는 server_name을 가진 블록이 없다면, 디폴트 서버(default_server)로 지정된 블록이 처리합니다. 2020. 3. 28.
[nginx] 포트포워딩, 그리고 리버스 프록시(Port Forwarding, and Reverse Proxy) 1. 배경 포트포워딩은 nginx의 가장 기본적인 기능이다. 한 웹서버 안에서는 한 가지의 서버만 존재하지는 않는다. api서버와 웹 페이지 서버도 있을 수 있고, 랜딩페이지 서버도 같이 있을 수 있고.. 관리자 페이지 서버 등등 여러개의 서버가 같은 웹서버에 같이 있을 수 있다. 그리고 이 서버들은 각각 다른 포트를 갖고있다.(localhost:3000, localhost:3001, ...) 웹 서버는 어떻게 같은 도메인을 요청했을 때 이를 알아채고 적절한 서버를 선택하여 보내줄 수 있는 것일까 바로 nginx의 포트포워딩(port forwarding)기능 덕분이다. 2. 개념 Port Forwarding : 포트 인도 즉, 서버에 들어온 요청을 다시 내부의 특정 포트로 보내주는 것이다. (특정 포트 .. 2020. 3. 28.
[nginx] sites-available에 만든 파일 sites-enabled에 include시키기 ubuntu@:~/ cd /etc/nginx /etc/nginx의 경로에서 nginx에 대한 기본적인 설정을 진행할 수 있다. 그 중 프록시 관련 설정을 할 때 /etc/nginx/sites-enabled 라는 폴더에서 직접적으로 설정이 가능하고 유저는 저 폴더에 있는 설정파일을 직접적으로 수정하지 않고 /etc/nginx/sites-available 의 폴더에서 여러 설정파일들을 생성한 뒤 그 파일들 중 원하는 설정을 선택적으로 sites-enabled폴더에 동기화해서 적용하는 symlink 기능을 이용한다. 다음은 sites-available에 만든 설정파일을 sites-enabled에 symlink 시킬 수 있는 명령어이다. 먼저 sites-available에 'proxy-setting1'이라는 설.. 2020. 3. 26.
[nginx] nginx에 프록시, 로드밸런싱 설정하기 1. 프록시 설정 한 웹 서버 안에는 여러 서버가 있을 수 있다. 그 각각의 서버들도 자기의 서버가 있고 웹서버 안에 있는 이상 메인도메인(퍼블릭 ip) 안에서 프라이빗 ip를 가지고 있는 것이다. 프록시 설정을 하면 퍼블릭 ip를 거친 요청만이 프라이빗 ip로의 요청 마무리를 통해 요청을 통한 원하는 응답을 가질 수 있다. 클라이언트가 서버의 자원을 자기 맘대로 쥐락펴락 못하려면 웹서버의 퍼블릭 ip, 웹 서버 안에서의 프라이빗 ip 를 모두알면 안된다. 클라이언트는 퍼블릭 ip만 알고있는 상황에서 요청을 하고, 이 퍼블릭 ip를 거치는 과정에서 여러 보안적 이슈를 해결할 수 있다. 그 다음에 프록시의 역할, 즉 요청하는 프라이빗 ip로의 연결을 대리(proxy)하는것이 바로 프록시 서버의 역할이다. .. 2020. 3. 24.