개발 [Node.js] mysql을 async/await로 처리하기 1. 서론 node.js 에서 콜백 지옥을 피하기 위해서는 Promise 또는 async/await를 써야 한다. 이때 Promise를 선택하게 되면 다시 Promise chain의 콜백 지옥에 빠지게 된다. 그래서 대부분의 사람들이 사용하는 처리 방식이 async/await이다.(물론, Promise와 함께 사용하는 경우도 많다.) mysql도 이러한 async/await 방식으로 구현할 수 있다. 다만, 사용하는 모듈은 mysql 모듈이 아니고, mysql2 모듈이다. 다른 모듈이므로 반드시 mysql2를 설치해야한다. mysql은 async/await 방식 사용이 불가능하다. 만약, async/await에 대한 이해가 아직 부족하다면 이 포스팅을 읽고 오기 바란다. 2. 환경 설정 전제 조건 mys.. 더보기 [Node.js] nodemailer 사용하기 1. 서론 nodemailer는 node.js 서버를 이용하여 mail을 보낼 수 있게 해주는 모듈이다. 대체적으로 node.js 서버를 구현할 때 개인정보 인증으로 이메일 인증을 진행할 때 많이 사용한다. 글쓴이도 사용자 회원가입 후 이메일 인증 그리고 비밀번호 변경 시에 nodemailer를 이용하여 이메일 인증 기능을 구현한 적이 있다. nodemailer는 gmail 계정이 존재해야 사용할 수 있다.(이메일을 보낼 계정이 있어야 하므로) 구현 자체는 어렵지 않으나 gmail 계정의 설정을 변경해야 한다. 2. Gmail 계정 설정 전제 조건 Gmail 계정이 존재한다고 가정한다. nodemailer의 계정으로 사용할 계정으로 google 로그인을 진행한 후 아래의 첫 번째 링크를 클릭하여 액세스를.. 더보기 [Docker] docker-compose (node.js, mysql) 실행 순서 동기화 1. 서론 대부분의 경우 AWS의 RDS나 워크스테이션의 DB 등을 사용하여 안정적인 DB 환경을 구축하지만, 테스트 용도나 간단한 프로젝트에서 DB를 구현할 때는 Docker를 이용할 수 있다. 이러면 MySQL의 데이터가 안정적이지 않다고 하는 사람들도 있지만, 그 문제는 volume을 연결하는 방식으로 해결할 수 있다. 그런데 막상 docker-compose로 node.js 서버와 mysql을 연결해보면 연결 오류가 나는 걸 알 수 있다. 그 문제는 바로 실행 순서 때문인데, mysql이 node.js 서버보다 느리게 구동되기 때문이다. 이를 위해 node.js가 mysql보다 느리게 구동되도록 동기화하는 작업이 필요하다. 이 포스팅에서는 node.js와 mysql을 예시로 들었지만 다른 언어의 서.. 더보기 [NGINX] Ubuntu18.04에서 letsencrypt HTTPS 환경 구축 1. 서론 개발자들이 무료로 HTTPS 환경을 사용할 수 있게 letsenrypt라는 비영리 사이트에서 SSL/TLS 인증서를 제공해준다. SSL/TLS에 관해서는 다음에 포스팅을 하도록 하자. 간단하게 말하자면 클라이언트와 서버가 해당 웹페이지를 이용해서 정보를 주고받을 때 다른 사람이 패킷을 빼돌려도 어떤 정보인지 알아낼 수 있게 암호화는 방식이다. 구현은 생각보다 매우 간단하다. 이 포스팅은 Ubuntu 환경에 맞춰서 작성한 것이므로 운영체제 별로 다를 수 있다. 2. 구현 전제 조건 개인이 소유한 도메인이 있다고 가정한다. 만약 도메인을 보유하고 있지 않다면 여기를 방문해서 회원가입 후 무료 도메인을 구하기 바란다. 우선은 Ubuntu 환경에 NGINX를 설치한다. sudo apt-get upda.. 더보기 [Docker] Ubuntu:18.04에서 Docker 설치하기 1. 서론 매번 공식 문서를 찾아서 설치하는 게 귀찮아서 블로그에 포스팅한다. 이게 제대로 동작되지 않으면 다시 공식 문서를 확인해서 수정할 예정이다. 혹시나 나처럼 귀찮은 사람을 위한 포스팅이다. 2. 설치 아래의 실행 명령을 순서대로 처리하면 설치가 완료된다. sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get install ca-certificates sudo apt-get install curl sudo apt-get install software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - s.. 더보기 [Node.js] moment 사용하기 1. 서론 node.js는 javascript 기반으로 기본적으로 시간 및 날짜 오브젝트인 Date를 가지고 있다. 하지만 Date 오브젝트를 사용하여 코드를 작성하면 가독성이 떨어지는 경우가 생겨 moment.js를 사용하는 경우가 있다. 물론 성능과 속도 측면에서 보면 moment가 뒤쳐질 수 있으나 경우에 따라서 개발자가 잘 결정해서 사용하는 것이 중요하다. 2. 환경 설정 우선, moment.js를 설치하고 실행할 폴더를 생성하고, 해당 폴더에 package.json 생성 및 moment.js 설치를 진행한다. # 폴더 생성 및 열기 mkdir moment_practice cd moment_practice # package.json 초기화 npm init -y # moment.js 설치 npm i.. 더보기 [Raspberry pi] 부팅 시 프로그램 자동 실행하기 1. 서론 작년에 교차로 보행자 안전 알리미 프로젝트를 개발하면서 일반 교차로 CCTV와 비슷한 사양의 영상 데이터를 실시간으로 얻기 위해 라즈베리 파이를 사용한 적이 있다. 카메라 모듈을 통해 촬영한 데이터를 서버 쪽에 TCP 소켓을 통해 전달했는 데 라즈베리 파이의 전원이 켜짐과 동시에 서버와 TCP 소켓을 연결하고 이미지를 송신하는 부팅 시 자동 실행 기능이 필요했다. 2. 방법 방법은 생각보다 정말 간단하다. rc.local 파일을 수정하는 것이다. sudo vi /etc/rc.local 위의 rc.local파일을 켜면 아래와 같이 기존의 설정들이 기록되어 있다. 여기서 코드의 맨 아랫줄로 가서 exit 0 바로 윗줄에 자신이 실행시키고자 하는 프로그램의 실행 명령어를 작성하면 된다. 여기서 중요.. 더보기 [Node.js] express router 사용하기 1. 서론 node.js의 Restful API들을 모두 한 js 파일에 작성하게 되면 코드를 알아보기가 점점 힘들어진다. 그렇기 때문에 토픽에 맞는 router를 생성해서 path를 지정하면 각 js별로 토픽이 정해져 있어 유지 보수가 더 간단해지고 팀원들 간의 코드 리뷰에도 큰 도움이 된다. 시작하기에 앞서 지난 시간에 포스팅한 코드를 사용할 것이므로 만약 이 포스팅에 먼저 들어왔다면 여기로 가서 지난 포스팅을 간략하게 읽고 오길 바란다. 2. 폴더 구조 우리는 아래의 구조로 간단한 라우터들을 구현할 것이다. 먼저 index.js에서 요청을 받아서 각각의 path에 따라 account.js(전 시간의 rest.js)와 helloworld.js에 요청을 넘겨서 처리할 것이다. 📦express_pract.. 더보기 이전 1 2 3 4 5 6 7 다음