개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
의도적인 프로그래밍을 하자.
사용하는 알고리즘 차수를 추정하여 효율을 높이자.
일찍 그리고 자주 리팩터링하자.
TIL (Today I Learned) 날짜
2022.04.03
오늘 읽은 범위
7장. 코딩하는 동안
책에서 기억하고 싶은 내용을 써보세요.
내면의 파충류에게 귀 기울여라. 꺼림칙한 느낌의 직감이 나에게 말을 걸어 온다면 일단 하고 있는 일을 멈춰보자. 뇌가 정리할 수 있게 시간을 주자.
산책도 해보고, 수다도 떨고, 잠도 충분히 자고, 코드에 관한 그림도 그려보고, 누군가에게 코드를 설명하다 보면 언젠가 '아하'하는 순간이 찾아올 것이다.
일을 시작하는 첫 발짝이 너무 힘겹다면? '프로토타이핑'하는 거라고 나에게 말해보며 가볍게 시작하자.
다른 사람의 코드를 다룰 때, 처리 방식이 이상해 보이는 부분을 표시해 놓거나, 특별한 패턴을 찾다보면 그 사람의 코드를 이해하는 게 쉬워질 수 있다.
왜 코드가 망가졌는지 모르는 까닭은 애초에 코드가 왜 잘 돌아가는지도 몰랐기 때문이다.
모듈화와 문서화를 잘 해 둬야 하고, 다른 루틴을 호출할 때는 문서화된 동작에만 의존하도록 해야 한다.
우연에 맡기는 프로그래밍이 아닌, 의도적인 프로그래밍을 해야 한다. 확고한 사실에 근거하지 않은 가정은 재앙의 근원이 된다.
의도적인 프로그래밍 방법은? 초급자가 이해할 수 있도록 설명할 수 있어야 한다. 자신의 코드를 확실히 알아야 한다. 계획을 세우고 그것을 바탕으로 진행해야 한다. 기본이나 기반 구조에 우선순위를 두고 탄탄하게 만들어야 한다. 과거의 코드가 적절하지 않다면 언제든 리팩터링해야 한다.
'대문자 O 표기법'을 사용하여 알고리즘(시간, 프로세서, 메모리 등)을 추정할 수 있다.
'대문자 O 표기법'은 최상위 차수를 제외한 다른 모든 차수는 제외하며, 상수인 계수도 표기하지 않는다. 그래서 어떤 알고리즘이 더 빠른지 알 수는 없고, 그저 입력의 크기가 바뀜에 따라 이 값이 어떻게 바뀔지 알려준다.
사용하는 알고리즘 차수를 추정하라. 그리고 추정을 테스트하라.
리팩터링이란? 밖으로 드러나는 동작은 그대로 유지한 채 내부 구조를 변경하는 것
리팩터링은 더 많이 알게 된 게 있다면, 잘못된 게 보인다면 주저하지 말고 해야 한다. 일찍 리팩터링하고 자주 리팩터링하자!
리팩터링의 주의점은? 리팩터링과 기능 추가를 동시에 하지 말라. 단계를 작게 나누어 한 단계가 끝날 때마다 테스트하며 점검하라.
테스트가 코드의 첫 번째 사용자다.
테스트의 좋은 점은 내가 사용자인 것처럼 외부의 시선으로 보는 안목을 갖게 되는 것이다.
단위 테스트란? 각 모듈의 동작을 검증하기 위해 이것저것 시켜보는 것.
회귀 테스트란? 동일한 테스트를 코드 수정 후 다시 돌려보는 것.
하위 컴포넌트를 모두 검증한 후에, 해당 모듈 전체를 테스트한다.
소프트웨어 배포 후에는 어떻게 테스트를 할까? 로그파일에 쌓이는 추적 메시지를 활용한다. 단축키 조합이나 숨겨진 URL 방식을 활용한다.
내가 테스트하지 않으면 사용자가 테스트를 하며 실망할 지도 모른다.
외부 라이브러리도 테스트해 보자.
'속성 기반 테스트'로 컴퓨터가 코드에서 속성을 찾아내서 자동으로 테스트하게 만들자.
속성이란? 코드에 존재하는 계약 + 불변식
불변식이란? 함수 실행 전후도 계속 동일하게 참이 되는 조건
단순하고 필요에 딱 맞은 작은 코드가 잠재적 취약점을 발견하기 쉬워 보안에 유리하다.
보안을 위해 인증이 필요한 서비스를 만들고, 인증 받은 사용자 수는 최소로 유지해야 한다.
보안을 위해 최소한의 권한을 꼭 필요한 시간만큼만 짧게 부여하고, 민감한 정보는 암호화해야 한다. 암호나 키는 버전 관리 시스템에 넣지 않고, 설정 파일이나 환경 변수로 관리한다.
보안 패치가 나오면 신속하게 업데이트해야 한다.
암호화 관련 라이브러리나 프레임워크는 유지 보수를 주기적으로 하여 자주 업데이트하는 것을 선택한다.
외부의 인증 서비스를 활용하는 게 더 안전하다.
코드에서 하는 역할에 따라 이름을 지어야 한다. '내가 이것을 왜 만드는 거지?'라는 생각을 한 후, 명료하게 이름을 지어야 한다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
새로고침되어 쓴 글이 모두 사라진 바람에 다시 쓰게 되었다. 덕분에 처음에 썼던 많은 사족이 없어지고 좀더 핵심만 남기게 된 것 같다. 코딩의 리팩터링도 힘들지만 다시 하고 나면 코드가 더 명확해 져서 좋을 것 같다.
2번째 글을 쓸 때는 자주 저장을 하며 기록했다. 파충류의 뇌가 신호를 줄 때마다 꼬박꼬박 저장을 하며 글을 쓰니 마음이 편했다. 이렇듯 내가 작성한 모듈을 테스트할 때도 작은 코드마다 촘촘하게 점검해야 훗날 후회하지 않을 듯 싶다.