JSON 파서 구현 1 - 스캐너
Lex나 Yacc와 같은 스캐너/파서 생성기를 사용하지 않고 JSON 파서를 구현하는 방법을 2부에 걸쳐 정리하려 한다. 시리즈를 끝까지 읽고 나면, JSON 파서를 만드는 게 생각보다 어렵지 않음을 알게 될 것이다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
Lex나 Yacc와 같은 스캐너/파서 생성기를 사용하지 않고 JSON 파서를 구현하는 방법을 2부에 걸쳐 정리하려 한다. 시리즈를 끝까지 읽고 나면, JSON 파서를 만드는 게 생각보다 어렵지 않음을 알게 될 것이다.
간단한 작업을 할 때는 스크립트가 좋지만, 난해하며 기억하기 어려운 문법을 생각하면 Bash를 쓰고 싶지는 않다. Ruby나 Python 또는 JavaScript를 쓰는 것도 가능하긴 하다. 그러나 나는 Ruby나 Python을 별로 좋아하지도 않고 익숙하지도 않다. JavaScript는 조금 낫지만 파일 처리 API에는 익숙하지 않다.
'채소단'이란 말이 실제로 있는지는 모르겠다. 영어로는 bed, raised bed, 또는 vegetable planter라고 한다. 우리 말에는 화단이란 말은 있어도 채소단이란 말은 사전에 안 나온다. 그렇지만 화단은 아니니 여기서는 그냥 채소단이라 하겠다.
집 앞뒤로 조그만 뜰이 있다. 앞뜰은 주차 공간과 풀밭이 있고 나무가 한 그루 있다. 뒷뜰에도 잔디밭과 꽃밭이 있고 캐빈과 헛간이 있다. 관리를 제대로 못해서 잔디보다 잡초가 더 많이 자라고 있다.
CDK의 API는 AWS 콘솔의 입력 항목과 직관적 대응 관계가 있어야 할 것 같은데, 꼭 그렇지만은 않은 듯 하다. 여기서는 S3 버킷에 저장되어 있는 파일을 API Gateway를 통해 접근할 수 있도록 프락시 API Gateway를 CDK로 만들어보려 한다.
AWS CDK(Cloud Development Kit)는 프로그래밍 언어를 이용해 클라우드 인프라스트럭처를 정의할 수 있게 해 주는 도구다. CloudFormation 스크립트를 사용하는 것 보다 훨씬 쉽게 인프라스트럭처 컴포넌트를 정의하고 관계를 설정할 수 있다.
Java 8에 추가된 날짜/시간 관련 클래스 중 LocalDate
를 사용한 간단한 날짜 연산 방법을 정리한다. LocalDate
에는 시간 정보가 포함되어 있지 않다. 날짜와 시간을 함께 다루려면 LocalDateTime
을 사용해야 한다. UTC 오프셋이나 시간대도 함께 필요한 경우는 OffsetDateTime
또는 ZonedDateTime
을 사용해야 한다.
Java 8부터 새로운 날짜/시간 API가 추가되었다. 날짜/시간 관련 기능을 사용할 일이 생기면 어떤 클래스를 어떻게 사용해야 할지 생각나지 않는 경우가 많아 여기 각 클래스의 기본 사용법을 간단히 정리하려 한다.
콘솔에서 프로그레스 바를 그릴 때 요령은 행을 바꾸지 않고 같은 행에 텍스트를 계속 갱신하는 것이다. 프로그레스 바와 진행률을 제외하면 다른 텍스트는 바뀌지 않을 것이므로 \r
로 커서를 행의 처음으로 옮긴 후 새로운 텍스트로 덮어쓰면 프로그레스바가 깜박거리지 않을 것이다.
아내가 창문턱에 브로드밴드 라우터를 올려 놓았다. 좀더 안전한 곳에 라우터를 놓아야 한다고 말했다. 내가 보기엔 작은 실수로도 라우터가 떨어질 것 같았다. 잘못될 수 있는 일은 결국 잘못되기 마련 아닌가. 하지만 아내는 내 말을 듣지 않았다.