본문 바로가기

node.js

[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을 예시로 들었지만 다른 언어의 서.. 더보기
[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.. 더보기
[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.. 더보기
[Node.js] express 사용하기 1. 서론 node.js를 서버로 사용하는 경우 가장 표준으로 인식되는 express.js에 대해 알아보도록 하자. 사실 크게 어려운 부분은 없으며, Restful API를 개발하기에 매우 간편하다. 2. 환경 설정 기본 전제 사항 당연히 node.js는 설치돼있다고 가정한다. 혹시 설치하지 않은 분은 여기를 클릭해서 설치하세요. 우선 폴더를 하나 만들어 node.js 개발 환경을 구축하도록 하자. # 폴더 생성 및 열기 mkdir express_practice cd express_practice # package.json 초기화 npm init -y # http, express 모듈 설치 npm install http express 3. Hello world! 출력하기 가장 간단한 Hello world.. 더보기
5. WebRTC 구현하기(1:N SFU) WebRTC 이론부터 구현까지 1. WebRTC 정리하기 2. WebRTC 구현 방식 3. WebRTC 구현하기(1:1 P2P) 4. WebRTC 구현하기(1:N P2P) 5. WebRTC 구현하기(1:N SFU) 6. WebRTC 성능 비교(P2P vs SFU) 1. 서론 지난 시간에는 WebRTC를 이용한 1:N P2P 통신에 대해서 포스팅했다. SFU 방식에 대해 포스팅을 할까 말까 고민을 했는 데 그래도 하는 게 낫지 않을까 싶어 이렇게 글을 남긴다. SFU는 Media Server의 한 종류로 그에 대한 설명은 여기를 눌러 지난 포스팅을 확인해보기 바란다. 미디어 서버는 Kurento와 mediasoup 등을 이용하여 상용화 단계에서 사용한다. 하지만 글쓴이는 이론을 바탕으로 미디어 서버, 그중.. 더보기