inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조

Q. REST API란 무엇인가요? ★★★

REST API (Self-descriptive messages)

17

이동헌

작성한 질문수 2

0

안녕하세요 강의 잘 듣고 있습니다.

 

실습에서 '/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 객체/구조 아님)

즉, 헤더와 실제 데이터가 불일치합니다.

클라이언트 입장에서 보면:

  1. “JSON이네?” → JSON 파싱 시도

  2. 그런데 실제 데이터는 JSON 형식이 아님

  3. 파싱 오류 또는 예상과 다른 동작 발생

이 상황은 메시지만 보고는 제대로 해석할 수 없습니다.
즉, 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