본문 바로가기

분류 전체보기

(153)
10-1. 검색 (Searching): 파이썬 자료구조와 알고리즘 검색 알고리즘은 배열이 정렬되어 있는 경우 순차 검색 (sequential search) 를 흔히 사용하며 정렬되어 있지 않은 경우 이진 검색 (binary search) 을 많이 사용한다. 해시 테이블은 보조 메모리 공간을 사용하지만, 키를 이용하면 O(1)에 원하는 값을 검색할 수 있다. 정렬되지 않은 배열 검색 순차 검색 순차 검색 (sequential search) 은 아주 당연히도 순차적으로 배열을 돌면서 해당하는 항목을 검색하는 것이다. 최선의 경우 시간 복잡도는 O(1) 이며, 평균은 O(n/2), 최악의 경우는 O(n)이다 (굉장히 당연히도). 만약 리스트에 검색하려는 항목이 없다면 최악/최선/평균 모두 O(n)이다. def sequential_search(seq, n): for item ..
Express - 미들웨어 (Middleware) 미들웨어 기본 미들웨어는 익스프레스의 핵심이다. 미들웨어는 요청과 응답의 중간에 위치한다 하여 미들웨어라고 불린다. 후에 다룰 라우터와 에러 핸들러 또한 미들웨어의 일종이며, 미들웨어가 곧 익스프레스의 전부라고 해도 과언이 아니다. 미들웨어는 요처오가 응답을 조작하여 기능을 추가하기도 하며 나쁜 요청을 걸러내기도 한다. 미들웨어는 app.use와 함께 사용된다. app.use(미들웨어) 꼴로 사용된다. 저번에 만들었던 서버에 미들웨어를 연결해보자. const express = require('express'); const app = express(); app.set('port', process.env.PORT || 3000); app.use((req, res, next) => { console.log('..
Express - 익스프레스 프로젝트 시작하기 (Start Express Project) 익스프레스는 웹 서버 프레임워크이며, Node.js를 기반으로 구동되는 웹 서버 프레임워크이다. 익스프레스는 http 모듈의 요청과 응답 객체에 추가 기능들을 부여한다. 또한, 코드를 분리하기 쉽게 만들어 관리하기도 용이하다. 그리고 더 이상 if 문으로 요청 메서드와 주소를 구별하지 않아도 된다. 이제 익스프레스 프로젝트를 시작해보자. 먼저 learn-express 라는 폴더를 만들고, package.json 파일을 생성하여 정보들을 입력해준다. npm init으로 해도 좋다. 그 후, express와 nodemon을 설치해주자. nodemon은 개발용 패키지로 설치해주는게 좋다. 그 후, package.json의 항목 중 scripts의 start 항목에 nodemon app이라는 명령어를 입력해주자..
Node.js - 노드 패키지 매니저 (Node Package Manager, npm) 노드 패키지 매니저 기본 사용법 (패키지 설치) 노드의 패키지 매니저인 npm (Node Package Manager) 에 대해 알아보자. 먼저 패키지의 관리를 알아보자. 패키지의 관리는 package.json 이라는 파일에서 한다. 서비스에 필요한 패키지를 하나씩 추가하다 보면 일일이 관리하기 어려워질 수도 있다. 또한 패키지는 버전마다 그 기능이 달라질 수 있다. 따라서 패키지의 버전을 어딘가에 기록해두어야 한다. 따라서 노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json부터 만들고 시작해야 한다. npm은 이를 만드는 명령어 (npm init) 를 제공한다. 콘솔에 npm init을 쳐서 package.json 파일을 만들어보자. npm init을 입력하면 여러 정보들을 입력..
Node.js - 클러스터 (Cluster) cluster 모듈은 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈이다. 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있으므로 요청이 많이 들어올 시 병렬로 실행된 서버의 개수만큼 요청이 분산되게 할 수 있다. 즉 서버에 무리가 덜 가게 된다. 예를 들어 코어가 8개인 서버가 있을 경우 노드는 기본적으로 코어를 하나만 활용한다. 그러나 cluster 모듈을 설정하여 코어 하나당 노드 프로세스 하나가 돌아가게 할 수 있다. 성능이 꼭 8배가 되진 않으나 하나만 사용할 때에 비해선 당연히 성능이 개선된다. 그러나 메모리를 공유하지 못한다는 단점이 있다. 이 경우 레디스 등의 서버를 도입하여 해결할 수 있다. 아래와 같은 server1.js 파일을 만들어 클러스..
Node.js - 쿠키와 세션 (Cookie and Session) 쿠키에 관한 내용은 아래 글을 참고한다. https://lgphone.tistory.com/65 쿠키와 세션 클라이언트에서 보내는 요청에는 큰 단점이 존재한다. 바로 누가 요청을 보내는지 모른다는 것이다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있다. 그러나 여러 컴퓨터가 � lgphone.tistory.com 아래와 같은 코드를 작성하여 노드로 실행해 준다. const http = require('http'); http.createServer((req, res) => { console.log(req.url, req.headers.cookie); res.writeHead(200, { 'Set-Cookie': 'mycookie=test' }); res.end('Hello Cookie..
Web - REST REST란 REpresentational State Transfer의 줄임말이며, 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 가리킨다. 일종의 약속과 같은 것이다. REST API에는 많은 규칙들이 있는데, 이를 전부 행하기는 현식적으로 어렵다. 주소는 의미를 명확히 전달하기 위해 명사로 구성된다. 예를 들어 /user 는 사용자 정보에 관련된 자원을 요청하는 것일 것이며, /post 는 게시글에 관련된 자원을 요청하는 것일 것이다. 그러나 단순히 명사만 있다면 당연히 어떤 동작을 행하는지 어려울 것이다. 이를 위하여 HTTP 요청 메서드라는 것을 사용한다. 메서드 중 자주 사용되는 것들은 아래와 같다. GET: 서버 자원을 가져올 때 사용 POST: 서버에 자원을 등록할 때 사용 PUT..
Web - HTTP 상태 코드 (HTTP Status Code) 200, 500, 404 등의 코드를 본 적이 있을텐데, 이는 HTTP 상태코드이다. 대표적인 상태코드들은 아래와 같다. 2XX: 성공을 알리는 상태 코드. 대표적으로 200 (성공), 201 (작성됨) 이 많이 사용된다. 3XX: 리디렉션 (다른 페이지로 이동) 을 알리는 상태 코드. 어떤 주소를 입력했는데 다른 주소의 페이지로 넘어갈 때 이 코드가 사용된다. 대표적으로 301 (영구 이동), 302 (임시 이동) 가 있으며, 304 (수정되지 않음) 는 요청의 응답으로 캐시를 사용했다는 뜻이다. 4XX: 요청 오류를 나타낸다. 요청 자체에 오류가 있을 때 표시된다. 대표적으로 400 (잘못된 요청), 401 (권한 없음), 403 (금지됨), 404 (찾을 수 없음) 등이 있다. 5XX: 서버 오류를..