diff --git "a/7\354\236\245/\354\213\240\354\212\271\354\244\200.md" "b/7\354\236\245/\354\213\240\354\212\271\354\244\200.md" new file mode 100644 index 0000000..fb786cd --- /dev/null +++ "b/7\354\236\245/\354\213\240\354\212\271\354\244\200.md" @@ -0,0 +1,69 @@ +# 코딩하는 동안 + +## 우연에 맡기는 프로그래밍 + +### 암묵적인 가정 + +모든 차원에서 사람들은 마음 속에 많은 가정을 품고 작업한다. 하지만 이런 가정을 문서화하는 경우는 드물다. + +> 그저 문서화라는 단어가 나와서 문득 궁금해진 것인데요! 다들 문서화를 많이 하시나요? 개발이 끝나고 나서도 작업한 것에 대해 문서화를 하시나요? 저희는 스타트업이고 빠르게 일을 쳐내야 하다보니까 문서화가 잘 안 되어 있어서 혼란을 겪은 적이 많았어요. + +## 알고리즘의 속도 + +### 실전에서의 알고리즘 속도 + +최고라고 언제나 최고는 아니다. 성급한 최적화를 조심해라. 알고리즘을 개선하느라 귀중한 시간을 날리지 마라. + +> 전 너무 안 해서 문제인 것 같아요. ㅎㅎㅎ... + +## 리팩터링 + +### 리팩터링은 언제 하는가? + +무엇이든 '잘못'되었다는 생각이 들 때가 있을 것이다. 주저하지 말고 변경하라. + +> 이전에 준환님 덕분에 VSCode에서 F2 단축키로 같은 레퍼런스의 변수명을 한 번에 바꿀 수 있다는 걸 알게 됐었어요. 이거 덕분에 이름 변경할 때 많이 주저하지 않게 된 것 같아요. + +## 테스트로 코딩하기 + +### 테스트 문화 + +제대로 된 테스트 문화를 가졌다면 모든 테스트가 언제나 통과해야 한다. + +> 이거 보고 삘 받아서 계속 실패하고 있던, 꺠진 창문 같았던 CI들을 모두 성공하도록 수정해버렸어요. + +## 바깥에서는 안전에 주의하라. + +### 공격 표면을 최소화하라. + +입력 데이터는 공격 매개체다. + +디버깅 정보는 공격 매개체다. ATM 기계 화면이나 공항 키오스크, 웹 브라우저 화면에 난데없이 긴 스택 트레이스와 데이터가 가득 나타난다. + +> 같은 맥락에서 console.log 좀 지우라는 게 생각 났어요. [NextJS Compiler - removeConsole](https://nextjs.org/docs/architecture/nextjs-compiler#remove-console) 요걸로 지워진 상태로 배포시킬 수 있을 것 같아요. + +### 민감 정보를 암호화해라. + +키나 암호는 빌드나 배포 프로세스 내 설정 파일이나 환경 변수로 관리한다. 더 좋은 방법은 별도의 서비스로 관리하는 것이다. + +> 이 때 별도의 서비스 예시로 AWS Parameter Store나 Secret Manager를 들 수 있을까요? + +### 잘못된 비밀번호 사례 + +인증되지 않은 사용자에게 비밀번호 힌트를 제공하거나 "당신의 첫 번째 애완동물의 이름은 무엇인가요?" 같이 즉정한 정보를 물어보지 말라. + +> 예전에 많이 본 것 같은데, 요즘엔 못 본 것 같아요. + +> 킹 받는 사례가 참 많네요. + +인위적인 제약을 걸면 무작위도를 낮추고 나쁜 비밀번호 습관을 부추겨 오히려 보안에 위험이 된다! + +## 이름 짓기 + +### 일관성 + +모든 프로젝트에는 팀 내에서 특별한 의미가 있는 용어들을 비롯하여 고유의 어휘들이 있다. + +반드시 팀의 모든 사람이 각 단어의 뜻을 알고 일관성 있게 사용해야 한다. + +> isOpen처럼 is 붙이는 게 팀 규칙이었는데요, 혼자 오픈 소스 코드 보고 open이라고 쓰곤 했었던 저를 반성합니다.