JWT authorization try~catch
authorization




Copilot said: 요약 - 요청 헤더의 Cookie와 응답 헤더의 Set-Cookie는
요약
요청 헤더의 Cookie와 응답 헤더의 Set-Cookie는 “같아 보여도” 역할이 다릅니다.
지금 캡처에선 같은 이름(jwt)일 뿐, 값도 실제로 다릅니다. 서버가 매 요청마다 새 토큰을 발급해서 Set-Cookie로 내려주고, 다음 요청은 이전에 받은 쿠키를 Cookie로 보내는 정상 동작입니다.
자세히 설명
요청 → 서버: Request Headers의 Cookie는 “클라이언트가 현재 가지고 있는 쿠키 값을 서버로 보냄”입니다.
서버 → 응답: Response Headers의 Set-Cookie는 “서버가 클라이언트에게 저장/갱신하라고 지시하는 새 쿠키 값”입니다.
당신의 예시에서 실제로 값이 다릅니다
요청 Cookie: jwt=...HvpUI
응답 Set-Cookie: jwt=..._3o
토큰 뒷부분이 다르고 iat(발급 시각)도 다릅니다(예: 1761719471 vs 1761719531). 즉 서버가 새 JWT를 매번 만들어 내려주는 상태입니다.
왜 매번 똑같이 보이냐고 느끼는 이유
이름과 형식이 동일해서(jwt=...) “같아 보일” 뿐, 의미는 다릅니다.
서버 코드에서 매 요청마다 res.cookie('jwt', ...)로 새 토큰을 세팅하거나, 세션/쿠키 “rolling(연장)” 설정이 켜져 있으면 Set-Cookie가 매번 내려옵니다.
Postman은 이전 응답의 Set-Cookie를 쿠키 자에 저장해 다음 요청 때 Cookie로 자동 전송합니다. 그래서 “보냈던 걸 또 받는” 느낌을 받을 수 있어요.
Postman에서 유의할 점
Headers 탭에 직접 Cookie 헤더를 수동으로 넣어두면, Postman의 쿠키 자가 갱신돼도 당신이 보낸 수동 값이 그대로 사용됩니다. 이렇게 하면 서버가 새로 내려준 값이 다음 요청에 반영되지 않을 수 있어요.
해결: Headers에서 Cookie를 지우고, 우측 상단 “Cookies”에서 도메인 쿠키를 확인/삭제하세요. 그러면 Postman이 Set-Cookie를 자동 반영해 최신 쿠키를 보냅니다.
원치 않으면 이렇게 변경
서버에서 로그인/갱신 시점에만 쿠키를 설정하고, 일반 API 요청에서는 Set-Cookie를 보내지 않도록 하세요.
express-session을 쓴다면 rolling 옵션을 끄거나, JWT를 매 요청마다 재발급하지 않도록 로직을 조정하세요.
만료 연장만 필요하면 Max-Age/Expires 갱신 정책을 명확히 하고 필요할 때만 Set-Cookie를 보내세요.
정리: 요청의 Cookie와 응답의 Set-Cookie는 역할이 다르고, 지금은 서버가 새 JWT를 매번 내려주기 때문에 “비슷해 보이는” 헤더가 양쪽에 동시에 보이는 것입니다.
/jwt
에서 토큰 발행 후 쿠키에 담아서 response headers에서 보냄
다음 send때 request headers 에서 이전 쿠키를 보여줌(response headers)는 새 쿠키 가지고 있음
이 새로운 쿠키를
/jwt/decoded(검증중)에서 Authorization에 token(쿠키값)을 넣어놓고
send하면
body에서 페이로드 값을 알 수 있다.!!


토큰 얻기 response headers set-cookies 가 신품 쿠키다

검증할 곳에서
Authorization에 해당 토큰 넣어주어요 (프론트단에서 넣어준다고 가정하고)

만약에 jwt expired 뜨면 만료된거임

results 길이 구하기
Object.entries(objs).length
Object.values(objs).length
Object.keys(objs).length
혹은
results.affectedRows =0이상

선택된 것 나옴

sql문을 바꿔서 user_id가 동일하지 않으면삭제 안되게 함

JWT 예외처리
if/else => try/catch
1) TokenExpiredError
: 유효기간이 지난 토큰 = 만료된 토큰
ex) jwt is expired
2) JsonWebTokenError
: 문제 있는 토큰
try ...catch
개발자가 예상하지 못한 에러(실수, 사용자 입력을 잘못 한 것, 디비가 응답을 잘못한 것,,, 등등)를 처리하는 문법 =
실수1, 실수2 ... 비슷한 분류들끼리 묶어서 누군가 따로 관리를 해주면 좋겠다...
try 구문의 코드를 실행하다가 에러가 발생하면, try 코드를 "멈추고" => catch로 err와 함께 바로 빠져나갑니다
try 구문에서 어떤 에러가 발생해도, 우리가 다 if문 분기 처리를 해주던 내용들이 => 알아서 catch에 잡혀요
에러객체
자바스크립트가 고대 개발자분들의 노고를 보고, "내장"에러 객체를 만들어뒀어요
JWT라는 모듈에서도 제공하는 여러 객체도 있고,

이런게 다 에러객체임

객체라서 들고있는 것도 있음

try catch로 안전하게 죽으면

근데 없어서 뻑나면

걍 죽어버린거임~~!!!허거덩~~!!
Throw 연산자
에러를 발생시키는 연산자
throw 에러객체
ex) throw new SyntaxError();


throw를 통해 if 밑에 값을 읽지않고
바로 catch로 넘어감

instanceof TokenExpiredError
= TokenExpiredError의 일부니?
이중 res 보내면 에러떠서 이렇게 한다는데,,먼가 미심쩍음
구림!!!(아니라면 죄송합ㄴ다ㅣ
항상 송아강사님의 큰그림을 느끼고있기때문에,,아마
try catch로 감싸지ㅣ장ㄴㅎ을까요
------
🚀트러블슈팅

흠
이거는 여기저기 찾아보니까
내가 건드리지 않은 HOST같은 부분에 에러가 난 거면
안보이는 스페이스바나 엔터, 외계어로 적용됐을 가능성이 높다는 거
그냥 다시 적어보면 해결됨~
https://trailhead.salesforce.com/ko/trailblazer-community/feed/0D54S00000Kdl19SAB
https://stackoverflow.com/questions/68138729/invalid-character-in-header-content-host-postman

로그인이랑 jwt 검증 성공
results 길이 구하기
Object.entries(objs).length
Object.values(objs).length
Object.keys(objs).length
혹은
results.affectedRows =0이상
-----------------------