🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

웹과 앱의 상태코드

21.08.06 17:47 작성 조회수 233

0

안녕하세요. 양질의 강의 잘 듣고 있습니다.
안드로이드와 스프링 쪽만 건드려봐서 저는 웹 쪽의 지식이 거의 없습니다. 스프링으로 API를 만들어서 웹이 아닌 애플리케이션클라리언트에게 데이터를 넘길 때도 지금 설명하시는 HTTP 상태코드 스펙(100번대 ~ 200번대)을 사용하나요?
지금 약간 혼동이 오는 게 제가 옛날에 교육 받은 곳에서는 아래와 같이 상태 코드를 직접 만들어서 클라이언트와 통신했거든요.. 그럼
아래와 같은 방식으로 하는 건 업계에서 쓰이는 표준을 지키지 않은 건가요?
(아래 코드는 상태 코드와 요청에 대한 응답 예시입니다.)
package com.example.demo.config;

import lombok.Getter;

/**
* 에러 코드 관리
*/
@Getter
public enum BaseResponseStatus {
/**
* 1000 : 요청 성공
*/
SUCCESS(true, 1000, "요청에 성공하였습니다."),


/**
* 2000 : Request 오류
*/
// Common
REQUEST_ERROR(false, 2000, "입력값을 확인해주세요."),
EMPTY_JWT(false, 2001, "JWT를 입력해주세요."),
INVALID_JWT(false, 2002, "유효하지 않은 JWT입니다."),
INVALID_USER_JWT(false,2003,"권한이 없는 유저의 접근입니다."),
EMPTY_REQUEST_DATA(false, 2004, "요청한 값이 DB에 없습니다(empty)"),

// users
USERS_EMPTY_USER_ID(false, 2010, "유저 아이디 값을 확인해주세요."),
USERS_NO_LOGIN(false, 2011, "로그인을 해주세요"),
USERS_INVALID_USER(false, 2012, "존재하지 않거나 적절하지 않은 사용자입니다. 유저 상태를 확인해주세요."),

// [POST] /users
POST_USERS_EMPTY_EMAIL(false, 2015, "이메일을 입력해주세요."),
POST_USERS_INVALID_EMAIL(false, 2016, "이메일 형식을 확인해주세요."),
POST_USERS_EXISTS_EMAIL(false,2017,"중복된 이메일입니다."),
POST_USERS_INVALID_GENDER(false, 2018, "잘못된 성별입니다."),
POST_USERS_EXISTS_NICKNAME(false, 2019, "중복된 닉네임입니다."),


/**
* 3000 : Response 오류
*/
// Common
RESPONSE_ERROR(false, 3000, "값을 불러오는데 실패하였습니다."),

// [POST] /users
DUPLICATED_EMAIL(false, 3013, "중복된 이메일입니다."),
FAILED_TO_LOGIN(false,3014,"없는 아이디거나 비밀번호가 틀렸습니다."),



/**
* 4000 : Database, Server 오류
*/
DATABASE_ERROR(false, 4000, "데이터베이스 연결에 실패하였습니다."),
SERVER_ERROR(false, 4001, "서버와의 연결에 실패하였습니다."),

//[PATCH] /users/{userIdx}
MODIFY_FAIL_USERNAME(false,4014,"유저네임 수정 실패"),

PASSWORD_ENCRYPTION_ERROR(false, 4011, "비밀번호 암호화에 실패하였습니다."),
PASSWORD_DECRYPTION_ERROR(false, 4012, "비밀번호 복호화에 실패하였습니다."),


/*
* 5000: webtoons
* */

INTEREST_WEBTOON_STATUS_INVALID(false, 5001, "알람 설정을 하기 위해, 관심 웹툰으로 우선 등록을 해주세요"),
INVALID_EPISODE_IN_WEBTOON(false, 5002, "해당 웹툰에 속한 에피소드가 아닙니다."),
INVALID_STARSCORE_VALUE(false, 5003, "별점 값을 다시 확인해주세요"),
ALREADY_EXISTS_STARSCORE(false, 5004, "이미 별점이 존재합니다"),
WEBTOONS_INVALID_WEBTOON(false, 5005, "존재하지 않는 웹툰이거나 적절하지 않는 요청입니다. 값을 확인해주세요"),
EPISODES_INVALID_EPISODE(false, 5006, "존재하지 않는 에피소드이거나 적절하지 않는 요청입니다. 값을 확인해주세요"),
HISTORIES_INVALID_HISTORY(false, 5007, "요청하신 기록이 존재하지 않습니다. 다시 확인해주세요"),
NO_PAID_EPISODE(false, 5008, "구매가 필요한 에피소드입니다. 구매 후 이용해주세요");

// 6000 : 필요시 만들어서 쓰세요



private final boolean isSuccess;
private final int code;
private final String message;

private BaseResponseStatus(boolean isSuccess, int code, String message) {
this.isSuccess = isSuccess;
this.code = code;
this.message = message;
}
{
    "isSuccess"true,
    "code"1000,
    "message""요청에 성공하였습니다.",
    "result": {
        "webtoonInfo": {
            "webtoonIdx"1,
            "color""#FF001D",
            "webtoonProfileImageUrl""https://imageUrl_신의탑_434×330",
            "webtoonName""신의탑",
            "author""SIU",
            "synopsis""자신의 모든 것이었던 소녀를 쫓아 탑에 들어온 소년 그리고 그런 소년을 시험하는 탑",
            "genre""판타지",
            "age""12세 이용가",
            "day""월요웹툰",
            "totalInterestNum"8,
            "isInterested"null,
            "alarm"null,
            "paidEpisodeNum"3
        },
        "episodeList": [
            {
                "episodeIdx"6,
                "thumbnailImageUrl""https://image~~",
                "title""3부 75화",
                "date""16일 후 무료",
                "avgStarScore"null,
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"2
            },
            {
                "episodeIdx"5,
                "thumbnailImageUrl""https://image~~",
                "title""3부 74화",
                "date""9일 후 무료",
                "avgStarScore"null,
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"2
            },
            {
                "episodeIdx"4,
                "thumbnailImageUrl""https://image~~",
                "title""3부 73화",
                "date""2일 후 무료",
                "avgStarScore"null,
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"2
            },
            {
                "episodeIdx"3,
                "thumbnailImageUrl""https://image~~",
                "title""3부 72화",
                "date""21.06.13",
                "avgStarScore""5.55",
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"0
            },
            {
                "episodeIdx"2,
                "thumbnailImageUrl""https://image~~",
                "title""3부 71화",
                "date""21.06.06",
                "avgStarScore""5.80",
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"0
            },
            {
                "episodeIdx"1,
                "thumbnailImageUrl""https://image~~",
                "title""3부 70화",
                "date""21.05.30",
                "avgStarScore""4.50",
                "isWatched"null,
                "isPaid"null,
                "isLastWatchedEpisode"null,
                "cookie"0
            }
        ]
    }
}

답변 1

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2021.08.06

안녕하세요. 김말이님, 공식 서포터즈 OMG입니다.

김말이님이 학원에서 배운 방식은 웹의 표준이 아닌 임의로 상태코드라고 칭하고 클라이언트한테 제공한 것으로 보입니다.

예를 들어 김말이님과 저랑 서로 약속된 규칙으로 카톡에 1을 보내면 까페에서 만나는거고 2를 보내면 지하철역에서 만나자고 약속을 정하고

카톡을 주고 1과 2로 약속장소를 주고 받는 것이라고 이해하시면 되겠습니다.

이 약속은 김말이님과 저와의 약속으로 정한 것이기 때문에 표준이라 칭할 수도 없고 사용하지도 않을 것입니다.

감사합니다. 

강성욱님의 프로필

강성욱

질문자

2021.08.07

답변해주셔서 감사합니다! 이거 때문에 너무 혼란이 왔어요ㅜㅜ

혹시 그렇다면 웹과 앱의 상태코드 전달 방식은 다른 건가요? 물론 서버 개발자와 클라이언트 개발자 간에 약속으로 달라질 수 있겠지만 현업에서 '일반적으로' 웹과 달리 앱은 상태 코드를 별도로 만들어서 사용하나요?

OMG님의 프로필

OMG

2021.08.07

혹시 그렇다면 웹과 앱의 상태코드 전달 방식은 다른 건가요?  

=> 응답헤더에 담아서 전송하는것은 동일합니다.

웹과 달리 앱은 상태 코드를 별도로 만들어서 사용하나요?

=> 필요에 따라 상태코드를 별도로 만들수는 있을 것 같습니다. 하지만 만들어져있는 것을 활용하되 특수한 경우에 따라 만들겠지요.

 

또한 안드로이드의 경우 사용하는 라이브러리가 구현한 동작에 맞춰서 개발을 해야 될 수도 있습니다.

참고

HTTP 통신 & Retrofit (velog.io)

[Android] 안드로이드 - 레트로핏 errorbody() 파싱하기 (tistory.com)

김말이님의 프로필

김말이

2021.08.07

항상 상세히 알려주셔서 감사합니다 OMG님!!

채널톡 아이콘