본문 바로가기
TIL&WIL

241120 TIL - Array.slice(), HTTP메서드 PUT & PATCH, 멱등성

by 나노다 2024. 11. 20.

Array.slice()

arr.slice([begin[, end]])

arr란 배열의 begin부터 end 전까지에 대한 얕은 복사본을 새로운 배열 객체로 반환.

- 복사한 배열 내부의 기본형 데이터(문자형, 숫자형 등)을 변경해도 원본 배열에 영향을 미치지 않지만, 내부의 참조형 데이터(객체, 배열 등)을 수정한다면 원본 배열의 요소도 변경됨.

- end 인덱스의 요소는 포함하지 않으며, 메서드 실행 시점에선 원본 배열에 영향을 미치지 않음.

  • begin : 추출 시작점의 인덱스
  • end : 추출 종료점의 인덱스. 하지만 end 인덱스 요소는 제외하고 추출

begin이나 end가 음수 값인 경우, 입력된 인덱스를 역순 기준으로 추출함

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(-2));
// Array ["duck", "elephant"], 뒤에서부터 2번 인덱스까지 추출
console.log(animals.slice(2, -1));
// Array ["camel", "duck"], 앞에서 2번 인덱스부터 뒤에서 1번 인덱스 전까지 추출

 

begin이 undefined인 경우, 원본배열의 처음부터 추출 

end가 undefined인 경우, 원본배열의 끝까지 추출

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice());
// Array ["ant", "bison", "camel", "duck", "elephant"]

 

begin이 arr.length 보다 큰 경우, 빈 배열을 반환

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(10));
// Array []

 

put()

HTTP 요청 메서드인 PUT은 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체

- PUT 메서드의 요청은 리소스 전체를 업데이트하는 내용이기 때문에, 일부를 수정하고 싶다면 전체 필드(key) 데이터를 요청 본문(body)에 포함해야함. 포함되지 않은 필드의 데이터는 null이 돼버림

- 강의에서 쓰던 메서드는 Express.js에 내장된 메서드 put()

- PUT은 멱등성을 가짐. 한 번을 보내던 여러 번을 연속해 보내던 같은 효과 (= 부수 효과가 없음)

- 대상 리소스를 나타내는 데이터가 없는 경우 이를 생성하고, 데이터가 있다면 요청에 따라 수정함. 전자의 기능은 POST와, 후자의 기능은 PATCH와 유사하지만, 둘과의 차이는 멱등성에 있음

patch()

HTTP 요청 메서드인 PATCH는 리소스의 부분적인 수정을 할 때 사용

- PATCH 메서드의 요청은 리소스의 부분을 업데이트하는 내용이기 때문에, 변경을 원치 않는 필드는 요청 본문에 포함하지 않아도 됨.

- 강의에서 쓰던 메서드는 Express.js에 내장된 메서드 patch()

 

멱등성

동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 갖고, 서버의 상태도 동일하게 남을 때 해당 HTTP 메서드가 멱등성을 가졌다고 함.

- 예를 들어, 멱등성이 없는 POST로 데이터를 생성한다면, 동일한 요청이 여러 번 있을 때 그만큼의 데이터가 생성되지만, 멱등성을 가진 PUT으로 데이터를 생성한다면, 아무리 여러 번 같은 요청을 해도 본문에 포함된 데이터 하나만 생성됨.

- 멱등성을 가진 메서드엔 어떠한 부수효과(side effects)도 존재해선 안 됨. 부수효과란 서버에 의도하지 않은 변화가 발생함을 의미함