상세 컨텐츠

본문 제목

[server] 데이터의 멱등성(idempotency)

server

by 셉인 2024. 4. 14. 16:47

본문

728x90

[server] 데이터의 멱등성

 

데이터의 멱등성(idempotency)이란?
특정 작업을 여러 번 수행해도 결과가 한 번 수행했을 때와 동일하게 유지되는 성질. 여러 번 동일한 요청을 보내더라도, 최종 결과는 초기 요청과 동일하게 된다.

멱등성이 왜 필요한가?

데이터베이스의 업데이트 작업이 멱등적이라면, 동일한 업데이트 명령을 여러 번 실행해도 데이터베이스의 상태는 처음 업데이트를 실행한 후와 같다. 만약 어떤 요청이 중간에 실패하거나 중복 실행되어도, 최종 결과에 영향을 주지 않기 때문에, 멱등성은 시스템의 안정성과 신뢰성을 높이는 데 기여한다.

 

사용되는 곳

1) HTTP 메소드의 멱등성

① GET
- 멱등하다 : GET 메소드는 서버에서 리소스를 조회할 때 사용된다. 데이터를 변경하지 않고 리소스의 정보를 가져오기만 하기 때문에, 같은 GET 요청을 여러 번 수행해도 서버의 상태에는 변화가 없다.

② POST
- 멱등하지 않다 : POST 메소드는 서버에 데이터를 생성하거나 제출할 때 사용된다. 예를 들어, 사용자가 폼을 제출하거나 새로운 리소스를 생성할 때 주로 사용된다. 같은 POST 요청을 여러 번 수행하면, 동일한 데이터의 복사본이 여러 개 생성될 수 있으므로 멱등하지 않다.

③ PUT
- 멱등하다. :PUT 메소드는 서버의 특정 리소스를 요청 본문의 내용으로 완전히 대체할 때 사용된다. 예를 들어, 기존 리소스를 새로운 데이터로 업데이트할 때 사용하며, 같은 PUT 요청을 여러 번 수행해도 최종적으로 서버의 상태는 마지막 요청의 상태를 반영하므로 멱등하다.

④ DELETE
- 멱등하다. : DELETE 메소드는 서버의 특정 리소스를 삭제할 때 사용된다. 리소스를 삭제한 후 같은 DELETE 요청을 다시 수행해도 이미 삭제된 리소스는 영향을 받지 않으므로 서버의 상태는 변경되지 않는다.

⑤ PATCH
- 경우에 따라 다름, 기본적으로는 멱등하지 않다고 본다. : PATCH 메소드는 리소스의 일부분만을 수정할 때 사용된다. 이 메소드의 멱등성은 요청의 내용에 따라 달라질 수 있다. PATCH 요청이 항상 동일한 결과를 보장하기 위해서는 구현 방식에 따라 멱등하게 설계되어야 한다. 예를 들어, 리소스의 특정 필드에 숫자를 추가하는 작업은 여러 번 실행하면 값이 계속 변경될 수 있어 멱등하지 않는다.

2)데이터베이스의 멱등한 쿼리

같은 쿼리를 여러 번 실행해도 데이터베이스의 상태에 동일한 결과를 초래하는 SQL 명령을 말한다. 이러한 쿼리는 시스템의 안정성과 예측 가능성을 높이는 데 도움이 된다. 

 

① 업데이트 쿼리 : 업데이트 쿼리는 특정 조건을 충족하는 데이터에 대해 일정한 값으로 설정할 때 멱등할 수 있다.

삭제 쿼리 : 삭제 쿼리는 데이터를 삭제할 때 사용되며, 삭제된 데이터에 대해서는 더 이상 영향을 미치지 않는다.

삽입 쿼리 : 삽입 쿼리는 기본적으로 멱등하지 않는다. 같은 데이터를 여러 번 삽입하면 중복 데이터가 생긴다.

조건부 쿼리 : 특정 조건에 따라 작업을 실행하는 쿼리는 조건에 따라 멱등할 수 있다.

멱등성의 한계

① 성능 이슈

멱등성을 확보하기 위해서는 추가적인 조건 검사나 데이터베이스 쿼리가 필요할 수 있다. 예를 들어, 멱등한 삽입을 보장하기 위해 중복 키를 검사하고 조건에 따라 업데이트를 실행해야 할 수 있다. 이러한 추가 작업은 데이터베이스의 성능에 영향을 줄 수 있다.

② 복잡성

멱등성을 설계하고 유지 관리하는 과정은 시스템의 복잡성을 증가시킬 수 있다. API나 데이터베이스 스키마를 설계할 때 멱등성을 고려하면 로직이 복잡해지고, 이로 인해 코드의 가독성과 유지 관리성이 저하될 수 있다.

③ 상황에 따른 한계

사용자 입력이나 외부 시스템과의 상호작용을 포함하는 동적인 상황에서는 멱등성을 보장하기 어려울 수 있다.

728x90

관련글 더보기

댓글 영역