풀스택 CRUD API 실전 — CI4 + PostgreSQL로 REST API 완성
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. CI4의 ResourceController를 사용할 때 `GET /api/products`에 매핑되는 메서드는?
💡 CI4 ResourceController는 REST 규약에 따라 메서드를 자동 매핑합니다. GET /리소스 → index(), GET /리소스/:id → show(), POST /리소스 → create(), PUT /리소스/:id → update(), DELETE /리소스/:id → delete()로 매핑됩니다.
Q2. CI4 API에서 PostgreSQL JSONB 컬럼을 JSON 응답으로 올바르게 반환하는 방법은?
💡 PostgreSQL JSONB 컬럼은 PHP에서 JSON 문자열로 반환됩니다. 이를 그대로 응답 배열에 포함하면 CI4가 json_encode()를 한 번 더 적용하여 이중 인코딩이 발생합니다. 반드시 json_decode(값, true)로 PHP 배열로 변환 후 응답에 포함해야 합니다.
Q3. 대용량 데이터(수백만 건)에서 페이지네이션 성능을 개선하는 방법은?
💡 OFFSET N은 N개의 행을 읽고 버리는 방식이므로 N이 클수록 느려집니다. 커서 기반 페이지네이션은 마지막으로 본 행의 ID(또는 정렬 기준 값)를 커서로 사용하여 WHERE id > cursor 조건으로 인덱스를 타도록 합니다. 이 방식은 대용량에서 일관된 성능을 제공합니다.
Q4. CI4에서 입력 유효성 검사 실패 시 표준 REST API 응답 코드는?
💡 422 Unprocessable Entity는 요청 형식은 올바르지만 입력값의 의미적 유효성 검사에 실패했을 때 사용합니다. 400은 요청 형식 자체가 잘못되었을 때, 401은 인증 실패, 500은 서버 오류에 사용합니다. CI4의 $this->validate() 실패 시 422로 응답하는 것이 REST 표준에 맞습니다.
Q5. MyModel의 doDelete() 메서드가 수행하는 동작은?
💡 MyModel의 doDelete()는 실제로 데이터를 삭제하지 않고 deleted_at 컬럼에 현재 시각을 설정하는 소프트 삭제(Soft Delete)를 수행합니다. 이를 통해 데이터 복구와 감사 추적이 가능합니다. 조회 시에는 WHERE deleted_at IS NULL 조건을 항상 포함해야 합니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.