유연한 소프트웨어를 만드는 설계 원칙
2022. 04. 19
유연한 소프트웨어를 만드는 설계 원칙
0. 들어가기에 앞서
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
제목 : 유연한 소프트웨어를 만드는 설계 원칙 지은이 : 크리스 핸슨, 제럴드 제이 서스먼 지음, 류광 옮김 출판사 : 한빛 미디어 초판 발행 : 2022년 3월 30일
1. TL;DR
- SICP(Structure and Interpretation of Computer Programs, 컴퓨터 프로그램의 구조와 해석)의 저자 중 한명인 제럴드 서스먼이 공저한 책이다.
- 예시 코드는 스킴 을 사용한다.
- 예시 코드를 따라하는 책이 아니라 그 자체로 실행이 안되는 경우가 있으며, 스킴언어를 공부하고 보는 것 보다, 현재 사용하고 있는 언어로 어떻게 구현할 수 있을지 고민해 보면 좋을 것이다.
- 코드를 데이터처럼 취급하는 방식과, 데이터를 코드처럼 취급하는 방식이 유용하다. 작은 코드 조가과 관련 데이터를 묶는 것이 코드와 데이터를 획일적으로 분리하는 것보다 유리하다.
- 꽉 막힌 함수보다 끝이 열려 있는(Open-ended) 일반적(generic) 함수를 사용하라
- 함수를 작게 유지하라
- 함수가 할 수 있는 최선의 일 중 하나는 데이터로 커스텀화된 다른 함수를 리턴 하는 것이다.
- 데이터를 코드처럼 다루는데 주저하지 마라
-
예상 독자
- ❌ 개괄서나 튜토리얼은 아니므로 개발 초심자가 읽기에는 좋지 않다.
- 🙆♂️ 실제 프로덕트 개발을 하면서 설계의 필요성을 절실히 느낀 사람
- 🙆♂️ 수도코드를 읽고 자신이 사용하는 언어로 변환이 가능한 사람
- 예제 코드를 실제 돌려볼 수 있는 github url 이 주어집니다.
2. 이 책을 선택한 이유
내 코드가 더 유지보수 하기 쉬워지고, 더 읽기 쉬워지고, 더 간결해 졌으면 좋겠다
는 생각으로 이 책을 선택하게 되었습니다.
프론트엔드 개발자는 React, Vue, Angular 등 Virtual Dom 을 기반으로 웹 화면을 만드는 선언적 프로그래밍 방식으로 개발하게 됩니다. 이때 HTML Element와 Render에 필요한 데이터, 함수들, 이벤트 처리 로직과 비즈니스 로직, Request 로직등 다양한 관심사를 가진 코드들이 에디터에 들어가게 됩니다.
다양한 코드들이 에디터로 들어오게 되면 교통 정리를 해야 합니다. 하지만 어떤 위치에 어떤 코드가 가야하고 어디로 분류되어야 할지 명확한 근거가 세워지지 않았습니다. 개발자인 저는 이 코드를 일단 어딘가에 세워 둡니다. 그 어딘가는 제가 의도하지 않은 곳이 되며 이 부분들은 점점 부패하게 됩니다.
이런 폐단을 몇번 겪은 이후로 제 나름대로 노하우가 생기고 교통 정리를 조금 할 수 있게 되었지만, 더 나은 방향으로 제 코드를 이끌고 싶기 때문에 이 책을 선택하게 되었습니다.
3. 리뷰
- 책을 읽을 때, 역자가 쓴 글 부터 추천사 모두 좋은 내용들이 담겨 있습니다. 개발 서적 중 실무 이론을 담고 있는 책들의 경우 툭툭 던지는 화두들이 있습니다.
이 화두는 마음에 오래 남아 있기 때문에 이를 기록하고 경험에 빗대어 생각하게 됩니다. 그러다 보니 짧은 페이지를 읽는 중간에도 꽤나 많은 시간이 소요 되었습니다. - 번역서들의 경우 가끔 역자가 전문 용어를 자신의 언어 또는 의역을 해서 읽고 싶지 않을때가 존재하는데, 이 책을 쓴 역자의 경우 의역 또는 원래 용어와 달라지는 경우 영단어 표시를 해서 그나마 읽을때 수월했습니다.
- 기법들을 소개하지만, 이를 반드시 사용해야 한다고 주장하지는 않습니다. 다만 유연성에 초점을 둔 사고 방식을 지속적으로 강조하고 있습니다.
- 개발 철학과 관련된 책들을 읽다보면 나오는 용어와 개념, 기법들이 반복해서 나오는 경우가 있습니다. 기초를 중요시하고, 기본이 정석이다를 다시 느끼게 되는 책 입니다.
- 한장 한장 천천히, 꾹꾹 눌러 읽어가기 좋은 책 입니다. 좋은 내용이 많기 때문에 반복해서 읽는 것을 추천드립니다.
- 책의 난이도가 있는 편이라, 개인 또는 팀 프로젝트를 경험해 본 개발자가 읽기에 좋은 책 이며, 개발 입문자에게는 권하지 않습니다.
4. 총평
- 스킴으로 예시가 작성되어 있어서 당황스러울 수 있다.
- 이론서 + 코드의 병합이 되어있기 때문에 각잡고 정독을 해야 해서 읽는 속도가 걸릴 수 있다.
- 연습 문제가 있어서 복습 및 고민할 거리들을 계속 던져준다.
- 긴 시간 여러번 곱씹을만한 좋은 책이고, 마음속에 새겨 둬야 할 것들이 너무 많아 언제 다 새겨질지가 고민이다.
5. 목차
- 프로그래밍 철학 소개
- 변화에 열려 있는 시스템 구축을 위한 방법 소개
- 일반적 프로시저(generic procedure) 소개
- 기호적 패턴 부합(pattern matching)을 활용한 term-rewrite 시스템 구현
- 해석과 컴파일 살펴보기
- 계층적 데이터(layered data)와 계층적 프로시저(layered)들로 시스템 구축
- 전파(propagation) 소개