-
-
KODE VICIOUS 개발 지옥 - 믿을 놈 하나 없는 비정한 업계의 소프트웨어 엔지니어링
조지 V. 네빌-닐 지음, 황건구 옮김 / 영진.com(영진닷컴) / 2022년 8월
평점 :

1. 손 안의 코드 : 코드를 손 안에서 쥐락펴락하기 위해서 반드시 고려해야 할 스타일과 코딩의 핵심(정확성, 간결성, 조합성)에 대해 다룹니다.
2. 코딩 수수께끼 : 시스템이 만들어지고 나서 발생하는 디버깅, 문서화, 테스트 등과 관련된 문제를 살펴보며 전반적인 시스템 성능 및 코드에 관한 조언을 전합니다.
3. 시스템 디자인 : 잘 디자인된 시스템이 무엇인지 설명하기 위해 적절한 추상화, 스레드 프로그래밍, 보안이라는 주제로 좋은 시스템의 핵심을 이야기합니다.
4. 기계에서 기계에게 : 분산 시스템, 네트워크 프로토콜 디자인 등에 대한 내용을 통해 기계 간 통신, 즉 컴퓨터 네트워킹에 관한 유용한 지침을 제시합니다.
5. 사람과 사람 : 업계 내 동료들과 소통하고 조율하고 협업하는 방법, 참조할 만한 레퍼런스 등 개발자의 커리어 관리를 위한 노하우를 알려 줍니다.
총 5가지 주제로 이야기 하고 있습니다.
이중에서 몇가지 인상 깊었던 내용들로 이야기 해보겠습니다.

문서의 중요성
개발자들은 자신의 시스템에 대해 문서를 남기는 것을 싫어합니다.
자신의 코드나 디자인을 문서화하는 데 어려움을 느끼는 이유는 코드가 빠르게 변동되기 때문입니다.
또는함수 및 class를 서술하는 표현들이 잘하지 못하는 경우도 있습니다.
문서화가 어렵다고 느껴지면 4가지 질문에 답변하면 좋은 문서화가 될 수 있다는 점을 명심했으면 합니다.
첫번째 입력은 무엇인가?
두번째 입력은 어떠한 변화를 겪고 되는가?
세번째 어떠한 형태로 출력이 나오는가?
네번째 적절하거나 부적절한 경우 어떠한(에러) 반환 값이 있는가?
좋은 문서화는 좋은 코드와 같은 작성 이후에도 꾸준히 관리되어야 합니다. 코드가 변경되었다면 문서도 같이 변경을 해줘야 합니다.
시스템 디자인
시스템 디자인이란 의미는 조합성에 중요성을 이야기 하고 있습니다.
함수, 클래스, 모듈 또는 시스템을 구성하는 모든 프로그램들의 조합성을 의미합니다.
시스템 디자인 철학에 대해 제시하고 있습니다.
첫번째 프로그램은 한가지 위해 작성되고 잘 작동어야 합니다.
두번째 프로그램들은 서로 협력할 수 있어야 합니다.
세번째 텍스트 스트림은 범용 인터페이스이므로 프로그램은 텍스트 스트림을 처리할 수 있어야 합니다.
결국 모든 컴포넌트들을 한데 모아 봐도 서로 다른 수준에서 상호연결과 종속성 관점에서 일관된 설명을 할 수 있어야 합니다.

안전한 로그 남기기
사람들은 안전한 시스템을 만든다고 할때 정문만 잠그고 창문이나 창고, 뒷문은 활짝 열어둔 채 방치한다는 점입니다.
안전한 시스템은 단순히 몇가지 지침을 준수하고 책의 내용을 따르는 것을 의미하는게 아닙니다.
데이터가 접근되는 모든 위치와 접근을 모두 제어하는 것입니다.
로그 시스템은 데이터 유출이 매우 흔한 지점입니다. 암호 파일 시스템만 이용하면 로그 데이터로 인한 문제는 훨씬 줄어들것입니다.
그리고 로그는 정말 필요한 것들만 목록으로 남기고 나머지는 삭제하는 것이 좋습니다. 암호화까지 되어 있으면 완벽합니다.