본문 바로가기

분류 전체보기

(153)
Node.js - Passport 모듈 (Passport Module) Passport Passport는 이름 그대로 서비스를 사용할 수 있게끔 해주는 여권 같은 역할을 하는 모듈이다. 회원가입과 로그인은 직접 구현할 수도 있지만, 세션과 쿠키 처리 등 복잡한 작업이 많으므로 검증된 모듈을 사용하는 것이 좋다. Passport는 사용하기 좋은 검증된 모듈이다. 요즘에는 서비스에 로그인할 때 아이디와 비밀번호 이외에 구글, 페이스북, 카카오 같은 기존의 SNS 서비스 계정을 이용하여 로그인하기도 한다. 이 또한 Passport로 해결할 수 있다. Passport 모듈을 이용하여 자체 회원가입 및 로그인 외에도 카카오톡을 이용해 로그인하는 방법을 알아보자. 먼저 passport 관련 패키지들을 설치한다. > npm install passport passport-local pas..
Web - 세션 기반 인증과 토큰 기반 인증 (Session and Token Authentication) https://lgphone.tistory.com/65 Web - 쿠키와 세션 (Cookie and Session) 클라이언트에서 보내는 요청에는 큰 단점이 존재한다. 바로 누가 요청을 보내는지 모른다는 것이다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있다. 그러나 여러 컴퓨터가 � lgphone.tistory.com 세션에 대한 내용은 위 글을 참고한다. 인증 방식으로는 크게 두 가지가 최근 웹 개발 트렌드에서 많이 쓰인다. 바로 세션 기반 인증과 토큰 기반 인증이다. 두 가지의 차이점과 어떤 상황에서 어떤 인증 방식을 사용하는 것이 좋을지 한번 다뤄보자. 세션 기반 인증 세션 기반 인증은 쿠키를 사용한다. 인증 절차는 다음과 같다. 유저가 로그인을 하면 세션이 서버 메모리에 저..
14. 트리 순회 (Tree Traversal): 파이썬 자료구조와 알고리즘 순회 (Traversal) 란 트리 또는 그래프 같은 연결된 구조에서 객체 (노드) 를 방문하는 데 사용되는 알고리즘이다. 순회 문제는 모든 노드를 방문하는 방법을 찾거나 특정 노드만 방문하는 방법을 찾는 것일 수도 있다. 깊이 우선 탐색 깊이 우선 탐색 (depth-first search, DFS) 란 그래프 또는 트리에서 깊이를 우선하여 탐색하는 알고리즘이다. 그래프의 경우는 방문한 노드를 표시해야 하는데. 그렇게 하지 않는다면 무한 반복에 빠질 수 있기 때문이다. 시간 복잡도는 O(V+E) 이다. V는 도달할 수 있는 노드 수 (vertext), E는 도달한 노드에서 나가는 간선 수 (edge) 다. 깊이 우선 탐색은 후입선출 (LIFO) 구조의 스택을 사용하여 구현한다. 깊이 우선 탐색의 세 가지..
Node.js - 몽구스 (Mongoose, 몽고디비 작업 라이브러리) 몽구스는 노드와 몽고디비를 연동해줄 뿐만 아니라 쿼리까지 만들어준다. 몽고디비 자체도 자바스크립트 쿼리를 사용하긴 하지만 이 라이브러리를 이용하면 더 쉽게 만들 수 있다. 몽구스는 시퀄라이즈와는 달리 ODM (Object Document Mapping) 이라고 불린다. 몽고디비는 릴레이션이 아닌 도큐멘트를 사용하므로 ORM이 아니라 ODM이다. 몽고디비 자체가 이미 자바스크립트인데 왜 굳이 자바스크립트 객체와 매핑하는 것일까? 이는 몽고디비에 없어서 불편한 점들을 몽구스가 보완해주기 때문이다. 먼저 스키마라는 것이 생겼다. 몽고디비는 테이블이 없어 자유롭게 데이터를 넣을 수 있지만, 오히려 이게 독이될 수도 있다. 실수로 잘못된 자료형의 데이터를 넣거나 다른 도큐멘트에는 없는 필드의 데이터를 넣을 수도 ..
mongoDB - CRUD 명령어 (CRUD Commands) 몽고디비의 자료형은 MySQL과는 조금 다르다. 몽고디비는 기본적으로 자바스크립트 문법을 사용하므로 자바스크립트의 자료형들을 따른다. 하지만 추가로 몇 가지 자료형이 더 있다. Date나 정규 표현식 같은 자바스크립트 객체를 자료형으로 사용할 수 있고, Binary Data, ObjectId, Int, Long, Decimal, Timestamp, JavaScript 등의 추가적인 자료형이 있다. Undefined와 Symbol은 몽고디비에서 자료형으로 사용하지 않는다. 추가적인 자료형 중 ObjectId와 Binary Data, Timestamp 외의 다른 것들은 잘 사용하지 않는다. ObejctId는 MySQL에서 기본 키로 쓰이는 값과 비슷한 역할을 한다고 생각하면 된다. 고유한 값을 가지므로 도큐..
13-2. 이진 탐색 트리와 자가 균형 이진 탐색 트리 (Binary Search Tree and Self-balancing Binary Tree): 파이썬 자료구조와 알고리즘 이진 탐색 트리 이진 탐색 트리 (binary search tree) 는 노드를 정렬된 순서로 유지하는 자료구조이다. 이진 트리로 이루어지며, 각 노드에는 값과 두 자식 노드에 대한 포인터가 있다. 또한 선택적으로, 부모 노드의 포인터를 저장할 수도 있다. 각 노드의 값은 왼쪽 하위 트리의 모든 항목보다 크고, 오른쪽 하위 트리의 모든 항목보다 작다. 즉, 노드의 왼쪽 하위 트리에는 노드의 값보다 작은 값의 노드만 존재한다. 노드의 오른쪽 하위 트리에는 노드의 값보다 큰 값의 노드만 존재한다. 왼쪽과 오른쪽 하위 트리 모두 이진 탐색 트리이다. 중복 노드가 없다. 이진 탐색 트리가 균형 트리인 경우, 노드 검색/삽입/삭제에 대한 시간 복잡도는 O(log n) 이다. 이진 탐색 트리 구현 이진 탐색 트리는..
Web - IP, 포트, 그리고 로컬호스트 (IP, Port, and Localhost) IP 주소 IP 주소란 TCP/IP 프로토콜을 사용한 통신을 할 때, 송신자와 수신자를 구별하기 위한 고유의 주소를 말한다. 그리고 인터넷에 연결된 모든 통신망과 그 통신망에 연겨로딘 텀퓨터에 부여되는 고유의 식별 주소를 의미한다. 이 주소는 내부에서 32비스 (4byte) 로 기억되지만, 표기할 때에는 4개의 10진수를 점으로 구분하여 표시한다. loopback이라는 개념이 있다. loopback은 호스트에 할당된 아이피를 의미한다. 즉, 내가 갖고 있는 노트북에서 localhost 또는 127.0.0.1로 서버를 띄울 경우 서버를 띄운 노트북에서만 접속이 가능하다. 핸드폰도 같다. 핸드폰에서 localhost 또는 127.0.0.1로 서버를 띄울 경우 핸드폰에서만 접속이 가능하다. 그러나 사설 IP의..
MERN Stack - MERN MERN이란 무엇인가? MERN은 각각 mongoDB, Express, React, Node.js를 뜻하며, MERN 스택이란 간단히 말하여 이 네 가지 요소를 사용하여 웹사이트를 개발하는 것을 뜻한다. 몽고디비 (mongoDB) 몽고디비는 C++로 작성된 NoSQL 데이터베이스로써, 기본적으로 자바스크립트 문법을 사용한다. Express Express는 웹 프레임워크이다. 웹서버를 개발하기 편리하게 해주는 프레임워크이며, 주로 백엔드를 개발할 때 사용된다. React 리액트는 facebook에서 내놓은 프론트엔드 개발 라이브러리이다. Node.js 노드.js는 서버 사이드 플랫폼으로써, 위에서 Express 와 리액트를 실행할 수 있게 해주는 자바스크립트 런타임이다. 왜 MERN? 그렇다면 왜 하필 M..