목록전체 글 (42)
발전하는 춘배
개요프로젝트를 진행하던 중, `crypto.randomBytes(64).toString("base64");` 로 생성한 salt를 mysql 데이터베이스의 CHAR(64)에 insesrt하려 했더니 Data too long for column 'salt'라면서 에러가 났다. chat-gpt에게 원인을 물어보니 다음과 같았다. `crypto.randomBytes(64)`는 64 바이트의 랜덤 데이터를 생성한다. 바이트 데이터를 base64로 인코딩하면, 일반적으로 인코딩된 문자열의 길이는 원본 데이터 크기의 약 1.33배가 된다. 따라서, 64 바이트의 데이터를 base64로 인코딩하면, 결과 문자열의 길이는 약 86자(ceil(64 * 4 / 3) = 86)가 된다. CHAR(64)는 최대 64자의 문..
개요NodeJS가 무엇인지 알아보자.NodeJS 공식 홈페이지에 따르면, 결론적으로 Node.js는 자바스크립트 런타임 환경이다. 이게 무슨 의미인지 조금 더 자세히 알아보자.JavaScriptJavaScript는 객체 기반의 스크립트 프로그래밍 언어이다.주 목적은 정적 웹페이지를 구성하는 HTML을 조작 및 변경하여 웹페이지를 보다 동적으로 바꿔주는 것이다.이 JavaScript는 결국 HTML 파일에 들어있어서 웹페이지를 띄울 때 해석되어야 하는데, 그 해석은 당연히 브라우저가 담당한다. 따라서 크롬이나 파이어폭스, 엣지 등의 브라우저는 이 JavaScript 해석 엔진을 내장하고 있는데, 각각 다음과 같은 해석 엔진을 사용한다.크롬: V8파이어폭스: 스파이더몽키엣지: 차크라사파리: 웹킷Runtime..
개요프로젝트를 진행하던 중 유저의 패스워드를 어떻게 DB에 저장해야 좋을 지 고민하게 되었고, 이 과정에서 알게 된 것들을 정리해 본다.최악가장 최악의 방법은 위와 같이 유저의 password를 문자 그대로 저장하는 것이다.유저의 패스워드를 이렇게 저장하는 서비스는 존재해선 안 된다.Hashing적어도 패스워드는 이렇게 암호화해서 DB에 저장해야 하는데, 이 때 해시 알고리즘을 사용한다.해시 알고리즘에는 여러 종류가 있는데, 위의 예시는 SHA512 알고리즘을 이용하였다.해시 알고리즘들이 가지는 특성은 다음과 같다.입력값을 i, 알고리즘을 거쳐 나온 출력값을 o라 하자.i가 주어지면 o를 쉽게 구할 수 있다.같은 i에 대해서는 항상 같은 o가 나온다.i가 한 글자만 달라져도 o는 매우 크게 변한다.i의 ..