[공부] 독서(53)
-
구글의 소프트웨어 엔지니어링 (4/5)
테스트 테스트 관련 챕터를 읽기 전 업무를 하면서 느꼈던 몇 가지 궁금증들을 해소하고 싶었습니다. 간략히 몇 개를 정리하면 아래와 같습니다. 대규모 트래픽이 있는 환경을 테스트하려면 어떻게 테스트해야 할까? 더미 데이터를 만드는 것도 다양성 면에서 한계가 있을 텐데? 테스트 케이스의 결과가 관측 불가능하다면 어떻게 테스트해야 할까? 예를 들어 시스템 외부의 이메일에 메일이 제대로 전송됐는지를 어떻게 판단할 수 있을까? MSA 환경에서 작업하는 경우 내부 시스템끼리 빈번히 통신을 하게 되는데, 이런 경우는 어떻게 할까? faking이나 stubbing 만으로 진짜 다 처리가 가능할까? 이렇게 정리하고 책을 읽기 시작했습니다. 일부는 긍정적인 답변을 얻을 수 있었고, 일부는 아직도 궁금한체 남아 있었습니다...
2021.09.25 -
구글의 소프트웨어 엔지니어링 (3/5)
3. 개발자 심리와 개발 프로세스 천재 설화 이 설화는 개발자들이 빠지게 되는 오류 중 하나라고 합니다. 이는 사람의 본성이기도 한데, 사람은 우상을 찾고 숭배하려는 본능을 가지고 있다고 합니다. 그런데 특히나 개발자들의 세계에선 이런 경우가 많다 합니다. 예를 들어 빌 게이츠, 스티브 잡스, 리누스 토발즈. 모두 한 명의 천재가 세상을 바꾸었습니다. 소프트웨어 개발을 하다보면 이런 이야기를 종종 접하다 보니 개발자들도 그렇게 되고 싶어 혼자 행동하는 경향이 강하다 합니다. 개발자 세상의 천재 설화는 대부분 같은 패턴입니다. 멋진 새로운 개념에 빠집니다. 몇 주 또는 몇 달 동안 동굴 속에 들어가 아이디어를 완벽하게 구현합니다. 소프트웨어를 공개하고 전 세계를 여러분의 천재성으로 놀라게 합니다. 동료들은..
2021.09.25 -
구글의 소프트웨어 엔지니어링 (2/5)
2. 유지 보수와 관리자 하이럼 법칙 구글의 엔지니어이자 책의 저자 중 한명인 Hyrum 이 말한 법칙입니다. With a sufficient number of users of an API, it does not matter what you promise in the contract: all observable behaviors of your system will be depended on by somebody. > API를 사용하는 유저가 충분히 많다면, 여러분이 어떤 의도를 가지고 API를 설계했든, 여러분의 시스템에서 관측 가능한 모든 행동들은 사용자에 의해 결정됩니다. 문맥에 따라 의역을 하자면 이렇습니다. API를 사용하는 사용자가 많아지면 API 문서에 뭐라고 적어두었는지는 더 이상 크게 중요..
2021.09.25 -
구글의 소프트웨어 엔지니어링 (1/5)
1. 소프트웨어 엔지니어링이란 무엇인가? 편의상 엔지니어링과 공학을 혼용해서 사용하였습니다. 혹시 컴퓨터 과학과 컴퓨터 공학의 차이를 설명하실 수 있나요? 프로그래머와 소프트웨어 엔지니어의 차이를 구분하실 수 있나요? 잠깐 책 이야기에 앞서, 경험담을 먼저 이야기 드리고 싶습니다. 뜬금없지만 한 번은 아버지와 TV를 보며, 논쟁을 벌인 적이 있습니다. 왜인지는 모르겠지만 그 때 엔지니어링에 관해 이야기를 하고 있었습니다. 그리고 이야기를 하던 도중 저는 "개발자도 엔지니어다"라는 말을 했습니다. 그러자 전자공학과 출신이신 아버지는 제가 엔지니어라는 말을 듣고 고개를 갸웃거리셨습니다. 사실 논쟁이라고 하기도 민망할정도로 가벼운 의견 교류였지만 어쨌거나 살짝 자존심이 상했었습니다. 컴퓨터 공학을 전공했고, ..
2021.09.25 -
구글의 소프트웨어 엔지니어링 (0/5)
0. 구글의 소프트웨어 엔지니어링 (Software Engineering at Google) 해당 포스팅은 구글의 소프트웨어 엔지니어링(Software Engineering at Google)이라는 책을 읽고 나름 재밌었던 개념들을 정리한 시리즈입니다. 책은 여기서 읽을 수 있습니다. (pdf 문서) 포스팅을 작성하게 된 동기 우선 글을 시작하기 전에 이 포스팅을 하게 된 계기부터 이야기 하려 합니다. 때는 바야흐로 5월. 업무를 하던 도중 해당 도서의 존재를 알게 되었습니다. 그리고 평상시에 구글이라는 회사는 선망의 대상과 같은 곳이었기 때문에 자연스럽게 손이 갔습니다. 구글이 어떤 식으로 개발하는지 궁금했고, 이 책을 읽으면 업무를 하면서 느꼈던 고민들을 해결해 줄 수 있지 않을까 기대했습니다. 그리..
2021.09.25 -
리팩토링 2판 - 01
기능 이동 좋은 소프트웨어 설계의 핵심은 모듈화 얼마나 잘 되어 있는지다. 객체 지향 프로그래밍의 핵심 모듈화 컨텍스트는 클래스다. 모듈성이란 프로그램 어딘가를 수정하려 할 때 해당 기능의 작은 일부만 이해해도 가능하게 해주는 능력이다. 프로그램 상당 부분이 동작을 구현하는 코드로 이뤄지지만 프로그램의 진짜 힘은 데이터 구조에서 나온다. 관련된 코드들은 가까이 모여있으면 좋다. 관련된 코드가 모여있다면 함수 추출이 쉬워진다. 필드와 함수가 적절한 위치에 있는 것이 좋다. 하지만 추상화 라는 것은 일반적으로 그 경계를 긋기가 힘들다. 그래서 코드 베이스의 기능범위가 달라지면 추상화의 경계가 움직인다. 함수 관점에서 생각해보면 초기에는 응집도가 높고 한가지 일만 수행하던 함수가 어느새 둘 이상의 다른 일을 ..
2020.04.30