Published on

로그아웃 시 PATCH 방식과 DELETE 방식의 비교

Authors
  • avatar
    Name
    Hyo814
    Twitter

1. PATCH 방식으로 로그아웃

PATCH 메서드란?

PATCH 메서드는 자원의 일부분을 수정할 때 씁니다. 로그아웃에 적용하면 사용자의 상태를 '로그아웃'으로 바꾸는 식으로 구현합니다. 서버에 사용자의 상태를 '활성'에서 '비활성', 또는 '로그인'에서 '로그아웃'으로 업데이트하라는 요청을 보내는 셈입니다.

PATCH 방식의 예시

// 클라이언트에서 로그아웃 요청 (PATCH)
const logout = async () => {
  const response = await fetch('/api/logout', {
    method: 'PATCH',
    headers: {
      Authorization: `Bearer ${token}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ status: 'logged_out' }),
  })

  if (response.ok) {
    localStorage.removeItem('authToken')
    console.log('로그아웃 성공')
  } else {
    console.error('로그아웃 실패')
  }
}

PATCH 방식의 특징

  • 부분 업데이트: 자원의 일부만 수정하므로 효율적입니다.
  • 유연한 상태 관리: 로그아웃뿐 아니라 사용자 상태를 여러 단계로 다뤄야 할 때 잘 맞습니다.
  • 데이터 유지: 사용자의 세션 데이터를 남겨두거나 나중에 다시 활성화해야 할 때 유용합니다.

PATCH 방식의 장점

  • 부분적인 상태 업데이트: 자원 전체를 교체할 필요 없이 상태만 효율적으로 바꿉니다.
  • 상태 전환에 유리: 여러 상태를 유연하게 다룹니다.
  • 다양한 시나리오에 적합: 로그아웃 상태를 기록하거나 상태 전환이 필요한 상황에서 유용합니다.

PATCH 방식의 단점

  • 자원 제거가 아님: 로그아웃 후에도 세션이나 인증 정보가 서버에 남아 자원 낭비나 보안 위험으로 이어지기도 합니다.

2. DELETE 방식으로 로그아웃

DELETE 메서드란?

DELETE 메서드는 자원을 삭제할 때 씁니다. 로그아웃에 적용하면 사용자의 세션이나 인증 토큰을 지우는 식으로 구현합니다. 서버에서 세션이나 토큰이 사라지므로 더는 인증된 요청을 보낼 수 없습니다.

DELETE 방식의 예시

// 클라이언트에서 로그아웃 요청 (DELETE)
const logout = async () => {
  const response = await fetch('/api/logout', {
    method: 'DELETE',
    headers: {
      Authorization: `Bearer ${token}`,
    },
  })

  if (response.ok) {
    localStorage.removeItem('authToken')
    console.log('로그아웃 성공')
  } else {
    console.error('로그아웃 실패')
  }
}

DELETE 방식의 특징

  • 자원 삭제: 사용자의 세션이나 인증 토큰을 서버에서 완전히 지웁니다.
  • 보안에 유리: 로그아웃 후 인증 정보가 사라지므로 보안이 한층 단단해집니다.
  • 클린업 처리: 불필요한 데이터를 정리해 서버 자원을 효율적으로 관리합니다.

DELETE 방식의 장점

  • 자원 제거: 로그아웃 후 세션이나 인증 정보를 완전히 지워 접근을 차단합니다.
  • 보안 강화: 인증 관련 보안 위험을 최소로 줄입니다.
  • 자원 관리 최적화: 서버에 불필요한 데이터를 남기지 않습니다.

DELETE 방식의 단점

  • 부분 업데이트가 불가: 세션 상태를 유지해야 한다면 맞지 않습니다.
  • 데이터 복구 어려움: 한 번 삭제하면 되돌리기 어렵습니다.

3. PATCH vs DELETE 비교

특징PATCH 방식DELETE 방식
사용 목적자원의 일부를 수정 (상태 전환)자원 전체를 삭제 (세션, 토큰 삭제)
상태 관리다양한 상태로 유연하게 전환 가능자원 삭제로 상태 변경보다는 종료 처리
보안성자원을 유지하므로, 일부 세션 데이터가 남을 수 있음세션 삭제로 자원 접근 불가
자원 관리상태만 변경하여 자원이 남을 수 있음인증 정보를 삭제하여 자원 효율적 관리
적합한 상황상태를 기록하거나 유연하게 처리할 때인증 정보를 완전히 삭제하여 처리할 때

결론

  • PATCH 방식은 상태 관리가 중요한 애플리케이션에 어울리며, 사용자의 로그아웃 상태를 기록하거나 상태를 유연하게 전환해야 할 때 적합합니다.
  • DELETE 방식은 보안과 자원 관리를 중시하는 환경에 어울리며, 로그아웃 시 세션이나 인증 정보를 깔끔히 지워야 할 때 적합합니다.

구현 목적과 요구 사항에 맞춰 두 방식 중 알맞은 쪽을 골라 쓰면 됩니다.