2023-08-21-TIL
Today I Learned
JSON vs Excel
데이터를 주고받는 형식을 비교한 내용이다. 링크한 글은 JSON과 CSV를 비교하는데, 엑셀로 열어 보는 표 형식 데이터라는 점에서 Excel 파일과도 같은 고민이다.
- CSV: 한 줄이 레코드 하나이고 필드를 쉼표로 나눈다. RFC 4180은 쉼표나 줄바꿈이 들어간 필드를 큰따옴표로 감싸고, 필드 안의 큰따옴표는 두 번 써서 표현한다고 정한다. 다만 이 RFC는 표준이 아니라 정보성 문서이고, 문서 스스로 구현마다 차이가 크다고 인정한다.
- JSON: RFC 8259가 정의한 텍스트 형식이다. 객체와 배열로 중첩 구조를 표현할 수 있고, 문자열, 숫자, 불리언, null을 구분한다. 시스템 사이에 주고받을 때는 UTF-8을 써야 한다.
- Excel(xlsx): Office Open XML 형식으로, ECMA-376이 어휘와 패키징 방식을 정의한다. 시트, 서식, 수식까지 담을 수 있지만 다른 프로그램이 읽으려면 전용 라이브러리가 필요하다.
정리하면 사람이 엑셀에서 바로 볼 데이터는 CSV나 xlsx가 편하고, 다른 시스템이 읽을 데이터는 타입과 구조가 보존되는 JSON이 낫다. CSV는 모든 값이 문자열이라서 숫자, 날짜, 빈 값을 어떻게 해석할지 받는 쪽과 따로 약속해야 한다.
- https://blog.datafiniti.co/4-reasons-you-should-use-json-instead-of-csv-2cac362f1943
Amazon SQS Message Deduplication ID
메시지 큐에서 같은 메시지가 두 번 들어가는 일은 생각보다 쉽게 생긴다. 생산자가 메시지를 보냈는데 응답을 못 받으면 다시 보내기 때문이다. SQS FIFO 큐는 이를 위해 MessageDeduplicationId를 제공한다.
AWS 문서에 따르면 이 값은 FIFO 큐에서만 쓰는 토큰이다. 5분의 중복 제거 구간 안에서 같은 ID를 가진 메시지는 한 번만 전달된다. 같은 ID로 다시 보낸 메시지는 성공으로 응답하지만 소비자에게는 전달하지 않는다. 메시지를 받아서 삭제한 뒤에도 SQS는 그 ID를 계속 추적한다.
그래서 재시도해도 같은 ID를 보내도록 만드는 것이 중요하다. 주문 번호처럼 업무적으로 유일한 값을 ID로 쓰면 생산자가 몇 번을 재시도하든 큐에는 한 번만 들어간다. 반대로 5분이 지난 뒤의 재전송은 막지 못하고, 표준 큐에서는 이 기능을 쓸 수 없으므로 소비자 쪽의 멱등 처리는 여전히 필요하다.
- https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/using-messagededuplicationid-property.html
- https://aws.plainenglish.io/sqs-lessons-learned-improve-performance-and-cutting-costs-86a9d8fb7b39
- https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-best-practices.html
- https://saturncloud.io/blog/improving-amazon-sqs-performance-a-guide/
이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.
댓글
아직 댓글이 없습니다