본문 바로가기

School/프로젝트 실습

프로젝트 실습 5주차 (2022. 04. 27. ~ 2022. 05. 03.)

이번 주에는 이런저런 작업을 되게 많이 한 것 같다. 백엔드 쪽 코드를 수정하면서 느낀 건데 처음에 코드를 잘못 짜도 한참 잘못 짰던 것 같다.

 

  • 현재 개발 상황
    • Front-End
      게시글 수정 페이지 퍼블리싱
      게시글 삭제 API를 이용하여 본인의 글을 삭제하는 기능 추가
      게시글 수정 API를 이용하여 본인의 글을 수정하는 기능 추가
    • Back-End
      게시글 수정 API Error 해결
      게시글 가져오는 API Response Data 수정 (본인 글인지 아닌지 알려주는 Response Data 추가)

아래 글들은 이번주에 개발을 하면서 생겼던 문제나 새롭게 알게 된 것을 적었다.

 

  • 전체적인 API 토큰 존재 여부 확인 Error
    • 기존에 프론트엔드에서 http 요청을 할 때 헤어에 Authorization을 넣어서 보내면 백엔드에서 처리할 수 있도록 토큰이 필요한 API에 로그인 여부와 로그아웃 여부를 확인하는 코드를 추가해두었었다. 
    • API를 테스트 하면서 한번 실수로 헤더에 Authorization을 넣지 않고 API 요청을 했는데 백엔드 측에서 500 INTERNAL SERVER ERROR가 떴다. 무슨 오류인지 백엔드 로그를 확인해보니 AttributeError를 띄웠다. 그래서 헤더에 값을 넣지 않고 보냈을 경우의 Error도 처리를 하였다.
# 서버에서 토큰이 필요한 요청을 받았을 때 토큰 존재 여부를 확인하는 코드 (개선 전)
if not request.user.is_authenticated or request.user.is_anoymous:
  return Response(
    status=status.HTTP_401_UNAUTHORIZED,
    data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
  )

 

# 서버에서 토큰이 필요한 요청을 받았을 때 토큰 존재 여부를 확인하는 코드 (개선 후)
try:
  if not request.user.is_authenticated or request.user.is_anoymous:
    return Response(
      status=status.HTTP_401_UNAUTHORIZED,
      data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
    )
except AttributeError:
  return Response(
    status=status.HTTP_401_UNAUTHORIZED,
    data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
  )

 

 

  • 게시글 수정 API Error
    • 예전에 게시글 수정을 위한 API 코드를 작성해두었었다. 이번에 게시글 수정 API를 프론트엔드와 연동을 하면서 API를 사용해보았는데, TypeError가 떴다. 무슨 문제인가 싶어서 구글링을 하여 DB에 저장하는 코드를 비교해보니 내가 작성한 코드가 잘못 작성하였던 것이다.
      내가 작성한 코드는 테이블에서 하나의 데이터를 가져와 그 데이터를 수정하는게 아니라 테이블 전체를 대상으로 수정을 하려는 코드였다. 다행히 테이블 안의 하나의 데이터로 특정 지어 수정을 하니 잘됐다.
# 오류가 생겼던 코드
def put(self, request):
  try:
    if not request.user.is_authenticated or request.user.is_anoymous:
      return Response(
        status=status.HTTP_401_UNAUTHORIZED,
        data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
      )
except AttributeError:
  return Response(
    status=status.HTTP_401_UNAUTHORIZED,
    data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
  )

try:
  content = request.data['content']
except (KeyError, ValueError):
  return Response(
    status=status.HTTP_400_BAD_REQUEST,
    data=BAD_REQUEST_400(message='Some Values are missing.')
  )

Post.content = content
Post.save()

return Response(
  status=status.HTTP_200_OK,
  data=OK_200(message='글이 성공적으로 수정되었습니다.')
)

 

# 오류를 해결한 코드
def put(self, request):
  try:
  if not request.user.is_authenticated or request.user.is_anonymous:
    return Response(
      status=status.HTTP_401_UNAUTHORIZED,
      data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
    )
except AttributeError:
  return Response(
    status=status.HTTP_401_UNAUTHORIZED,
    data=INVALID_TOKEN(message='토큰이 존재하지 않습니다.')
  )

try:
  post_data = Post.objects.get(primaryKey=request.data['post_idx'])
except ObjectDoesNotExist:
  return Response(
    status=status.HTTP_400_BAD_REQUEST,
    data=BAD_REQUEST_400(message='존재하지 않는 게시글입니다.')
  )

try:
  content = request.data['content']
except (KeyError, ValueError):
  return Response(
    status=status.HTTP_400_BAD_REQUEST,
    data=BAD_REQUEST_400(message='Some Values are missing.')
  )

if post_data.user.unique_id == request.user:
  post_data.content = content
  post_data.save()

  return Response(
    status=status.HTTP_200_OK,
    data=OK_200(message='게시글이 성공적으로 수정되었습니다.')
  )
else:
  return Response(
    status=status.HTTP_401_UNAUTHORIZED,
    data=INVALID_TOKEN(message='사용자의 게시글이 아닙니다.')
  )

 

아직은 백엔드쪽 지식이 너무나도 부족한 것 같다. 꾸준히 더 공부해봐야겠다.