API 만들다가 인증 관련 응답 코드에서 막혔어요. 로그인 안 한 사람이 보호된 API 부르면 401을 줘야 하나 403을 줘야 하나 매번 헷갈립니다.


이름만 보면 401 Unauthorized는 "권한 없음"이고 403 Forbidden은 "금지됨"인데, 둘 다 결국 "너 이거 못 봐"라는 뜻 아닌가요? 뭐가 다른지 진짜 모르겠어요.


지금 제 코드는 이렇게 대충 짜놨는데요.


if (token == null) {
  return res.status(403).json({ error: "로그인이 필요합니다" });
}
if (user.role != "admin") {
  return res.status(401).json({ error: "관리자만 접근 가능" });
}


이렇게 써놓고 보니까 뭔가 반대로 쓴 것 같기도 하고요. 토큰 없을 때가 401인가요 아니면 로그인은 했는데 권한이 부족한 게 401인가요?


그리고 이런 것도 궁금해요. 어떤 사이트는 로그인 안 하고 관리자 페이지 들어가면 그냥 로그인 페이지로 보내버리고, 어떤 데는 403을 딱 띄우던데 이건 그냥 개발자 취향인 건가요 아니면 상황에 따라 정답이 있는 건가요.


WWW-Authenticate 헤더인가 그것도 401이랑 같이 내려줘야 한다는 글을 봤는데 이건 또 뭔지 모르겠고요. 그냥 상태 코드만 주면 되는 거 아니에요? 실무에서 인증 붙일 때 이 두 개 어떻게 구분해서 쓰는지 명확하게 정리 좀 부탁드려요.