oz_externship - update

김기훈·2025년 12월 20일

부트캠프 프로젝트

목록 보기
25/39

  • 질문 수정("/api/v1/qna/questions/{question_id}")

    • 웹사이트 이용자 중 수강생 권한을 가진 로그인 유저는 질의응답 메뉴로 접속하여
      • 자신이 작성한 질문 내용을 수정 가능
    • 질의응답 상세 페이지 내에 위치한 수정하기 버튼을 클릭하여 해당 질문 내용을 수정 가능
    • 수정하기 버튼은 작성자 본인외에 노출되지 않아야 함
    • 수정 가능한 항목

      • 제목
      • 질문 내용 ( 마크다운 문법 사용 가능, 이미지 첨부 가능 )
      • 카테고리
      • 내용에 첨부된 이미지들"

Error Response Example

{
  "400": {
    "error_detail": "유효하지 않은 질문 수정 요청입니다."
  },
  "401": {
    "error_detail": "로그인한 사용자만 질문을 수정할 수 있습니다."
  },
  "403": {
    "error_detail": "본인이 작성한 질문만 수정할 수 있습니다."
  },
  "404": {
    "error_detail": "해당 질문을 찾을 수 없습니다."
  }
}

Request Body

{
  "title": str,
  "content": str,
  "category_id": bigint,
  "image_urls": [str]
}

Success Response Schema

{
  "question_id": bigint,
  "updated_at": str
}

특이사항

service

    # 403 - 작성자 검증 (Service 책임)
    if question.author_id != author_id:
        raise PermissionDenied(
            EMS.E403_OWNER_ONLY_EDIT("질문")["error_detail"]
        )
  • 서비스에서 403 처리를 하는 이유

    • DRF 공식 기준에서 Permission은 “이 요청을 이 View에 대해 수행할 수 있는가?”를 판단
구분판단 주체
로그인 여부Permission
역할(ST/AD 등)Permission
이 객체의 소유자인가상황에 따라 다름
  • 객체 권한을 Permission에서 처리하기 위해서는 아래의 조건 충족 필요

      1. View가 객체를 조회하고
      1. self.check_object_permissions(request, obj)를 호출하고
      1. has_object_permission()을 구현해야 함
      • Permission 단계에서는 question 객체가 존재하지 않음
      • 즉, “이 질문의 작성자인가?”를 판단할 정보가 없다
상황정석
로그인 안 함Permission (401)
역할이 안 맞음Permission (403)
이 리소스의 소유자인가Service 또는 Object Permission
데이터 상태 기반 제약Service
도메인 규칙Service
  • 요약

    • “작성자 여부는 질문 객체가 필요한 도메인 규칙이라 Service에서 검증하도록 했고,
      • Permission은 인증과 역할만 담당하게 분리했습니다.”
    • “수정 권한은 Service에서 도메인 규칙으로 검증하고,
      • Permission은 인증·역할만 담당하도록 책임을 분리했습니다.”


구현 상태

이미지 처리

  • “수정 요청에 image_urls가 포함된 경우에만” 기존 이미지가 전부 삭제된다.
    • 단순히 수정을 시작했다고 해서 자동으로 지워지지는 않는다.
  • 수정중 "image_urls" 키를 빈 리스트로 보내면 기존 이미지 전부 삭제 됨
profile
안녕하세요.

0개의 댓글