crypto 누군가의 공격으로 데이터베이스가 유출될 경우 사용자가 큰 피해를 입을 수 있기 때문에 비밀번호는 암호화해서 저장해야 한다. node.js에는 암호화를 할 수 있는 내장 모듈인 'crypto'가 있다. const crypto = require('crypto'); const password = "1111"; const salt = crypto.randomBytes(64).toString('base64'); const hashPassword = crypto.pbkdf2Sync(password, salt, 10000, 64, 'sha512').toString('base64'); console.log(hashPassword); pbkdf2Sync(원문, 솔트, 해시 함수반복 횟수, 출력 바이트 수, ..
http-status-codes 모듈 상태 코드를 코드에 숫자로 적어두면 상태 코드를 모르는 사람들은 그 숫자가 무슨 의미인지 파악하기 힘들다. 상태 코드를 모르는 사람들도 알아볼 수 있도록 모듈을 사용해 보자. npm i http-status-codes const { StatusCodes } = require('http-status-codes'); const join = (req, res) => { // ... res.status(StatusCodes.CREATED).json(results); }; 상태 코드 http-status-codes 200 OK 201 CREATED 401 UNAUTHORIZED 403 FORBIDDEN 404 NOT_FOUND 컨트롤러 컨트롤러는 HTTP 요청을 처리하는 파일..
난이도: Lv. 2 정답률: 49% 문제: https://school.programmers.co.kr/learn/courses/30/lessons/86971 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 key는 송전탑의 번호, value는 key 송전탑과 연결된 모든 송전탑을 담은 배열인 객체를 만든다. 전선을 하나씩 끊는다. 끊은 전선인 송전탑 두 개를 set에 넣는다. 첫 번째 송전탑과 연결된 모든 송전탑을 스택에 넣는다. 스택에 있는 송전탑을 하나씩 꺼내면서 set에 존재하는지 확인한다. 즉, 이미 방문했던 송전탑인지 확인한다. 방문하지 ..
ERD 수정 books 테이블에 category 컬럼을 category_id로 수정하고 category 테이블을 추가했다. 카테고리별 도서 조회에서 카테고리를 쿼리로 받게 된다. 카테고리의 종류는 너무 많기 때문에 모두 문자열로 받게 되면 구현이 어려워질 수 있고 정규화 측면에서도 좋지 않다. 따라서 카테고리 테이블을 별도로 생성한다. 프로젝트 구조 파일/폴더 설명 bin/www 포트 번화 등과 같은 웹 서버를 구축하는데에 필요한 설정 데이터가 정의되어 있는 파일이다. 설정 값을 가지고 에러 처리, 기타 추가 설정을 해준다. node_module Node.js, Express에 필요한 모듈들이 설치되는 폴더이다. public 정적 파일(images, ljavascripts, stylesheets)을 모아..
전체 ERD 회원 ERD 및 API ERD API 회원가입 Method POST URI /join HTTP Status Code 성공(201) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body 로그인 Method POST URI /login HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body JWT token 비밀번호 초기화 요청 Method POST URI /reset HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” }..
난이도: Lv. 2 정답률: 50% 문제: https://school.programmers.co.kr/learn/courses/30/lessons/12899 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 기본적으로는 3진수를 구하는 방법으로 푼다. 이 문제에서 중요한 점은 0이다. 10진수를 3진수로 바꾸면 0이 생긴다. 0을 1로, 1을 2로, 2를 4로 바꾸면 해결될 문제 같지만 10진수 2를 124 나라의 숫자로 변환해 본다고 해보자. 10진수에서 2는 02와 동일하다. 하지만 2를 124 나라의 숫자로 바꾸면 2이고, 02를 124 나라의..
회원 API 회원 가입 이메일과 비밀번호를 입력받아 회원가입한다. Method POST URI /join HTTP Status Code 성공 (201) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body 로그인 이메일과 비밀번호로 로그인하고, 로그인에 성공하면 토큰을 발행해 준다. Method POST URI /login HTTP Status Code 성공(200) Request Body { email: “사용자가 입력한 이메일” password: “사용자가 입력한 비밀번호” } Response Body JWT token 비밀번호 초기화 요청 비밀번호를 초기화하는 버튼을 클릭했을 때 발생하는 요청이다. Method ..
알고리즘 파라미터로 주어진 세대부터 2세대에 도달할 때까지 현재 인덱스가 1~4 중 어딘지 구해서 스택에 넣는다. 스택의 맨 위에 있는 인덱스는 2세대의 인덱스다. 1이면 RR, 2이면 Rr, 3이면 Rr, 4이면 rr이다. 1과 4인 경우는 자식 모드 부모와 동일하지만 2, 3인 경우에는 자식이 3종류가 나올 수 있으므로 다음 세대를 본다. 2에서 결정을 못하고 파라미터로 주어진 세대까지 내려오게되면 주어진 세대의 1~4 값을 가지는 인덱스가 정답이다. 코드 function solution(queries) { const answer = []; const generation2nd = ['', 'RR', 'Rr', 'Rr', 'rr']; for (let query of queries) { if (query..
인증과 인가 인증(Authentication) 인증은 사용자를 식별하는 행위를 말한다. 쇼핑몰 사이트에서 마이페이지에 들어가려고 해보자. 마이페이지에 들어가려면 내가 이 사이트에 가입되어 있다는 증명이 필요하고, 그 증명 방법이 로그인이다. 웹 개발에서의 인증은 보통 사용자의 신원을 증명하는, 즉 로그인이라고 생각하면 된다. 인가(Authorization) 인가는 접근 권한을 확인하는 프로세스를 말한다. 같은 쇼핑몰 사이트에서 관리자인지 고객인지에 따라 접근할 수 있는 페이지가 다르다고 가정해보자. 관리자든 고객이든 일단 이 사이트에 가입된 사용자라는 것을 증명(인증)해야 하고, 그 후에 이 사용자가 이 페이지에 접근할 수 있는 권한이 있는가(인가)에 대해 판단한다. 결론적으로 인가는 인증 이후에 발생하..