개발/Node.js

    SQL :: 점수 합계, 등급 산정하기, PERCENTRANK, SUM

    1. 배경 각 유저마다의 체력 등급을 평가하기 위해 체력요인점수를 합하여 높은 순부터 1등급 ~ 9등급을 부여해야 하는 기능을 구현해야했다. 2. 요구사항 2.1. 각 체력요인 점수는 종목 점수 중 제일 높은 것을 선택 2.2. 1 ~ 9등급 비율은 아래의 표를 참고하여 설정 2.3. 각 유저의 5가지 체력요인 점수를 합하여 비교 2.4. prisma 기본 쿼리로는 구현이 복잡해서 Raw Query를 사용해서 구현 2.5. 연도별 조회 기능도 필요하기에 year에 따라 연도별로 계산 3. 해결 & 코드 select t3.*, -- 비율마다 1 ~ 9등급 부여 CASE WHEN t3."totalPercentile" >= 0.96 THEN '1' WHEN t3."totalPercentile" >= 0.89 ..

    Node.js + bcrypt :: 회원가입 시 비밀번호 암호화하기 & 로그인 시 비밀번호 검증, 비교하기

    배경 회원가입 시 입력한 비밀번호가 그대로 데이터베이스에 저장되면, 데이터베이스 접속 정보가 노출이 되거나 유저 정보 유출 시 보안적으로 위험할 수 있다. 요구사항 1. 회원가입 시 비밀번호 암호화하기 2. 로그인 시 비밀번호 비교하여 로그인 성공하면 jwt 토큰 생성 및 발급하기 해결 Bcrypt는 레인보우 테이블 공격 방지를 위해 솔트(Salt)를 통합한 적응형 함수 중 하나이다. SHA 종류의 암호화는 GPU 연산에 유리한 32비트 논리 및 연산만 사용하기 때문에 GPU 연산을 이용한 공격에 취약하다. 그래서 Bcrypt 설계자는 Blowfish를 이용해 구현해서 이를 방지했다고 한다. 레인보우 테이블 : 해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표 솔트 : 데이터, 비밀번호..

    Node.js + TypeScript + nodemailer :: 이메일 인증번호 보내기

    배경 이메일 회원가입 시 해당 이메일을 가지고 있는지 파악하기 위해 이메일 인증번호를 보내는 API를 개발해야 했다. 요구사항 1. Node.js 서버에서 Query paramter로 이메일 정보를 받는다. 2. 해당 이메일로 3자리 인증번호를 보낸다. 3. response로 동일한 3자리 인증번호를 응답에 성공하면 code:200과 함께 data에 인증번호를 담아 보낸다.. curl http://localhost:3000/register/authcode?email=wks0968@gmail.com { "code": 200, "msg": "", "data": 263 } 해결 1. https://myaccount.google.com/security 에 접속해서 2단계 인증을 설정하고 앱 비밀번호를 생성한다...

    Prisma + PostgreSQL :: 차세대 Node.js, TypeScript ORM 기술

    1. Prisma의 의미 Prisma는 차세대 Node.js, TypeScript ORM 기술로서, 미리 정의한 모델인 GraphQL 스키마를 기반으로 DB의 필드, 속성을 자동생성(CREATE TABLE) 해준다. 이해하기 쉬운 데이터 모델 작성, migration 자동화 기능, type safe 및 auto-completion 기능 덕분에 데이터베이스 작업 시 편리하다. 1.1. GraphQL의 의미와 장점 facebook에서 만든 Graph Query Language 로 어플리케이션 쿼리 언어로써, 기존의 REST API의 한계점을 극복하고자 나온 통신 규약이다. Node.js를 이용해, 데이터베이스에 접근하는 나만의 명령어를 만들고 (Query, Mutation, TypeDefs, resolver..