GN⁺: 순수 SQL로 구현된 Advent of Code 2024
(databasearchitects.blogspot.com)-
순수 SQL로 Advent of Code 2024 도전
-
개요
- 필자는 올해 Advent of Code를 순수 SQL로 해결해보기로 결정했음.
- 이 경험은 문제를 다르게 생각하도록 강요하여 흥미로웠으며, 모든 문제를 SQL로 해결할 수 있었음.
- SQL은 의외로 사용하기에 쾌적한 경우가 많았음.
-
Day 11 예시
- 문제 입력을 포함한 전체 솔루션을 제시함.
- SQL에서 입력을 파싱하는 것은 약간 번거롭지만, 불가능하지는 않음.
- 알고리듬은 비교적 짧으며, 재귀적 필드 탐색을 수행함.
- SQL은 소규모 탐색 작업에 적합함.
-
다른 날의 도전
- Day 16에서는 필드의 최소 탐색 거리를 계산하는 유사한 작업을 수행함.
- SQL로 표현하기는 쉽지만, 평가가 비효율적임.
- 큰 입력을 처리할 때 많은 상태를 유지해야 하며, 200GB 이상의 메모리가 필요함.
- 일부 DBMS는 이 문제를 해결할 수 있는 기능을 제공하지 않음.
-
재귀 SQL의 한계
- Day 23에서는 희소 그래프에서 최대 클리크를 찾아야 했음.
- Bron-Kerbosch 알고리듬을 사용하면 되지만, 재귀 SQL로 표현하기는 복잡함.
- 재귀 SQL은 단일 집합만 전달할 수 있어 여러 집합을 유지해야 하는 알고리듬과 충돌함.
-
결론
- 복잡한 알고리듬을 SQL로 코딩하는 것이 가능하며, SQL 코드가 의외로 쾌적할 수 있음.
- 상태를 업데이트할 수 있는 메커니즘이 있다면 재귀 SQL이 더 효율적이고 사용하기 쾌적할 것임.
- 복잡한 상태 조작 메커니즘을 도입하면 SQL이 데이터베이스 내에서 복잡한 알고리듬을 실행하는 데 있어 강력한 선택지가 될 수 있음.
Hacker News 의견
- 새로운 메뉴 항목에 대한 반응은 욕망, 수치심, 인간의 창의력에 대한 감탄의 혼합임
- 경력 동안 SQL을 가장 많이 작성했으며, 최근 5년 동안은 덜 사용했지만 여전히 즐거웠음
- 반복적으로 생각하는 것을 멈추고 집합 연산으로 생각하기 시작하면 자연스럽고 강력해짐
- Google Sheets로 AoC를 시도했으며, Day 6까지 도달했지만 일부 입력에서 문자 제한에 부딪혔음
- 모바일에서 열지 말 것을 권장함
- 과거에 운영직 인터뷰에서 대규모 데이터셋의 인보이스 보고서를 작성하는 문제를 받았음
- 데이터 과학자가 아니어서 솔루션을 구성하는 데 어려움을 겪었음
- Crystal Reports 같은 보고서 패키지를 사용했을 것이라고 설명했음
- SQL로 문제를 해결했지만, 많은 기술이 필요함
- EdgeQL로 AoC를 시도했으며 흥미로운 경험이었음
- 관련 트윗을 공유함
- SQL로 큐빙/컨테이너화 시스템을 작성했으며, 일부 추가 기능을 사용했음
- 기본 알고리즘은 SQL의 기능과 잘 맞았음
- 몇 가지 측면은 SQL에 맞추기 어려웠음
- AoC2024를 Google Sheets로 작업 중이며, 이를 문서화할 계획임
- 순수 SQL로 작업하는 것은 인상적이며, 오래된 블로그를 유지하는 것이 "니치 마스터리"를 보여줌