본문 바로가기

분류 전체보기

[Node.js] express static folder 지정하기 1. 서론 처음 내가 Node.js로 웹사이트를 개발할 때 로컬에서 html 파일을 브라우저로 켰을 때는 css, js, image 파일들이 모두 제대로 적용됐는 데, node.js로 html 파일을 구동하면 아무것도 적용되지 않는 것이 너무 당황스러웠다. 뭔가 잘못된 것인가 하다가 로컬에서 html 파일을 구동할 때의 static files(css, js, image 등)와의 상대 경로와 node.js 서버를 사용하여 구동할 때의 상대 경로가 전혀 다르다는 것을 인지했다. 이 것을 해결하기 위해 static folder를 지정할 수 있고, 서버에서는 해당 static folder에 접근해서 static files를 가져온다. 따라서, html 파일을 작성할 때도 해당 url로 static files(c.. 더보기
[Node.js] express cors 사용하기 1. 서론 리버스 프록시 서버로 NGINX를 두고 한 워크스테이션에서 Swagger와 node.js 서버를 함께 구동한 적이 있다. Swagger의 포트를 8085로 지정하고 node.js 서버는 443번으로 지정했는 데, CORS 에러가 발생해서 Swagger 페이지에서 샘플로 작성한 request를 node.js로 보낼 수 없었다. 그때 처음으로 CORS가 무엇인지 알게 됐다. 따라서, 해당 내용을 정리해두기 위해 CORS란 무엇인지, 그리고 node.js에서 문제를 해결하기 위해 어떻게 해야 하는지 포스팅을 작성하겠다. 2. CORS(Cross-Origin Resource Sharing)란 무엇인가? CORS란 자신이 속하지 않은 다른 도메인, 다른 프로토콜, 혹은 다른 포트에 있는 리소스를 요청하.. 더보기
[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.. 더보기