Postman을 사용하여 OAuth 2.0 인증 요청 보내는 방법
웹 개발의 백엔드 파트는 DB에서 데이터를 가져오거나, 프론트엔드에서 데이터를 받고 다시 데이터를 보내주는 역할을 합니다. 가장 기본적으로는 HTTP의 GET과 POST 메소드를 사용하여 이런 작업을 수행하는데, 이 때 작업의 효율성을 파워풀하게 향상시켜주는 포스트맨이라는 프로그램이 있습니다. 포스트맨을 통해 access token을 받아 로그인을 하는 방법에 대해 알아보도록 하겠습니다.
다양한 사용자들이 접속하는 웹 개발을 진행하다보면 게시글 작성 시간, 접속 시간, 댓글 작성 시간 등 시간과 관련해서 처리해야 하는 작업들이 존재합니다. 기본적으로 DB서버에서 제공하는 NOW()같은 기능을 사용해도 되지만, 사용자가 읽기에도 직관적이며 내가 원하는 시간이 출력되도록 돕는 moment.js 모듈에 대해 알아보겠습니다.
Connection lost: The server closed the connection 에러 해결하기
Node.js와 mysql, AWS EC2, S3, Nginx 등을 연동하여 백엔드 작업을 하고있는데 가끔씩 'Error: Connection lost: The server closed the connection.' 이라는 에러 로그가 뜨면서 웹 사이트에 접속이 되지 않을 때가 있습니다. 구글링을 통해 왜 이런 에러가 발생하는지, 어떤 방식으로 해결 할 수 있는지에 대해 알게 된 내용을 아래에 적어봅니다.
req 객체와 res 객체, 그리고 res.send와 res.json의 비교
node.js express를 사용하는 데에 있어서 가장 기본적인 것은 req객체, res객체, express()함수를 사용하는 것입니다. 하지만 매번 까먹곤 하는 내용이어서 Express 공식 홈페이지를 참고하여 정리 해 보았습니다. req.body는 POST 정보를 가집니다. 요청 정보가 url에 들어있는 것이 아니라 Request의 본문에 들어있기 때문입니다.
이전 포스팅에서는 SSL 인증을 받고 이를 도메인에 연결한 뒤 node.js 내 app.js에서 http 접속을 강제로 https로 리다이렉션 하는 방법에 대해 알아보았습니다. 이번에는 nginx에서 https 리다이렉션을 구현하는 방법에 대해서 알아보도록 하겠습니다.
https에 붙는 's'는 Secure Socket Layer를 의미하는데 이를 줄여서 SSL이나 TLS(Transport Layer Security)라고 부르며 SSL/TLS인증을 받아야 자신의 웹 사이트를 공격자로 부터 더 안전한 사이트로 만들 수 있습니다.
저번 AWS ACM 포스팅에서는 Route53과 AWS EC2를 사용하고 있는 내 서버에 ACM을 통해 SSL 인증서를 발급받는 방법을 알아보았습니다. 이번 포스팅에서는 발급받은 SSL인증서를 ELB라는 것을 이용해서 비교적 쉽게 서버에 적용하는 방법을 알아보도록 하겠습니다.
로그인을 올바르게 한 사용자만이 글을 작성 할 수 있고, 소유자만이 글을 수정 및 삭제를 할 수 있도록 Node-Express와 MySQL을 활용하여 구현 해 보도록 합시다. 저는 request 객체에 user라는 값이 담겼는지 확인하는 함수와 로그인 유저와 글 생성 저자가 같은지 판단하는 함수를 만들었습니다.
저는 로그인, 회원가입, 인증 기능을 구현하기 위해 express-session, passport.js (local strategy)를 사용하고 있습니다. 이를 위해서는 session store를 만들어야 하고 그래서 mysql을 session store로서 사용하려 합니다. 그렇다면 mysql을 session store로 사용하기 위해서는 어떻게 해야 할까요?
S3는 아마존 웹 서비스에서 제공하는 서비스 중 하나입니다. 풀어서 보면 Simplet Sotrage Service라는 의미를 가지고 있습니다. 즉, 어떠한 정보를 저장하는 서비스라는 말인데 그냥 쉽게 생각하면 파일을 저장하는 서비스라고 말할 수 있습니다.
mysql 데이터베이스를 이용한 글 읽기, 생성, 수정, 삭제가 가능한 게시판을 구현하기 위해서는 사용자가 작성하는 텍스트 정보들이 데이터베이스 서버 내 전달되어야 하고, 그러기 위해서는 데이터베이스에 테이블을 어떤 형태로 만들지 미리 모델링을 해놓아야 합니다.
Express 파일 업로드를 위한 multer 모듈의 사용
사용자가 업로드한 파일을 우리 서버컴퓨터의 원하는 디렉토리에 저장하는 기술을 express가 기본적으로 제공하고 있지는 않기 때문에 multer라는 모듈을 설치하여 이를 처리해야 합니다. npm install --save multer 명령어를 통해 우리 프로젝트에 multer모듈을 설치 해 줍시다.
Express-generator로 생성된 app.js 파일 알아보기
Express-generator로 생성한 웹 애플리케이션 프로젝트의 app.js 파일을 살펴보면 40줄 정도의 코드가 있습니다. 오늘은 이 코드들이 각각 무엇을 의미하는 지에 대해 공부 해 보도록 하겠습니다. 일단 먼저 아래에 app.js 파일의 소스코드를 첨부하였습니다.
EC2 인스턴스와 github private repository 연동시키기
자신이 제작하고 있는 웹 애플리케이션을 버전 관리 시스템으로 관리하고 싶다면, 자신이 사용하는 컴퓨터의 원하는 디렉토리 내에서 git clone명령어를 사용하여 github와 연동이 가능합니다.
AWS의 EC2 인스턴스를 서버 컴퓨터로 사용하는 경우에, 혼자 개발을 진행하는 것이 아니라 여럿이 한 가지 프로젝트 개발을 진행하고 있다면 그 인스턴스에 서버를 관리하는 팀원 모두가 접근이 가능해야 합니다.
nginx가 어떻게 동작하는지에 대한 설정은 conf라는 확장자 명을 가진 설정파일 내에 기술되어 있습니다. 컴파일을 통해서 설치한 경우라면 /usr/local/nginx/conf 에, apt-get을 이용해서 우분투에 설치한 경우는 /etc/nginx에 위치한다고 합니다.
웹 애플리케이션을 잘 동작하도록 만드는 것도 중요하지만 그보다 더 중요한 것은 내가 만든 웹 애플리케이션을 이용하는 사용자들의 개인정보가 익명의 공격자에 의해 유출되지 않도록 보호하는 것 입니다. 개인정보를 해킹하는 공격 방법은 무수히 다양하지만 그 중 가장 기본적인 bcrypt에 대해서 알아보도록 하겠습니다.
로그인과 같은 인증 기능을 구현하기 위해서 직접 구현하는 것이 아니라 다른 개발 회사들이 구현한 인증방법을 우리가 빌려 사용 할 수 있습니다. 이 때 필요한 것이 passport.js입니다. 물론 이외에도 더 다양한 미들웨어가 존재하지만 passport가 가장 보편적으로 사용되는 미들웨어입니다.
쿠키가 등장하면서 웹이 이전의 통신 내용을 기억할 수 있게 되었습니다. 덕분에 개인화나 인증에 대한 발판이 만들어 졌지만 쿠키를 이용해서 인증을 이용하는 것은 매우 위험한 일입니다. 그래서 인증 기능을 구현할 때 쿠키가 아닌 다른 방법이 필요하게 되었고 session이 생겨났습니다.
Cookie를 제대로 이해하기 위해서는 먼저 HTTP에 대해서 알고있어야 합니다. HTTP는 Hyper Text Transfer Protocol의 약자로 서버와 클라이언트간에 요청/응답 관계에 대한 통신 규약을 말합니다. HTTP는 크게 request와 response를 위한 메세지로 구분되어 있습니다. HTTP는 눈에 쉽게 보이지 않는 추상적인 개념이기 때문에 쉽게 파악하기 위해서 크롭 개발자 도구를 활용해서 학습해 보도록 하겠습니다.
Express에서 중요한 기능 두 가지를 꼽으라고 하면 하나는 Route이고 하나는 미들웨어 입니다. 다른 사람이 만든 부품을 내 웹 페이지 구현을 위해 사용하는 방법 중 하나가 미들웨어입니다. Express홈페이지에 들어가면 다양한 미들웨어를 확인 할 수 있습니다.
Node.js 를 기반으로 하는 프레임워크는 다양하게 있지만 그 중 가장 보편적으로 사용되는 것이 Express입니다. Express를 기반으로 하여 웹 페이지를 만들어 보도록 하겠습니다. 그러기 위해서는 먼저 npm, node js, pm2 같은 기본적인 프로그램이 설치되어 있어야 합니다.
이전 포스팅에서 소개하였던 Create / Read / Update / Delete에 대해서 알아볼 차례입니다. 그 중에 Create와 Read가 제일 중요하다는 것을 기억해 주시고 MySQL에서는 어떻게 구현하는지 아래에서 살펴보도록 하겠습니다.
스프레드 시트와 데이터베이스는 둘 다 표의 형태로 정보를 출력 할 수 있습니다. 또한 정보에 대해서 ID 순서대로 정렬, 날짜 순 정렬 등 편리한 기능들이 존재합니다. 하지만 스프레드 시트는 버튼을 클릭하는 것을 통해 데이터를 제어하는 반면, DB는 SQL이라는 언어를 이용해서 데이터를 제어합니다.
여러가지 일이 있을 때, 하나를 완료해야 다음 일을 시작하고, 또 다음 일을 완료해야 다음 일을 시작하는 것을 '동기'라고 합니다. 이와는 달리 여러가지 일이 있을 때 오래 걸리는 일을 다른 사람에게 맡겨놓고 끝나면 자신에게 알리도록 한 뒤, 자신은 바로 다음 일을 시작하는 것을 '비동기'라고 합니다.
WEB은 크게 웹 브라우저와 웹서버로 나누어 볼 수 있습니다. 웹 브라우저에 주소를 입력해서 서버에 요청을 하면, 웹 서버는 주소에 따른 요청을 찾아서 응답해주는 관계에 있습니다. Node.js는 기본적으로 웹 서버를 내장하고 있기 때문에 웹 서버의 역할로서 활용할 수도 있습니다.