REST API (Self-descriptive messages)
17
작성한 질문수 2
안녕하세요 강의 잘 듣고 있습니다.
실습에서 '/good' 은 Self-descriptive messages가 잘되어있고, '/bad'는 Self-descriptive messages가 잘 되어있지 않았다고 설명해주셨는데 강의 내용만 보고는 잘 이해가 안가서 이부분 좀 더 자세히 설명 듣고 싶습니다.
감사합니다.
답변 1
0
안녕하세요 동헌님 ㅎㅎ
핵심은 “헤더가 말하는 데이터 형식”과 “실제 바디 데이터”가 일치하느냐입니다. Self-descriptive messages는 이 두 개가 정확히 맞아야 성립합니다.
먼저 /good을 보면:
app.get('/good',(req, res) =>{
res.status(200).json({"a" : 1})
})
여기서 res.json()은 내부적으로 두 가지를 자동으로 처리합니다.
헤더:
Content-Type: application/json바디:
{ "a": 1 }(정상적인 JSON)
즉, 클라이언트 입장에서는
“이 응답은 JSON이다”라는 정보(헤더)와
“실제로도 JSON 데이터”(바디)가 일치합니다.
그래서 별도 설명 없이도 바로 JSON으로 파싱할 수 있습니다.
이게 Self-descriptive가 잘 된 상태입니다.
반면 /bad를 보면:
app.get('/bad',(req, res) =>{
res.setHeader('content-type', 'application/json');
res.send("큰돌이")
})
여기서 문제가 발생합니다.
헤더:
application/json→ “JSON이다”라고 선언바디:
"큰돌이"→ 단순 문자열 (JSON 객체/구조 아님)
즉, 헤더와 실제 데이터가 불일치합니다.
클라이언트 입장에서 보면:
“JSON이네?” → JSON 파싱 시도
그런데 실제 데이터는 JSON 형식이 아님
파싱 오류 또는 예상과 다른 동작 발생
이 상황은 메시지만 보고는 제대로 해석할 수 없습니다.
즉, Self-descriptive하지 않습니다.
Self-descriptive messages는
“헤더만 보면 이 데이터를 어떻게 처리해야 할지 확정할 수 있어야 한다”는 개념입니다.
/good→ 헤더를 믿어도 문제 없음/bad→ 헤더를 믿으면 오류 발생
그래서 /bad는 Self-descriptive 원칙을 깨는 사례입니다.
조금 더 실무적으로 보면 이렇게 이해하면 정확합니다.
Content-Type = 계약서
Body = 실제 납품물
/good → 계약서와 납품물이 일치/bad → 계약서는 JSON인데 실제는 엉뚱한 데이터
이 계약 불일치가 바로 Self-descriptive 위반이라고 보시면 됩니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
시스템 엔지니어 관련 질문입니다.
0
46
2
오버라이딩 관련하여 질문드립니다.
0
61
2
교착상태의 4가지 필요조건이 필요충분조건이 아닌 이유
0
88
1
렌더 트리, 렌더 레이어와 그래픽 레이어
0
54
2
로컬스토리지, 세션스토리지, 쿠키의 공통점
0
65
1
IPv4가 IPv6보다 빠른 경우
0
96
2
UDP가 전송계층의 역할을 못하는 건 아닌지
0
56
1
Path MTU 발견하였음에도 패킷 분할이 필요한 이유?
0
64
2
교재의 LFU 알고리즘에서 6번이 왜 히트인가요?
0
62
2
페이지 교체 알고리즘? 프레임 교체 알고리즘?
0
80
2
Static 키워드가 메모리에 올라가는 시점
0
74
2
헤더 압축부분 질문드립니다
0
71
2
공유 캐시 관련 질문 드립니다.
0
55
2
컨텍스트는 context와 contextual information으로 나눠진다는게 무슨뜻인가요?
0
197
1
회선과 대역폭의 관계
0
58
2
44강 질문
0
89
2
버스 토폴로지 질문 있씁니다
0
50
1
자바스크립트, xml 문법 관련
0
63
2
전략패턴과 의존성주입 질문
0
68
2
Model이 비즈니스 로직을 담당하나요?
0
104
2
CS 공부 하는 법
0
179
2
큰돌님 블로그에 개념정리해서 올려도될까요!
0
133
2
FIN 세그먼트 질문
0
69
2
flux 패턴 질문
0
66
2





