2022-06-14(화) TIL

황인호·2022년 6월 14일
0

TIL 모음

목록 보기
78/119

오늘해야할일

  1. 이력서 지원하기! [3개 지원 완료]
  2. 알고리즘 강의 듣기 [완료]
  3. 프로그래머스 알고리즘 문제풀기 [3문제 품]
  4. 운동하기
  5. TypeScript 강의 듣기 [실패...]
  6. app.js 서버 설정, 로그인 /회원가입/로그인 체크/로그아웃 API만들기 [완료]
  7. bcrypt 라이브러리 적용해서 해쉬화하기 [완료]

알고리즘 문제풀이

[약수의 개수와 덧셈]

function solution(left, right) {
	let answer = 0;
    for (let i = left; i < right++) {
    	if (Number.isInteger(Math.sqrt(i))) {
        	answer -= i
        }else {
        	answer += i
        }
    }
    return answer
}

Number.isInteger(Math.sqrt(i)) =>
제곱근이 정수이면 answer -= i 이고
제곱근이 정수가 아니면 answer += i 이다.

제곱근이 정수이면 약수가 홀수이고 , 제곱근이 정수가 아니면 제곱근이 짝수이다.


음양 더하기
function solution(a,b) {
	let answer = 0;
    for (let i = 0; i < a.length; i++) {
    	if (b[i] === true) {
        	answer += a[i]
        }else {
        	answer -= a[i]
        }
    }
    return answer
}

나머지가 1이되는 수 찾기
function solution(bn) {
	let answer = 0;
    for (let i = 2; i < n; i++) {
    	if (n % i === 1) {
        	return i
        }
    }
}

빈도수 세기 패턴!

function vaildAnagram(first, second) {
	if (first.length !== second.length) {
    	return false
    }
    
    const lookup = {}
    for (let i = 0; i < first.length; i++) {
    	let letter = first[i]
        lookup[letter] ? lookup[letter] += 1 : lookup[letter] = 1
    }
    
    for (let i = 0; i < second.length; i++) {
    	let letter = second[i]
        if (!lookup[letter]) {
        	return false
        }else {
        	lookup[letter] -= 1;
        }
    }
    return true
}

첫번째 매개변수와 두번째 매개변수의 길이와 문자열이 동일한지를 확인하는 알고리즘이다.
예를 들어서 => ("anagram","nagaras") 길이는 서로 동일해서 넘어간다.
그리고 lookup = {} 객체안에 a라는 문자열이 없으면 기본값을 1로 설정하고 만약에 a가 있다면 +1을 해주어서 매개변수에 어떤 알파벳이 몇개나 있는지를 알수있다


황씨의 즐거운 API 작성일지~~

API작성은 재밋는거같다
내가 작성한 API를 클라이언트툴로 테스트해보고 200이 뜨면 정말 기쁘다
오늘은 간단한 app.js셋팅 그리고 로컬Mysql DB 생성 및 Sequelize 설정
그리고 user.js -> 회원가입/로그인/로그인체크/로그아웃 API를 작성해보았다
물론 미들웨어도

사용한 라이브러리

  • express
  • morgan
  • sequelize
  • sequelize-cli
  • helmet
  • hpp
  • jsonwebtoken
  • bcrypt
  • dotenv
  • nodemon

helmet , hpp는 가장 기본적인 HTTP보안라이브러리라서 추가하였고
morgan은 로그창에다가 ip,method 등등 간단하게 정보를 알려주어서 사용했다
nodemon은 뭐... 개발 한두번할거아니면 무조건 넣어주는 패시브 스킬같은거라서 넣었다

정말 1시간 바짝해봤는데 너무재밋는거같다 ㅋ

파일구조이다.

처음에는 controllers를 사용하는게 너무 어색하고 굳이 이걸 이렇게??!! 사용해야한다고?? 했는데 정말편하다.

bcrypt
회원가입API 적용
간단하게 한줄입력하면된다.
-bcrypt로 해쉬화를 하겠다는거고 숫자10은 숫자가 커질수록 더 복잡한 해쉬화를 할수있다.
const hashed = bcrypt.hashSync(userPw, 10)

-DB에 저장할때에는 이렇게 저장해야한다.
await User.create({userId,userPw:hashed)

로그인API 적용
간단하게 한줄 입력하면된다.
compareSync => 지정된 hash와 입력받은 password의 hash가 일치하는지 확인하는 bcrypt의 함수이다.
그리고 userPw , user.Pw는 => userPw 는 입력받은 text 값이다.

user.userPw는 user의 password hash값으로 hash를 해독해서 text를 비교하는것이 아니라 text값을 hash로 만들고 그 값이 일치하는지를 확인하는 과정이다.

const unHashPw = bcrypt.compareSync(userPw, user.userPw)

오늘은 여기까지

profile
성장중인 백엔드 개발자!!

0개의 댓글