컴퓨터 공학(6)
-
구글의 소프트웨어 엔지니어링 (5/5)
기타 One-Version 규칙 One-Version 규칙이란 의존하는 라이브러리의 버전을 단일 버전 하나로 유지한다는 규칙입니다. 이 규칙은 예외를 허용하지 않습니다. 예를 들어 libA와 libB가 libBase를 사용하고 있고 시스템이 libA와 libB를 사용한다면 libBase의 버전이 다를 수 있습니다. 예를 들면 libA에서는 libBase 1.0을 사용하는데 libB에서는 libBase 2.0을 사용하고 있을 수 있습니다. 이런 경우 어떤 버전을 선택해야하는 것인지 상황이 많이 복잡해집니다. 이를 흔히들 다이아몬드 의존성 문제라고 부릅니다. 그리고 다이아몬드 의존성을 제대로 해결하는 일반적인 솔루션은 거의 존재하지 않는다고 합니다. 결국 이를 해결하기 위해선 버전을 하나로 관리하기 위한 엄..
2021.09.25 -
구글의 소프트웨어 엔지니어링 (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