403은 무슨 말이지? 아이코에게 다시 부탁하기

SNACKGIRLS ORIGINAL우리의 코딩 공부 노트

스낵걸즈 코딩 공부 · 06

403은 무슨 말이지? 아이코에게 다시 부탁하기

서버의 거절 이유를 읽고, 작은 작업부터 부탁한 뒤 직접 확인해봐요.

‘안 돼요’에도 이유가 있었어요

안녕하세요, 레드예요. 지난번에는 로그인과 권한을 따로 확인해야 한다는 걸 배웠죠. 이번에는 연습용 사이트에서 다른 사람의 게임 기록을 바꾸려는 요청에 403이라는 답이 왔어요. 응답 내용에는 ‘다른 사람의 기록은 수정할 수 없습니다’라고 적혀 있었고요.

레드

레드

아이코, 이 숫자도 내가 알아야 해?

아이코가 번호를 전부 외울 필요는 없다고 했어요. 대신 어디를 확인하면 좋을지 알려주는 단서로 읽어보자고요.

답을 읽고, 작은 일부터

다른 사람의 기록 수정이 403으로 거절된다. 레드가 아이코에게 자기 메모 저장부터 요청하고 저장 복원과 권한 검사를 확인한다.
응답의 이유 확인 → 범위를 정해 요청 → 결과 확인 순서로 생각해봤어요. 그림을 누르면 크게 볼 수 있어요.

서버가 보내는 결과 번호

브라우저와 서버가 웹에서 요청과 응답을 주고받을 때 쓰는 약속을 HTTP라고 해요. 서버의 응답에 담기는 세 자리 숫자가 HTTP 상태 코드예요. 응답에는 번호뿐 아니라 내용이나 추가 정보도 함께 올 수 있어요.

이번에 살펴볼 응답 번호 여섯 가지
번호 쉽게 읽으면 살펴볼 것
200 요청을 정상 처리했어요. 내가 기대한 결과도 나왔는지 확인해요.
307 잠시 다른 주소로 가세요. 어디로 이동하라는 응답인지 봐요.
400 요청에 문제가 있어 처리할 수 없어요. 보낸 값이나 요청 형식을 살펴봐요.
401 유효한 인증 정보가 필요해요. 로그인 상태나 인증 정보를 확인해요.
403 요청은 이해했지만 허용하지 않아요. 그 작업의 권한 등 거절 이유를 확인해요.
405 이 주소에서 그 요청 방식은 지원하지 않아요. GET·POST 같은 요청 방식이 맞는지 봐요.

로그인 화면으로 이동할 때 항상 307을 쓰는 것은 아니에요. 302·303 등도 쓰여요. 실제 번호와 처리 방식은 서버 구현과 상황에 따라 달라질 수 있어요.

GET·POST와 307을 조금만 더

웹 요청에는 무엇을 하려는지 나타내는 방식이 있어요. GET은 주로 정보를 가져올 때, POST는 데이터를 보내 처리하도록 요청할 때 사용해요. 주소가 맞아도 그 주소에서 허용하지 않는 방식으로 요청하면 405 응답을 받을 수 있어요.

307은 다른 주소로 잠시 이동하라는 응답이며, 이동할 때 기존 요청 방식을 유지해요. 지금은 ‘숫자마다 뜻이 다르다’는 정도부터 기억해도 괜찮아요.

403을 없애려고 권한 검사를 지우면?

그럼 문제가 해결된 걸까요? 권한이 없는 사람을 막으려고 나온 응답이었다면, 오히려 필요한 보호를 없앤 셈이에요. 오류처럼 보이는 표시부터 없애기 전에 왜 그런 답이 왔는지 살펴봐야 해요.

네아

네아

이 예제에서는 다른 사람의 기록을 수정하려 했으니, 거절하는 게 맞네요.

아이코에게 부탁할 말을 고쳐봤어요

처음에는 “앱 전체 고치고 저장도 되게 해줘!”라고 말하려고 했어요. 그런데 어디부터 달라지는지 나도 놓칠 것 같아서, 게임 기록의 메모 하나부터 맡겨보기로 했어요.

게임 기록의 메모 한 개를 저장하고 다시 읽는 기능부터 만들고 싶어.

