[GN#244] 소프트웨어 개발에서 배운 교훈들

2024-03-04 ~ 2024-03-10 사이의 주요 뉴스들

스웨덴 스톡홀름에서 30년 넘게 개발자로 일하고 있는 Henrik Warne가 "소프트웨어 개발에서 배운 교훈들"을 정리했습니다. 최소한의 기능만 갖춘 간단한 버전부터 작게 시작해서 확장하며, 로깅과 에러처리는 꼭 조기에 추가하고, 변경은 한 번에 하나씩 해야 문제를 찾기 쉬우며, 세상 모든 일이 그렇지만 특히 프로그래밍은 생각보다 오래 걸린다는 것을 염두에 두라고 이야기합니다. "처음부터 올바르게"라는 접근 방식보다는 "버그는 항상 존재한다"라는 생각을 가지는 게 좋고, 테스트와 문제 해결 시에 우연의 일치는 없다고 가정하고 더 조사하고 테스트해 봐야 하며, 채팅이나 메일보다는 대면으로 이야기하고, 누군가의 공로를 적극적으로 언급하라는 협력 방법까지 들어있습니다. "실용주의 프로그래머" 책을 통해 유명해진 "러버덕 디버깅"은 문제에 막혔을 때 그냥 동료에게 문제를 설명하는 것만으로도 해결책을 깨닫게 되는데 이게 놀라울 정도로 잘 동작한다며 추천합니다. 책 한 권으로 봐야 할 내용을 간추려서 본 느낌이었어요. 꼭 읽어보시기 바랍니다.

1BRC(1 Billion Row Challenge) 는 10억 행이 있는 텍스트 파일에서 온도 측정값을 읽어 관측소별 최소/평균/최대 온도를 최대한 빠르게 처리하는 챌린지입니다. 레드햇에서 Devezium 프로젝트를 이끌었던 Gunnar Morling이 제안한 것인데요. Java가 얼마나 빠른지 알아보기 위해 다양한 구현을 만들어보자는 취지로 시작한 것인데, 이게 흥미로웠는지 Rust, Go, C++ 등으로 다양한 구현들이 이어졌습니다. 심지어는 DuckDB 와 Postgres/Clickhouse 등에서 SQL로 처리하기도 했습니다. 그중에 "Ben Hoyt가 1BRC를 Go로 구현"하면서 1분 45초의 첫 구현부터, 최종 4초에 처리하기까지 9단계를 하나하나 설명한 글을 적었는데 매우 흥미롭습니다. 온도 파싱을 위해 strconv.ParseFloat을 제거하고 자체 코드로 바꿔서 35초가 빨라졌고, Go의 맵 대신 사용자 정의 해시테이블로 바꿔서 16초를 단축, 부동 소수점 연산을 피하고, bytes.cut 과 bufio.Scanner등을 제거하는 등 이런 모든 최적화를 다 결합한 뒤 병렬처리해서 3.99초 까지 단축했네요. 원래 Gunnar Morling의 Repo에는 GraalVM을 만든 Thomas Wuerthinger가 Java로 0.953초에 처리하는 코드도 제출했으니 한번 둘러보시기 바랍니다.

Feedback : 긱뉴스 위클리 어떻게 읽고 계신가요? 의견과 제안 부탁드려요

Show GN - 직접 만드신 오픈소스나, 재직중인 스타트업의 제품/서비스를 소개해주세요

Ask GN - 다양한 질문을 올려주세요.

✓ 사내 커뮤니케이션 도구에 GeekNews Bot을 추가해서 멤버들과 함께 새 글을 받아보세요
ㅤ→ Slack봇, 잔디봇, Teams봇, Discord봇, 구글 챗 봇, Swit 봇
긱뉴스는 RSS로도 구독 가능합니다
✓ 주위분들께 긱뉴스 위클리 - https://news.hada.io/weekly 뉴스레터를 추천해 주세요.


매주 월요일 아침, 지난 일주일간의 GeekNews 중 엄선한 뉴스들을 이메일로 보내드립니다.