Inflearn brand logo image

인프런 커뮤니티 질문&답변

ㄹㄹㄹ님의 프로필 이미지
ㄹㄹㄹ

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Patch Post 엔드포인트 생성하기

put 요청은 언제

작성

·

29

0

앞으로 나오는 put 요청은 모두 patch에 해당하고 수정하는 부분이 있다는데

언제쯤 나오나요?

지금 typeorm까지 들었는데도 계속 다른설명으로 나오고 수정되는 부분이 없는듯해요

쌩기초입문자라 너무 헷갈리는데..

 

  1. 그럼 put요청의 설명은 없었던건가요?

 

  1. typeorm의 updatePost의 save기능에서

1) 만약 데이터 존재하지않는다면 새로생성

2) 데이터 존재한다면 (같은 id)값을 변경

이라곤 하지만 NotFoundException() 처리를 하는걸로봐서 새로생성하지 않는 것 같은데요..

이것도 단순히 값만 변경하는 patch요청에 해당하는거 아닌가요?

답변 3

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

아래 답변 참고드립니다.

감사합니다!

0

115강에 patch로 수정하는 부분 나와요!

0

안녕하세요, 인프런 AI 인턴입니다. ㄹㄹㄹ님.

NestJS와 REST API에 대한 혼란이 있으신 것 같아 일부 개념을 정리해드리겠습니다.

PUT vs PATCH의 이해

  1. PUT 요청: 보통 리소스 전체를 업데이트하는 데 사용됩니다. 클라이언트가 리소스의 전체 상태를 서버에 보내며, 서버는 그 리소스를 생성(추가)하거나 전체를 변경하는 것을 기대합니다.

  2. PATCH 요청: 리소스의 일부만 변경하고자 할 때 사용합니다. 클라이언트는 리소스의 일부분만을 서버에 보내며, 서버는 지정된 부분만 업데이트합니다. 이는 부분적인 수정을 하는 데 더 적합한 방식입니다.

TypeORM의 save 기능과 NotFoundException

  • TypeORMsave 메소드는 해당 엔티티가 데이터베이스에 이미 존재하면 업데이트하고, 만약 존재하지 않는다면 새로 생성합니다. 그러나 코드에서 NotFoundException()을 이용해 특정 리소스를 찾지 못했을 경우 명시적인 에러를 던지도록 구현되어 있다면, 이는 서버의 응답 방식(여기서는 리소스를 새로 생성하지 않는 것)과 관련 있습니다.

즉, save 가 항상 새로운 엔트리를 생성하는 것이 아니라, 구현된 로직에 따라 다르게 동작할 수 있습니다. 예를 들어 다음과 같은 로직에서는 리소스를 생성하지 않습니다:

  async updateResource(id: number, data: UpdateDto) {
    const resource = await this.repository.findOne({ where: { id } });
    if (!resource) {
      throw new NotFoundException('Resource not found');
    }

    Object.assign(resource, data);
    return this.repository.save(resource);
  }

이 예에서는 리소스가 존재하지 않으면 예외를 발생시키고, 존재할 경우에만 업데이트가 진행됩니다. 따라서, 새로운 리소스를 생성하진 않습니다.

관련된 내용을 더 자세히 이해하기 위해 다음 질문들을 참고해보시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

ㄹㄹㄹ님의 프로필 이미지
ㄹㄹㄹ

작성한 질문수

질문하기