Nodejs 강의 숙련 JWT(Json Web Token) (3) ps.콜백함수
내일배움캠프 스파르타 코딩클럽
JWT 를 알아보기에 앞서 지난 콜백 함수를 잠시 회고 하고자 한다.
코드에 대해 알다가도 모를 시기
JavaScript 라는 언어로 코드를 짤때 그 해석 조차 어려울 때가 아직도 생생히 기억이 난다.
물론 지금도 마찬가지이지만 확실히 Node.js 에서 활용되는 도구들을 사용하니 훨씬 더 많은 배움과
암기해야 할 명령어들이 부쩍 늘어났다.
그러다보니 머릿속이 정리가 안되는 느낌이 많이 든다.
복잡하게 널부러져있는 도구들 사이에 머리가 복잡하여 미처 발견하지 못했던
익숙한 얼굴이 보여 반갑게도 회고 할만한 부분 이 있다.
이전까지 콜백 함수라는 것에 대해 제대로 이해하지 못하고 있었는데 다행이 이시점에 이해를 하게되었다.
콜백 함수라는 것이 함수안에 함수가 있고 그 함수 안에 함수가 있는 함수가 불러지는 그런 정의를 하게끔
잘못된 이해를 하고있고 그 속에 있는 걸 불러내는 그 자체를 콜백 함수라 여겼다.
그 또한 온전히 이해가 가지않아 그러려니 하며 넘겼는데.
콜백 함수라는 것이 별것 아니었다는 것을 이제야 깨닫고 확실한 개념을 알았다.
좀 늦게 깨닫긴 했지만 JWT 강의를 보며 뜬금없이 전혀 상관 없는 궁금증이 생겨서 알아본것은 아래와 같다.
그렇다 여기에 있는 () => {} 이부분이 콜백 함수인 것이다.
간단히 말하자면 비동기 작업이나 이벤트가 완료 된 후에 실행되는 함수가 콜백함수
.listen 이라는 이벤트 메서드는 비동기 작업을 통하여 포트를 생성해주고 완료가 될시 함수를 실행시켜 준다.
그 함수를 콜백 함수라 한다.
도구들 사이에 지쳐있을때 잠시 힐링을 할 수 있는 수단인 회고였다.
자 이어서 JWT를 알아보도록 하겠다.
< README.md>
< package.json >
< jwt-test.js >
1. jwt.sign() : 첫 파라미터는 payload, 두번째 파라미터는 signiture 이다.
2. jwt.decode() : 복호화를 할수있는 메서드이며 jwt.sign()으로 생성된 encoded를 복호화 알아볼 수 있는 형식으로
변환해준다.
3. jwt.verify() : 변조 검증은 JWT의 무결성과 신뢰성을 보장하는 데 중요하다.
만약 jwt.verify(페이로드, 서명) 서명이 jwt.sign(페이로드, 서명) 서명과 일치하지 않는다면
토큰이 변조되었거나 올바르지 않은 비밀 키로 서명되었음을 나타낸다.
< app.js >
1. jwt.sign() : 파라미터가 세번째까지 존재하는 경우 세번째 파라미터의 매개변수는 expiresIn 옵션으로
만료시간 설정 옵션이다. '1h', '5m' 이런식으로 설정할 수 있다.
이렇게 된 김에 옵션 몇 가지를 더 알아보겠다.
- algorithm: 사용할 해싱 알고리즘을 지정합니다. 기본값은 HS256입니다.
- expiresIn: 토큰의 만료 시간을 설정합니다. 예: '1h' (1시간), '2d' (2일), 3600 (3600초).
- notBefore: 토큰이 유효해지기 시작하는 시간을 설정합니다. 예: '10m' (10분 후부터 유효),
1609459200 (유닉스 타임스탬프).
- audience: 토큰의 수신자를 설정합니다.
- issuer: 토큰을 발급한 주체를 설정합니다.
- jwtid: JWT의 고유 식별자를 설정합니다.
- subject: 토큰의 주제를 설정합니다.
- noTimestamp: 토큰 생성 시간(iat)을 설정하지 않습니다.
- header: 사용자 정의 헤더를 설정합니다.
작성은 아래와 같이 할 수 있다.
2. res.cookie() : 주석 처리로 된 설명처럼 첫 파라미터는 쿠키 name 을 설정하고
두번째 파라미터는 값(value) 를 설정해줍니다. 위 코드같은 경우 value 설정을
user에 할당한 객체를 jwt.sign 을 통해 서명과 옵션을 같이 하여 암호화 시켜준 값을 넣어줬으며
세번째 파라미터도 아직 배우진 않았지만 아래와 같이 설정 가능하다.
이렇게 해서 JWT 를 간단하게 배워 보았다.
아직 실용적인 프로젝트를 시작하지 않다 어떤식을 코드를 실행하는지 개념이 덜잡혀서 온전히 내것이 아닌
붕 떠있는 느낌이지만 이후 강의 게시판 프로젝트를 통해 차근차근 알아가 보도록 하겠다.