가상 기록 두 개 준비하기
이 글은 가상의 내용을 설명하는 문서형 학습 예제입니다. 아래 계정, 고객, 계약, 금액은 모두 가상입니다. 자신의 연습 프로젝트에서 이 항목들을 실행한 뒤 실제 결과를 기록할 수 있습니다.
| 연습 계정 | 조회를 허용한 고객 기록 | 계약 번호 | 금액 |
|---|---|---|---|
| A | A-001 | HT-A-01 | 10000 CNY |
| B | B-001 | HT-B-01 | 20000 CNY |
첫 버전은 로그인 후 기록 번호로 계약을 조회하고, 해당 계정에 허용된 기록만 보여주는 것입니다. 추가, 수정, 내보내기는 만들지 않습니다.
문제가 생길 수 있는 방식
로그인은 있지만 API가 입력한 기록 번호만으로 조회한다고 가정해 봅시다. A가 A-001을 넣으면 자신의 계약이 나오고, B-001을 넣어도 B의 계약이 반환됩니다.
이 가정에서는 조회에 데이터 접근 범위 제한이 빠져 있습니다. 화면에 A의 고객만 표시해도 API를 보호할 수는 없습니다. 요청을 다른 방식으로 보내거나 바꿀 수 있기 때문입니다.
서버에서 조회하는 순서
- 검증된 로그인 상태에서 현재 신원을 가져옵니다. 로그인하지 않았다면 제한된 자료 읽기를 거부합니다.
- 그 신원에 허용된 범위 안에서 입력 번호에 맞는 기록을 찾습니다. 요청자가 직접 적어 보낸 계정 신원을 그대로 믿지 않습니다.
- 볼 수 있는 기록이 없다면 계약 내용이 없는 안내를 반환합니다. 화면에는 ‘조회할 수 있는 자료를 찾지 못했습니다’라고 표시할 수 있습니다.
실제 시스템은 개인, 팀, 그 밖의 업무 규칙에 따라 권한을 줄 수 있습니다. 규칙부터 적고 알맞은 데이터 구조와 구현 방식을 선택하세요.
수정 뒤 실행할 테스트 계획
아래는 테스트 계획과 예상 결과입니다. 자신의 연습 프로젝트에서 실제로 실행해야 합니다.
| 로그인 상태와 조작 | 예상 결과 |
|---|---|
| A가 A-001 조회 | HT-A-01, 금액 10000 CNY 반환 |
| A가 B-001 조회 | B의 계약과 금액을 반환하지 않음 |
| B가 B-001 조회 | HT-B-01, 금액 20000 CNY 반환 |
| B가 A-001 조회 | A의 계약과 금액을 반환하지 않음 |
| 로그인 없이 A-001 직접 요청 | 읽기를 거부하고 계약 내용을 반환하지 않음 |
| A가 화면을 거치지 않고 B-001 직접 요청 | 여전히 권한을 검사하고 B의 자료를 반환하지 않음 |
| A가 존재하지 않는 번호 입력 | 명확한 안내를 표시하고 다른 계약 내용은 반환하지 않음 |
각 시험의 계정 역할, 입력, 실제 결과를 남기세요. 화면에 보이지 않는 다른 기록이 응답 안에 포함돼 있지 않은지도 확인해야 합니다. 화면 문구만 보면 API가 과도하게 반환한 데이터를 놓칠 수 있습니다.
조회 경로가 늘어나도 같은 규칙 적용하기
검색, 내보내기, AI 질의응답을 추가한다면 모든 경로에 같은 데이터 접근 범위를 적용하는지 확인하세요. AI가 답변 전에 읽을 수 있는 자료도 시스템의 권한으로 결정해야 합니다.
이 계획은 주로 계정 간 자료 읽기를 확인합니다. 전체 프로젝트에서는 입력 처리, 수정 권한, 로그, 배포, 백업 등도 실제 기능에 맞춰 점검해야 합니다. 배포 체크리스트로 해당 항목을 보완하고, 요구사항은 한 장의 작업 설명부터 작성하세요.
자주 묻는 질문
실제 고객 프로젝트인가요?
로그인이 있는데 왜 남의 자료를 볼 수 있나요?
이어 읽기
- 프로젝트 문제 점검하기 — 실제 조작과 환경에서 원인 찾기
- 배포 전 체크리스트 — 실제 기능에 맞는 점검 보완하기
- Vibe Coding과 업무 활용 — 요구사항, 실행, 확인, 재사용 이해하기