Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
7장. 코딩하는 동안
#pragmatic
2년 전
563

오늘 TIL 3줄 요약

  • 의도적인 프로그래밍을 하자.

  • 사용하는 알고리즘 차수를 추정하여 효율을 높이자.

  • 일찍 그리고 자주 리팩터링하자.

TIL (Today I Learned) 날짜

2022.04.03

오늘 읽은 범위

7장. 코딩하는 동안

책에서 기억하고 싶은 내용을 써보세요.

  • 내면의 파충류에게 귀 기울여라. 꺼림칙한 느낌의 직감이 나에게 말을 걸어 온다면 일단 하고 있는 일을 멈춰보자. 뇌가 정리할 수 있게 시간을 주자.

    산책도 해보고, 수다도 떨고, 잠도 충분히 자고, 코드에 관한 그림도 그려보고, 누군가에게 코드를 설명하다 보면 언젠가 '아하'하는 순간이 찾아올 것이다.

  • 일을 시작하는 첫 발짝이 너무 힘겹다면? '프로토타이핑'하는 거라고 나에게 말해보며 가볍게 시작하자.

  • 다른 사람의 코드를 다룰 때, 처리 방식이 이상해 보이는 부분을 표시해 놓거나, 특별한 패턴을 찾다보면 그 사람의 코드를 이해하는 게 쉬워질 수 있다.

  • 왜 코드가 망가졌는지 모르는 까닭은 애초에 코드가 왜 잘 돌아가는지도 몰랐기 때문이다.

  • 모듈화와 문서화를 잘 해 둬야 하고, 다른 루틴을 호출할 때는 문서화된 동작에만 의존하도록 해야 한다.

  • 우연에 맡기는 프로그래밍이 아닌, 의도적인 프로그래밍을 해야 한다. 확고한 사실에 근거하지 않은 가정은 재앙의 근원이 된다.

  • 의도적인 프로그래밍 방법은? 초급자가 이해할 수 있도록 설명할 수 있어야 한다. 자신의 코드를 확실히 알아야 한다. 계획을 세우고 그것을 바탕으로 진행해야 한다. 기본이나 기반 구조에 우선순위를 두고 탄탄하게 만들어야 한다. 과거의 코드가 적절하지 않다면 언제든 리팩터링해야 한다.

  • '대문자 O 표기법'을 사용하여 알고리즘(시간, 프로세서, 메모리 등)을 추정할 수 있다.

  • '대문자 O 표기법'은 최상위 차수를 제외한 다른 모든 차수는 제외하며, 상수인 계수도 표기하지 않는다. 그래서 어떤 알고리즘이 더 빠른지 알 수는 없고, 그저 입력의 크기가 바뀜에 따라 이 값이 어떻게 바뀔지 알려준다.

  • 사용하는 알고리즘 차수를 추정하라. 그리고 추정을 테스트하라.

  • 리팩터링이란? 밖으로 드러나는 동작은 그대로 유지한 채 내부 구조를 변경하는 것

  • 리팩터링은 더 많이 알게 된 게 있다면, 잘못된 게 보인다면 주저하지 말고 해야 한다. 일찍 리팩터링하고 자주 리팩터링하자!

  • 리팩터링의 주의점은? 리팩터링과 기능 추가를 동시에 하지 말라. 단계를 작게 나누어 한 단계가 끝날 때마다 테스트하며 점검하라.

  • 테스트가 코드의 첫 번째 사용자다.

  • 테스트의 좋은 점은 내가 사용자인 것처럼 외부의 시선으로 보는 안목을 갖게 되는 것이다.

  • 단위 테스트란? 각 모듈의 동작을 검증하기 위해 이것저것 시켜보는 것.

  • 회귀 테스트란? 동일한 테스트를 코드 수정 후 다시 돌려보는 것.

  • 하위 컴포넌트를 모두 검증한 후에, 해당 모듈 전체를 테스트한다.

  • 소프트웨어 배포 후에는 어떻게 테스트를 할까? 로그파일에 쌓이는 추적 메시지를 활용한다. 단축키 조합이나 숨겨진 URL 방식을 활용한다.

  • 내가 테스트하지 않으면 사용자가 테스트를 하며 실망할 지도 모른다.

  • 외부 라이브러리도 테스트해 보자.

  • '속성 기반 테스트'로 컴퓨터가 코드에서 속성을 찾아내서 자동으로 테스트하게 만들자.

  • 속성이란? 코드에 존재하는 계약 + 불변식

  • 불변식이란? 함수 실행 전후도 계속 동일하게 참이 되는 조건

  • 단순하고 필요에 딱 맞은 작은 코드가 잠재적 취약점을 발견하기 쉬워 보안에 유리하다.

  • 보안을 위해 인증이 필요한 서비스를 만들고, 인증 받은 사용자 수는 최소로 유지해야 한다.

  • 보안을 위해 최소한의 권한을 꼭 필요한 시간만큼만 짧게 부여하고, 민감한 정보는 암호화해야 한다. 암호나 키는 버전 관리 시스템에 넣지 않고, 설정 파일이나 환경 변수로 관리한다.

  • 보안 패치가 나오면 신속하게 업데이트해야 한다.

  • 암호화 관련 라이브러리나 프레임워크는 유지 보수를 주기적으로 하여 자주 업데이트하는 것을 선택한다.

  • 외부의 인증 서비스를 활용하는 게 더 안전하다.

  • 코드에서 하는 역할에 따라 이름을 지어야 한다. '내가 이것을 왜 만드는 거지?'라는 생각을 한 후, 명료하게 이름을 지어야 한다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 새로고침되어 쓴 글이 모두 사라진 바람에 다시 쓰게 되었다. 덕분에 처음에 썼던 많은 사족이 없어지고 좀더 핵심만 남기게 된 것 같다. 코딩의 리팩터링도 힘들지만 다시 하고 나면 코드가 더 명확해 져서 좋을 것 같다.

  • 2번째 글을 쓸 때는 자주 저장을 하며 기록했다. 파충류의 뇌가 신호를 줄 때마다 꼬박꼬박 저장을 하며 글을 쓰니 마음이 편했다. 이렇듯 내가 작성한 모듈을 테스트할 때도 작은 코드마다 촘촘하게 점검해야 훗날 후회하지 않을 듯 싶다.