서버가 64비트 정수를 JSON 숫자로 보냈습니다. 모든 클라이언트가 같은 값을 보존하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
JSON 문법의 숫자와 각 언어의 숫자 표현 범위는 다릅니다. 클라이언트가 부동소수점 Number로 파싱하면 큰 정수의 정밀도를 잃을 수 있어 API의 범위와 표현을 명시해야 합니다.
동작 원리와 전제
식별자는 계산보다 정확한 동일성이 중요하므로 문자열로 전달하는 선택이 단순할 수 있습니다. 금액은 최소 단위 정수나 decimal 문자열과 통화·스케일을 정의합니다. 파싱 뒤 큰 정수 타입으로 변환해도 이미 잃은 값은 복원되지 않습니다.
선택과 실패 처리
NaN·Infinity·지수 표기·소수·음수 0 같은 표현의 지원과 의미도 확인합니다. 스키마에 integer라고 적었다고 모든 언어 라이브러리가 같은 범위로 처리하지는 않습니다. 로그·DB·프런트엔드 왕복 전체에서 검증합니다.
구체적인 사례와 검증
서버의 int64가 브라우저 Number보다 큰 정확한 정수 범위를 갖는 경우가 흔합니다. JSON 문법이 해당 숫자를 허용해도 client가 정확히 보존하는지는 별도입니다. 식별자를 string으로 바꿀 때는 구버전 client의 숫자 비교·정렬·스키마 검사가 깨질 수 있어 새 필드나 호환 기간을 둡니다. 금액은 통화와 scale을 함께 정의하고 소수 문자열의 허용 형식을 제한합니다. 지수 표기를 숫자로 파싱해 다시 쓰는 과정에서 표시가 바뀌어도 의미가 같은지, 서명 입력의 원문이 필요한지 구분합니다. 정밀도·파싱·정규화·서명은 같은 하나의 문제로 처리하지 않습니다.
최대 안전 정수 주변·64비트 경계·소수 금액·다국어 client를 시험합니다. 숫자를 문자열로 바꾸는 API 변경은 정렬·유효성·구버전 소비자에 영향을 줄 수 있어 호환 전환이 필요합니다. 형식보다 실제 값 보존이 기준입니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 핵심 구분: JSON 문법의 숫자와 각 언어의 숫자 표현 범위는 다릅니다.
- 선택 조건: NaN·Infinity·지수 표기·소수·음수 0 같은 표현의 지원과 의미도 확인합니다.
- 검증 기준: 최대 안전 정수 주변·64비트 경계·소수 금액·다국어 client를 시험합니다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- JSON의 integer 스키마가 모든 언어에서 64비트 정밀도를 보장한다고 한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 큰 ID를 Number로 파싱하기 전에 어떤 표현으로 정밀도를 보존해야 하나요?
- 파싱은 성공하지만 새 필드·상태의 의미를 구버전이 잘못 해석하면 어떤 전환이 필요한가요?
- 로컬 객체 표현 대신 외부 바이트 형식의 크기·순서·정렬을 어떻게 명시하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.