클라이언트에 적절한 상태코드를 전달하자

Alex·2024년 12월 8일
0

Plaything

목록 보기
46/118

@AllArgsConstructor
@Getter
public enum ErrorCode implements CodeInterFace {

    SUCCESS("SUCCESS"),

    // USER 가입 or 로그인
    USER_ALREADY_EXISTS("USER_ALREADY_EXISTS"),
    USER_SAVED_FAILED("USER_SAVED_FAILED"),
    NOT_EXIST_USER("존재하지 않는 회원입니다"),
    MIS_MATCH_PASSWORD("MIS_MATCH_PASSWORD"),

    //JWT 토큰
    TOKEN_IS_INVALID("TOKEN_IS_INVALID"),
    ACCESS_TOKEN_IS_NOT_EXPIRED("TOKEN_IS_NOT_EXPIRED"),
    TOKEN_IS_EXPIRED("TOKEN_IS_EXPIRED"),


    //프로필 사진 업로드
    EXTENSION_IS_INVALID("EXTENSION_IS_INVALID"),
    SIZE_IS_INVALID("SIZE_IS_INVALID"),
    CONTENT_TYPE_IS_INVALID("CONTENT_TYPE_IS_INVALID"),
    IMAGE_SAVED_FAILED("IMAGE_SAVED_FAILED"),
    EXCEED_IMAGE_LIMIT("EXCEED_IMAGE_LIMIT"),
    NO_IMAGE_FAILED("NO_IMAGE_FAILED"),

    //프로필 조회 or 등록
    NOT_EXIST_PROFILE("프로필이 존재하지 않는 회원입니다"),
    PROFILE_REGISTER_FAILED("PROFILE_REGISTER_FAILED"),
    PROFILE_ALREADY_EXIST("PROFILE ALREADY EXIST"),
    NOT_EXIST_PROFILE_RECORD("NOT EXIST PROFILE RECORD"),
    NOT_AUTHORIZED_PROFILE("부적절한 프로필로 비활성화된 회원입니다"),

현재 이런식으로 커스텀 예외를 만들어서 사용하고 있다.
그런데, 클라이언트에서 이렇게만 보내지말고 각각 일반적인 의미의 Http 상태코드로 내려달라는 요청을 했다.

이렇게 해본 적이 없어서 하나씩 공부하면서 상태코드를 맵핑하기로 했다.

already exist는 409 코드

The 409 (Conflict) status code indicates that the request could not be completed due to a conflict with the current state of the target resource.

409코드는 타겟 리소스의 현재 상태와 충돌될 때 쓰는 응답 코드다. 이미 존재하는 리소스를 다시 만들려고 할 때 쓸 수 있다.

데이터를 찾을 수 없다면 NOT_FOUND 404코드

영한샘이 말해주신 걸 보면 특정 데이터가 없을 때는 404코드로 처리한다.

유효한 인증 자격 증명이 없으면 401 코드

비밀번호를 잘못입력했을 경우 401 코드를 내려준다.

인증은 됐지만 권한이 없으면 403코드

프로필 사진 때문에 ban이 된 회원의 활동은 403 forbidden을 내려준다.

요청은 이해하지만 처리할 수 없으면 422 코드

매칭을 요청했는데 사진이나 프로필이 없는 경우(비즈니스 로직) 매칭 요청이 실패한다. 이때 422 UNPROCESSABLE_ENTITY를 내려준다.

너무 잦은 요청은 429 코드

광고 쿨타임이 아직 안 끝났을 때 요청을 보내면 429코드다.

리소스는 있지만 접근이 불가능할 때 410 코드

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글