[Node.js] POST 처리하기
body-parserhttp 연결에서 클라이언트는 get과 post 방식으로 서버에 요청을 보낼 수 있다. get 방식은 정보를 조회할때 사용되는데, 이미 app.get() 으로 앞에서도 많이 사용한 적이 있다.post 요청을 처리하는 메서드는 post()가 있다. get과 비슷한 방식으로 처리한다. post는 html DOM의 form을 통해 전달되는데, form을 처리하기 위해 Node.js의 body-parser라는 내장 모듈을 사용한다. body parser는 Express의내장 모듈이기 때문에 따로 설치하지 않아도 된다. 예전에는 설치후 사용해야 했지만 어느 버젼 이후 내장 모듈로 바뀌었다고 한다. 123const bodyParser = require("body-parser");app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: false...
[Node.js] Nunjucks
View Engine - NunjucksNode.js로 응답 페이지를 구성하는 방법은 여러가지가 있다. 그 중 하나는 아래 코드처럼 write()로 html을 하나씩 써주는것이다. 123456789101112131415const http = require("http");http .createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/html;charset=utf8" }); res.write('<!DOCTYPE html>') res.write('<html>') res.write('<head><meta...
[Node.js] Routing과 Middleware
RoutingNode.js의 module.exports는 전역 변수이다. 이 변수를 사용해 Express 프로젝트 또한 모듈화로 깔끔하게 관리할 수 있다.(exports라는 전역 변수도 존재하는데 module.exports와는 다른 개념이니 혼동해서는 안된다) Routing이라는 용어 자체의 넓은 의미는 ‘어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정’이다. Express에는 routing을 도와주는 Router객체가 존재한다. Routing : 어플리케이션 서버에서 경로를 제어하는 동작 예를 들어 관리자가 사용할 페이지의 url의 경우 /admin, /admin/setting, /admin/products 등으로 url을 지정하는게 일반적이다. 그리고 routing을 사용해 /admin으로 시작하는 모든 http 요청을 admin.js 가 담당하도록 특정짓는 것이 Router 객체의 기능이다. 라우터를 모듈별로 관리하면 코드가 훨씬 깔끔해지고...
[Node.js] Express.js
Express.jsExpress란?Node.js로 개발을 할 때 가장 많이 사용되는 웹 프레임워크이다.2020 Node.js popular web framework statistics웹 프레임워크란 웹 서비스를 개발하기 위해 사용되는, 그 이름 그대로 틀이다. 프레임워크 없이도 개발을 할 수는 있지만 프레임워크는 많은 기능이 제공되기 때문에 개발자는 직접적인 서비스 구현에 더 집중할 수 있다. Express는 session 관리나 middleware 관리 등에서 편리한 환경을 제공한다. 미들웨어와 라우터를 사용하면 각각의 기능을 편리하게 구성할 수 있다. 웹 프레임워크에 Express만 있는 것은 아니다. 하지만 Node.js 커뮤니티는 계속해서 커지고 있으며 Express는 그런 Node.js 프로젝트에서 가장 많이 사용되는 프레임워크이다. 자연히 커뮤니티에서 여러 오류 해결법을 찾아볼 수 있어 레퍼런스가 풍부하다고 볼 수 있다! 구조가 이미 정해져있기 때문에 제약이 있다고...
[프로그래머스] Lock and key
문제 링크 구현 문제이다. 문제에서 요구하는 조건을 잘 파악해 모두 구현하면 풀어낼 수 있다. 문제고고학자인 튜브는 고대 유적지에서 보물과 유적이 가득할 것으로 추정되는 비밀의 문을 발견하였습니다. 그런데 문을 열려고 살펴보니 특이한 형태의 자물쇠로 잠겨 있었고 문 앞에는 특이한 형태의 열쇠와 함께 자물쇠를 푸는 방법에 대해 다음과 같이 설명해 주는 종이가 발견되었습니다. 잠겨있는 자물쇠는 격자 한 칸의 크기가 1 x 1인 N x N 크기의 정사각 격자 형태이고 특이한 모양의 열쇠는 M x M 크기인 정사각 격자 형태로 되어 있습니다. 자물쇠에는 홈이 파여 있고 열쇠 또한 홈과 돌기 부분이 있습니다. 열쇠는 회전과 이동이 가능하며 열쇠의 돌기 부분을 자물쇠의 홈 부분에 딱 맞게 채우면 자물쇠가 열리게 되는 구조입니다. 자물쇠 영역을 벗어난 부분에 있는 열쇠의 홈과 돌기는 자물쇠를 여는 데 영향을 주지 않지만, 자물쇠 영역 내에서는 열쇠의 돌기 부분과 자물쇠의 홈 부분이 정확히...
Javascript 30 Day 15
Day 15 - Local Storagelocal storage에 값을 저장해 새로고침을 해도 데이터가 유지되는 페이지를 만든다. submit에 이벤트 등록이렇게 생긴 폼이 있을 때, 보통은 button에 click 이벤트를 등록할 것이다. 하지만 click 대신 submit에 이벤트를 걸어주면 click 동작 뿐만이 아니라 Enter로 들어오는 submit 작업 등 다양한 방식에서 이벤트가 실행되도록 할 수 있다. submit이 실행될 경우 브라우저는 기본적으로 reload 되므로 (서버에 값을 전달한다고 생각하기 때문에),preventDefault()를 실행해야한다. 1234function addItem(e) { e.preventDefault(); console.log(e);} item 추가하기object 형식의 item을 사용자 input을 적용해 생성한다. items는 전역 변수로 빈 배열로 초기화...
Javascript 30 Day 14
Day 14 - Javascript References vs Copyingvalue copy & reference copy어느 프로그래밍 언어를 공부해도 공통적으로 들어있는 내용이 있다. 얕은 복사(shallow copy)와 깊은 복사(deep copy)이다.보통 변수 값을 복사하면 변수가 가진 value가 복사되는 것을 얕은 복사라 하고, 변수안에 들어있는 값이 아닌 변수가 가리키는 주소값의 복사되는 것을 깊은 복사라 한다.두 복사 동작의 원리의 차이점을 제대로 알지 못하면 오류가 발생해도 이를 찾아내기가 쉽지 않다. 따라서 정확히 구분할 필요가있다. 12345678910111213141516171819let age = 100let age2 = ageconsole.log(age, age2)// 100 100age = 200console.log(age, age2)200 100const players = ['Wes','Sarah',...
Javascript 30 Day 13
13. Slide in on Scroll스크롤을 내릴 때 마다 본문에 포함된 이미지들에 없어져다가 나타나는 효과를 적용한다. Debouncing스크롤을 내리는 동작은 한 번 휠을 굴릴 때 마다 엄청나게 많은 이벤트를 발생시킨다. 이는 높은 가능성으로 성능저하를 발생시킬 수 있다. 이를 방지하고자 이벤트를 제한 하는 방법이 Debouncing 이다.디바운싱과 비슷한 또다른 기법으로 Throttle도 존재한다. 두가지 방법 모두 EventHandler가 많은 연산을 수행하는 경우, 이벤트가 실행되는데 제약을 걸어 이를 제한할 수 있는 것을 목표로 하는 기술이다. 이러한 기법들은 생각보다 많은 경우에 필요로 되어지는데 다음과 같은 예시가 있을 수 있다. 스크롤을 내리는 동작에 걸린 이벤트 검색창에 데이터를 입력하면서 나타나는 추천 검색어를 찾기위한 ajax 창 리사이징을 추적하는데 걸리는 이벤트 각각의 상황에서 매 트리거가 작동될 때 마다 이벤트가 실행된다면 엄청난 과부하가...
Python web scrapping (Beautiful Soup)
Web Scrappping이란 웹페이지에서 데이터를 수집하는 모든 과정을 말한다. 크롤링과 혼용되어 사용되는 일이 많은데, 크롤링은 웹 페이지들을 수집, 분류하여 나중에 쉽게 찾아 볼 수 있도록 인덱싱 하는 작업이다. 따라서 스크래핑이 더 큰 범주에 속한다고 보면 된다. 파이썬에는 웹 스크래핑을 도와주는 다양한 모듈들이 있다. 그 중 몇가지를 소개한다. requestsrequests는 http 요청을 아주 쉽게 수행하는 모듈이다.공식 사이트를 참고하면 아주 오랫동안 사용되었고 버전도 굉장히 많이 나와있음이 확인된다. get(url) : url로 http request를 보내 해당 페이지에서 다양한 정보를 객체로 응답받는다. 123import requestsrequest = requests.get('https://google.com');print(request.status_code) 요청이 정상적으로 완료 되면 status_code 변수에 200이...
[Node.js] Module Pattern
Module Pattern모든 코드를 App.js 에 몰아넣기 보다는 기능에 맞게 모듈화 하여 분리해 관리하는 것이 전체 프로젝트를 관리하기에 훨-씬 좋다. 모듈화 작업은 나중에 리팩토링 하려 하지 말고 처음부터 잡아놓는 것이 좋은 것 같다. 이후에 하려고 하면 복잡하다. Node.js의 standard 모듈화 방법은 CommonJS를 사용하고 있다. 여기서 정의하는 모듈화 방식은 다음과 같다. scope : 모든 모듈은 자신만의 독립적인 실행 영역이 있어야 한다. definition : 모듈의 정의는 exports 객체를 이용한다. usage : 모듈의 사용은 require 함수를 이용한다. 즉 모듈을 내보내는데는 exports 또는 module.exports를 사용한다.내보낸 모듈을 다른 파일에서 사용하기 위해서 require() 메소드를 호출한다. require()는 exports 객체를 반환한다. 따라서 이를 할당한 변수에서는 exports 객체 내부에 정의했던...