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

코린이님의 프로필 이미지
코린이

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Optimistic Response

Body로 인한 서버 리소스 관련

작성

·

107

0

항상 강의 잘 보고있습니다!

NestJS 강의를 보고 다시 중급 강의를 보다보니, 서버 관련된 부분을 더 이해하기 쉬웠습니다만,

이 섹션에서 PatchBasket을 요청할 때 body값에 object가 아닌 List로 요청을 보내기 때문에 추가하고싶은 상품정보 뿐만 아니라, 기존에 장바구니에 담겨있던 모든 상품들까지 같이 Patch요청이 되게 설계를 해 놓으셨더라구요.

현업에서도 보통 이런 방식을 사용하는건가요? 아니면 큰 의도 없이 설계하신건가요?

다른종류의 상품이 수십개가 존재할 경우, 리소스 낭비가 되지 않을까 해서 여쭤봅니다!

답변 2

1

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

안녕하세요!

변경하고싶은 부분만 따로 넣어도 됩니다.

API는 일종의 "약속"일 뿐이기 때문입니다.

예를들어서

 

GET /basket -> 장바구니의 아이템 모두 가져오기

GET /basekt/:id -> 장바구니에 있는 특정 아이템 가져오기

POST /basket -> 장바구니에 아이템 추가

PATCH /basket/:id -> 장바구니의 특정 아이템만 변경

DELETE /basket/:id -> 장바구니 특정 아이템을 삭제

 

이렇게 구현한다면 조금 더 정석적인 REST API가 될 수 있습니다.

서버에서 데이터를 어떤 구조로 관리하고 있는지도 고려할 필요 있습니다.

예를들어 SQL 데이터베이스를 사용중이라면 row별 트랜잭션 기능이 강력하기 때문에 위처럼 API를 짜는게 유리할 수 있겠지만 장바구니의 경우 상대적으로 중요한 데이터는 아니기 때문에 redis로 관리를 한다면 통째로 serialize 해버리는게 편할수도 있습니다.

이 경우 바디의 리소스 크기는 엄청 중요한 요소는 아니라고 생각합니다.

감사합니다!

0

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

패치 요청에서 전체 리스트를 보내는 방식은 상황에 따라 다릅니다. 이 방식은 상태가 서버와 클라이언트 사이에서 완벽하게 동기화될 필요가 있을 때 유용할 수 있습니다. 즉, 클라이언트가 서버의 상태를 정확히 알고 있고, 그 상태를 갱신하고자 할 때 이 방법을 사용할 수 있습니다. 하지만 말씀하신 것처럼 대규모의 데이터를 다룰 때는 이 방법이 서버 자원에 부담을 줄 수 있습니다.

실제 현업에서는 수정해야 할 데이터가 많지 않다면, 변경된 부분만 서버로 보내 업데이트하는 방식을 흔히 사용합니다. 이런 방식은 네트워크 사용량과 서버 처리량을 절약할 수 있어 효율적입니다. 예를 들어, 단일 항목 추가, 삭제 또는 수정 등의 작업이 이에 해당합니다.

디자인 패턴이나 아키텍처 선택은 개발의 맥락, 응용 프로그램의 요구 사항, 성능 목표 등 다양한 요인을 고려하여 결정됩니다. 따라서 특정 방식이 항상 옳다고 할 수는 없으며 각 상황에 맞는 최적의 해결책을 찾는 것이 중요합니다.

코린이님의 경우, 필요에 따라 이런 설계의 장단점을 고려하여 가장 적합한 방법을 선택하시면 될 것 같습니다.

코린이님의 프로필 이미지
코린이

작성한 질문수

질문하기