먼저 로그인과 권한 검사부터 확인해줘.
친구의 기록은 읽을 수 있지만, 각 사용자는 자기 메모만 바꿀 수 있어야 해.
서버 비밀키는 브라우저로 보내지 말아줘.
그다음 메모를 저장하고 다시 읽는 경로 하나만 작업해줘.

작업 뒤에는 테스트용 계정과 메모로 확인해줘.
• 새로고침해도 저장한 메모가 돌아오는지
• 로그인하지 않은 요청은 막히는지
• 다른 사용자의 메모를 바꾸려 하면 거절되는지
확인한 결과와 아직 확인하지 못한 것을 나눠 알려줘.

공개해도 되는 값과 비밀값

프로그램 설정 중에는 사이트 이름처럼 보여줘도 되는 값이 있고, 서버 비밀키처럼 숨겨야 하는 값도 있어요. 설정값을 따로 전달할 때 환경 변수라는 방법을 쓰기도 해요.

Next.js에서 NEXT_PUBLIC_으로 시작하는 환경 변수는 브라우저에 공개될 수 있어요. 서버 비밀키에 이 표시를 붙이면 안 돼요. 그렇다고 이 표시만 없으면 언제나 안전한 것은 아니에요. 비밀값을 화면이나 응답으로 보내는 코드도 없어야 해요.

이름을 바꾸는 것만으로 이미 공개된 비밀이 사라지지는 않아요. 실제 비밀값은 글이나 확인용 화면에 넣지 않기로 했어요.

서버의 답변 번호와 AI에게 안전하게 시키는 법

아래 영상에서는 응답 번호 여섯 가지와 아이코에게 작업을 나눠 부탁하는 방법을 정리해요. 어떤 결과를 직접 확인할지도 생각하며 봐요.

약 1분코딩 첫걸음 · 6편

유튜브에서 6편 보기 ↗

스낵걸즈 · 코딩 첫걸음 6편

수정 결과를 확인할 기준이 생겼어요

403을 봤다면 거절 이유부터 확인해요. 아이코에게는 바꿀 기능과 지켜야 할 규칙을 함께 알려주고, 작업 뒤에는 기대한 결과가 나오는지 직접 확인하고요.

키라리

키라리

저장됐대도 직접 다시 열어보자. 다른 계정으로 바꾸는 건 막히는지도 보고.

여섯 편을 정리하고도 모르는 말은 여전히 많아요. 그래도 이제는 아이코에게 “이건 어디에 저장돼?”, “다른 사람도 바꿀 수 있어?” 하고 물어볼 수 있게 됐어요. 다음에 뭔가 만들 때는 그 질문부터 노트 옆에 펼쳐두려고요.

작은 연습 · 3문제

아이코에게 부탁하고, 결과를 확인해봐요

거절 이유를 읽고, 작은 작업을 요청하고, 확인할 항목을 정하는 순서로 풀어보세요. 예시 답은 생각한 뒤 펼쳐보세요.

1. 403의 이유 찾아보기

만화 속 403 응답에 붙은 문장을 읽어보세요. 이 경우에는 권한 검사를 없애야 할까요, 요청한 기록의 주인을 확인해야 할까요?

예시 답 펼치기

기록의 주인을 확인해야 해요. 이 예제는 다른 사람의 기록 수정을 막은 것이므로 권한 검사를 없애면 안 돼요.

2. 아이코에게 작은 부탁 쓰기

‘게임 기록 사이트 다 고쳐줘’를 기능 하나와 확인할 결과 하나가 담긴 부탁으로 바꿔보세요.

예시 답 펼치기

예: “내 메모를 저장하고 다시 읽는 기능부터 고쳐줘. 새로고침해도 나오는지 확인해줘. 기존 권한 검사는 유지해줘.”

3. 확인한 것과 모르는 것 나누기

아이코가 “저장 요청에서 200을 받았어”라고 했어요. 저장한 메모의 복원과 다른 계정의 수정 차단까지 확인된 걸까요?

예시 답 펼치기

아니요. 성공 응답을 받았다는 보고만 있어요. 새로고침 뒤 복원과 다른 사용자의 수정 차단은 각각 확인해야 해요.

댓글

0

로그인 없이 남길 수 있어요. 작성한 브라우저에서 수정·삭제할 수 있어요.

전체 댓글 0

한국어 · English · 日本語

아직 댓글이 없어요. 첫 이야기를 남겨 주세요.

이 내용 공유하기