우리는 로그인을 통한 사용자 인증을 구현해야 한다. 그런데 왜 인증을 해야할까? 먼저 HTTP의 Stateless 특성을 통해 로그인할때 왜 인증을 해주어야 하는지에 대해 살펴보자. 그리고 쿠키, 세션, 토큰 인증 방식을 비교하고 결국에 왜 토큰 방식 중 JWT가 선택되었는지도 알아보자. HTTP의 두가지 특성 1. connectionless HTTP는 서버와 브라우저간의 연결을 계속 유지하지 않는다는 뜻이다. 서버와 클라이언트 사이의 통신이 끝나게 되면 연결이 끊긴다. 2. stateless 상태를 유지하지 않는다. 첫번째 연결에서의 상태가 두번째 연결까지 유지되지 않는다. 이전 상태가 저장되지 않고 연결마다 갱신된다. 이 때문에 처음 로그인한 상태가 계속 유지가 되지 않는다는 문제점이 발생한다. 요약..
Computer Engineering
오늘의 주제는 Github와 Nginx를 통해 만들어진 무중단 배포 시스템이 정말로 무중단일까?이다. 보통 Nginx로 프로그램을 배포시키고, 반영할 개선사항이 존재하면 Github를 통해 반영시킨 후, pm2를 통해 reload를 하는 방식을 사용한다. 하지만 반영하는 과정에서 서비스가 짧게라도 중단되지 않을까? 진짜로 무중단이 맞을까? 하는 의문이 들었다. 해당 질문은 이직 과정에서 있었던 실무면접에서 들었던 질문으로 면접 당시에는 정답을 모르고 면접 이후에 찾아 알게된 것을 바탕으로 글을 써보려고 한다. ( 그런데 붙었다^_^ 이유가 뭘까.. ) 먼저 pm2를 이용한 무중단 배포관리에 대해 이야기해보자. NodeJS의 프로세스 매니저 PM2 NodeJS는 기본적으로 싱글스레드이다. 멀티코어 시스템을..
자바 스크립트에서는 비동기적인 프로그램을 실행할 수 있는 기능이 있습니다. Promise 및 Async/Await으로 비동기 프로그램을 제어해 봅시다. setTimeout 작업을 예약 비동기로 동작 동시에 여러 작업이 가능함. 흐름이 예측 불가함 시간이 걸리지만 기다리기만 하면 되는 작업 ajax (XMLHtmlRequest 객체를 사용함) Fetch API Node.js (모든 것이 비동기) 비동기 작업의 사용성 문제 콜백 지옥 Promise 비동기 작업 단위 비동기 작업들을 관리 내용은 실행되었지만 결과를 아직 반환하지 않은 객체 3가지 상태 (pending / fulfilled / rejected ) New Promise()를 하는 순간 할당된 비동기 작업이 시작됨 (일단 배를 떠나보냄) Promi..
Rails에는 페이지네이션을 쉽게 구현할 수 있도록 하는 Kaminary gem이 있다. 레일즈 특성상 일일히 페이지값, 전체페이지, 현재페이지.. 등을 넘겨주던 NodeJs개발자에겐 신박했지만.. 아쉽게도 특정 포맷을 벗어났더니 에러가 발생했다. 에러는 아래와 같다. 에러 상황 Kaminary에서 제공하는 pagination 페이지를 클릭했을 경우 기존 action으로 넘어가도록 설계되어 있다. 하지만 나는 ajax를 통해 동적으로 렌더링하고 싶은 뷰가 있었고 그 뷰는 각각의 페이징이 필요하다. 동적 뷰를 나타내기 위해서 나는 액션에서 js.erb를 response하는 방식을 사용했는데 js 렌더링시 에러가 발생했다. (아래는 js로 뷰 렌더링했던 경험 글) https://soohey.tistory.c..