전체 글 132

TIL 220502

TIL 220502 온라인 스터디를 시작하였다. 우리 스터디는 하루 동안 자율 공부 후 til을 작성하여 공유한다. 처음에는 카톡으로 링크를 공유하려고 하였지만 한 스터디원분의 권유로 노션을 만들었다. 평소 노션을 사용하진 않지만 멤버 소개와 진행 방식 등 간단하게 만드는 데 거의 2시간이 걸렸다. 배치하고 꾸미고 내 스타일은 정말 아닌 거 같다. 현재 개인 프로젝트를 만들고 있다. 그중 데이터베이스 유저 테이블과 유튜버 테이블 간 팔로잉/팔로워 기능 구현을 위해 N:M 다대다 관계를 공부했다. 같은 유저 테이블 간의 다대다 관계는 써봤는데 다른 테이블이랑 관계를 맺 구현하려니 처음에 몇 번을 헤맸다. 한번 제대로 이해만 해놓으면 모든 건 응용이니 이번 기회에 확실하게 이해하고자 노력하였다. 역시 반복하..

기타/회고 2022.05.02

NodeJS Crawling Puppeteer

NodeJS Crawling Puppeteer concept: Headless 크롬 혹은 크로미엄을 제어하도록 도와주는 노드 라이브러리 - SPA(Single Page Application) 즉 SSR(Server Side Rendering) 된 사이트를 크롤링 할 수 있다. - 페이지 화면 캡처와 양식 제출 UI 테스트 키보드 마우스 입출력 등 사람이 할 수 있는 동작 제어 가능 - Dev Tools 프로토콜로 키보드 마우스뿐만 아니라 쿠키/세션/스토리지 등 다양하게 제어할 수 있다. - 크롤링하고자 하는 사이트의 보안이 걸려있을 경우 axios/cheerio를 사용하면 접근할 수 없다. Headless Headless란 CLI(Command Line Interface)에서 작동하는 브라우저이다. 가장..

서버/Node 2022.04.18

NodeJS axios cheerio xlsx

NodeJS axios cheerio xlsx - 실무에서 간혹 기획자가 엑셀 파일에 데이터를 담아 크롤링을 요청할 경우가 있다. - 웹 사이트마다 보안이 다르지만 봇을 검사하지 않는 경우 axios/cheerio 조합으로 크롤링 할 수 있다. - axios로 요청을 보내고 결과를 cheerio로 받아 xlsx로 데이터를 넣는다. const xlsx = require("xlsx"); const axios = require("axios"); const cheerio = require("cheerio"); const add_to_sheet = require("./xlsx"); const workData = xlsx.readFile("./data/data.xlsx"); const workSheet = work..

서버/Node 2022.04.18

http status code

http status code 웹 서비스 요청과 응답 상태를 알려주는 5가지의 분류로 구분된 코드 - 코드 3자리 수로 구분 - 400~500 코드는 정상적인 상황이 아니므로 서버 개발자가 즉시 알아야 함 100번대(정보) 요청을 받았으며 프로세스를 계속 진행 200번대(성공) 요청을 성공적으로 받았으며 수용 300번대(리다이렉션) 요청 완료를 위해 추가 작업 400번대(클라이언트 에러) 요청 문법에 오류가 있거나 요청을 처리할 수 없음 500번대(서버 에러) 서버가 요청에 대해 수용을 실패 응답 코드 메시지 200 성공 JSON 데이터 응답 201 요청 후 새로운 데이터 생성 완료 204 요청은 성공했지만 No Content 206 Partical Content / 스트리밍 401 실패 유효하지 않은 ..

네트워크 2022.03.29

Git

Git 버전 관리 시스템 - git init intit한 폴더에 .git 폴더 생성 git이 관리할 파일을 알아차리게 함 - git status 현재 폴더의 상태 확인 - git add "파일/폴더명" / git add . (모두 선택) git init 후 관리받을 파일 선택 - git rm --cached "파일명" stage로 올라 간 파일 unstage로 내림 --cached 안 하면 실제 파일이 삭제됨 - .gitignore 파일 생성 git에 관리를 받지 않을 파일/폴더명 작성 - git commit -m "message" 작업 종료 후 지금 상태(버전)를 git에게 기억하라고 명령 commit 후 gitignore에 추가해도 적용되지 않음 메세지는 미래의 나와 같은 팀을 위해 최대한 자세하게 ..

ExpressJS CORS(Cross-Origin-Resource-Sharing)

ExpressJS CORS(Cross-Origin-Resource-Sharing) 클라이언트(브라우저)의 요청 도메인과 응답 받는 서버 도메인이 다를 경우 브라우저가 발생시키는 에러 - 웹 개발자라면 무조건 보게되는 에러(앱은 웹뷰 사용 시 CORS 에러 발생) - 클라이언트(서버)에서 서버로 요청 보낼 경우는 발생하지 않음 - 브라우저에서 발생 시키는 문제지만 응답을 보내주는 서버에서 처리해야 함 - 서버 응답(Response Headers)에 Access-Control-Allow-Origin을 넣어주면 해결 가능(req.setHeaders) cors 설치 - cors 모듈 전역 라우터 설정 - cors 메서드 사용 - origin: 요청 허용 할 도메인 모두("*") 여러개면 배열로 ["http:lo..

서버/Express 2022.03.28

ExpressJS JWT

Nodejs Express JWT JSON 형식 데이터를 저장하는 토큰 3가지 형식으로 구성된다. 1. 헤더(HEADER) 토큰의 종류와 해시 알고리즘 정보 저장된다. 2. 페이로드(PAYLOAD) 데이터가 인코딩되어 저장된다. 3. 시그니처(SIGNATURE) 일련의 문자열 시그니처를 통해 토큰이 변/위조되었는지 파악 확인한다. 시그니처는 JWT 비밀키로 만들어진다. 비밀키가 노출되지 않는 이상 변조/위조 불가능하다. WHY TO USE IT - 토큰에 내용물이 들어있어 데이터베이스에서 조회를 하지 않아도 된다. - 토큰의 시그니처에 비밀키가 노출되지 않는 이상 해킹 불가능하다. - 비밀키만 잘 관리하면 데이터(PAYLOAD)를 믿고 사용할 수 있다. - 이름 / 권한 등 민감하지 않은 정보만 넣어야 ..

서버/Express 2022.03.26

ExpressJS method-override

ExpressJS method-override form 태그에 put/delete method 사용 가능 - html form tag는 기본적으로 get/post 2가지 method만 지원 - node에서 제공하는 method-override 패키지로 사용 PUT을 form 메소드로 사용한다는 것은 말도 안 된다. 네가 form payload를 통해 PUT을 해야할 일은 없을 것이다. DELETE도 payload가 없어야만 말이 된다. 그러니 역시 form에서 제공할 이유가 없다. package / module require - package npm i method-override - module require(app.js) const methodOverride = require("method-overr..

서버/Express 2022.03.22