[server] 데이터의 멱등성
데이터베이스의 업데이트 작업이 멱등적이라면, 동일한 업데이트 명령을 여러 번 실행해도 데이터베이스의 상태는 처음 업데이트를 실행한 후와 같다. 만약 어떤 요청이 중간에 실패하거나 중복 실행되어도, 최종 결과에 영향을 주지 않기 때문에, 멱등성은 시스템의 안정성과 신뢰성을 높이는 데 기여한다.
① GET
- 멱등하다 : GET 메소드는 서버에서 리소스를 조회할 때 사용된다. 데이터를 변경하지 않고 리소스의 정보를 가져오기만 하기 때문에, 같은 GET 요청을 여러 번 수행해도 서버의 상태에는 변화가 없다.
② POST
- 멱등하지 않다 : POST 메소드는 서버에 데이터를 생성하거나 제출할 때 사용된다. 예를 들어, 사용자가 폼을 제출하거나 새로운 리소스를 생성할 때 주로 사용된다. 같은 POST 요청을 여러 번 수행하면, 동일한 데이터의 복사본이 여러 개 생성될 수 있으므로 멱등하지 않다.
③ PUT
- 멱등하다. :PUT 메소드는 서버의 특정 리소스를 요청 본문의 내용으로 완전히 대체할 때 사용된다. 예를 들어, 기존 리소스를 새로운 데이터로 업데이트할 때 사용하며, 같은 PUT 요청을 여러 번 수행해도 최종적으로 서버의 상태는 마지막 요청의 상태를 반영하므로 멱등하다.
④ DELETE
- 멱등하다. : DELETE 메소드는 서버의 특정 리소스를 삭제할 때 사용된다. 리소스를 삭제한 후 같은 DELETE 요청을 다시 수행해도 이미 삭제된 리소스는 영향을 받지 않으므로 서버의 상태는 변경되지 않는다.
⑤ PATCH
- 경우에 따라 다름, 기본적으로는 멱등하지 않다고 본다. : PATCH 메소드는 리소스의 일부분만을 수정할 때 사용된다. 이 메소드의 멱등성은 요청의 내용에 따라 달라질 수 있다. PATCH 요청이 항상 동일한 결과를 보장하기 위해서는 구현 방식에 따라 멱등하게 설계되어야 한다. 예를 들어, 리소스의 특정 필드에 숫자를 추가하는 작업은 여러 번 실행하면 값이 계속 변경될 수 있어 멱등하지 않는다.
2)데이터베이스의 멱등한 쿼리
같은 쿼리를 여러 번 실행해도 데이터베이스의 상태에 동일한 결과를 초래하는 SQL 명령을 말한다. 이러한 쿼리는 시스템의 안정성과 예측 가능성을 높이는 데 도움이 된다.
① 업데이트 쿼리 : 업데이트 쿼리는 특정 조건을 충족하는 데이터에 대해 일정한 값으로 설정할 때 멱등할 수 있다.
② 삭제 쿼리 : 삭제 쿼리는 데이터를 삭제할 때 사용되며, 삭제된 데이터에 대해서는 더 이상 영향을 미치지 않는다.
③ 삽입 쿼리 : 삽입 쿼리는 기본적으로 멱등하지 않는다. 같은 데이터를 여러 번 삽입하면 중복 데이터가 생긴다.
④ 조건부 쿼리 : 특정 조건에 따라 작업을 실행하는 쿼리는 조건에 따라 멱등할 수 있다.
① 성능 이슈
멱등성을 확보하기 위해서는 추가적인 조건 검사나 데이터베이스 쿼리가 필요할 수 있다. 예를 들어, 멱등한 삽입을 보장하기 위해 중복 키를 검사하고 조건에 따라 업데이트를 실행해야 할 수 있다. 이러한 추가 작업은 데이터베이스의 성능에 영향을 줄 수 있다.
② 복잡성
멱등성을 설계하고 유지 관리하는 과정은 시스템의 복잡성을 증가시킬 수 있다. API나 데이터베이스 스키마를 설계할 때 멱등성을 고려하면 로직이 복잡해지고, 이로 인해 코드의 가독성과 유지 관리성이 저하될 수 있다.
③ 상황에 따른 한계
사용자 입력이나 외부 시스템과의 상호작용을 포함하는 동적인 상황에서는 멱등성을 보장하기 어려울 수 있다.
[Spring / Java] 스프링 빈의 생명주기 (0) | 2024.04.15 |
---|---|
[Spring/Java] Spring Boot 구동 원리 - Dispatcher Servlet (0) | 2024.04.14 |
[server] spring jpa에서 'ordinal' 왜 사용 안할까? (@Enumerated(EnumType.STRING) /@Enumerated(EnumType. ORDINAL) ) (0) | 2024.04.14 |
[Spring/Java] Java record (0) | 2024.04.04 |
[Spring/Java] 스프링의 의존성 주입 방식 (DI) (0) | 2024.04.04 |
댓글 영역