이미 소장하고 있다면 판매해 보세요.
|
1부 | 코드 이야기
1장_좋은 코드를 위한 고민 코드의 본질 좋은 코드를 위한 은유 좋은 코드를 위한 추상화 관심사의 분리 1장을 마치며 2장_안전한 코드를 위해서 버그와 장애 테스트 자동화 테스트 가능한 코드 테스트 환경 포스트 모텀 2장을 마치며 3장_코드 속 버그 잡아내기 동전의 양면과 같은 코딩과 디버깅 기상천외한 버그들 탐정이 될 시간 기본적인 디버깅 기술 그래도 안 풀려요! 3장을 마치며 4장_코드에도 패턴이 있다 건축학 개론 소프트웨어에서의 패턴 패턴의 발견 패턴이 유용한 이유 패턴의 유혹 4장을 마치며 5장_깃, 나는 네가 지난여름에 짠 코드를 알고 있다 버전을 관리해야 하는 이유 버전 관리 시스템의 역사 깃을 만든 리누스 토발즈 커밋 메시지 잘 작성하기 하나의 변경은 하나의 커밋으로 커밋으로 협업하기 5장을 마치며 6장_여전히 성장 중인 자바 다재다능한 자바 자바의 탄생 자바와 JVM 자바를 싫어하는 사람들 객체 지향 패러다임 6장을 마치며 7장_간결한 코드를 위한 파이썬 파이썬의 탄생 파이썬의 생산성 파이썬 vs. 펄 Pythonic하게 코드를 짜세요 7장을 마치며 8장_구글이 만든 프로그래밍 언어, Go Go의 탄생 Go가 해결하고자 했던 문제 동시성 프로그래밍의 어려움 Go의 동시성 프로그래밍 경량 스레드, 고루틴 Go의 오류 처리 8장을 마치며 2부 | 환경 이야기 9장_서버 환경의 변화 정적 링크와 동적 링크 패키지 관리자 설치 문서 프로비저닝 도구 컨테이너의 시대 새로운 시대의 운영체제, 쿠버네티스 9장을 마치며 10장_클라우드로의 여정 전산실에서 IDC로 IDC에서 클라우드로 IaaS, PaaS, SaaS 클라우드 전환기 클라우드 네이티브의 특징 10장을 마치며 11장_태생의 한계에 도전하는 웹 이야기 웹의 탄생 정적인 웹에서 동적인 웹으로 Ajax의 등장 또 하나의 자바스크립트 jQuery의 군림 새로운 자바스크립트 프레임워크의 등장 싱글 페이지 애플리케이션 서버 측 랜더링이 포함된 SPA 11장을 마치며 12장_데이터베이스: 초기부터 오늘날까지 데이터가 사는 곳: 메모리와 디스크 데이터베이스의 등장 관계형 데이터베이스의 저력 관계형 데이터베이스의 한계 새로운 데이터베이스를 위한 시도: NoSQL 12장을 마치며 13장_웹 서비스를 위한 아키텍처 성장기 최초의 애플리케이션 애플리케이션 서버의 확장 데이터베이스 서버의 확장 캐시 HTTP 캐시 애플리케이션 캐시 CDN을 이용한 캐시 13장을 마치며 14장_모니터링으로 꿰뚫어보기 베일에 감춰진 코드의 동작 시스템 관리자의 모니터링 모니터링 데이터: 메트릭 모니터링 데이터: 로그 데이터 시각화 24/7 모니터링을 위한 알림 창 이상치 탐지 14장을 마치며 15장_코드는 파이프라인을 타고 소프트웨어 배포 배포의 고통 지속적인 배포를 위해 간단한 ‘지속적인 배포’ 맛보기 GitOps 무중단 배포 15장을 마치며 16장_마이크로서비스 서브 루틴의 진화 마이크로서비스의 출현 마이크로서비스의 한계 마이크로서비스 간의 통신 마이크로서비스로의 전환 장애 전파 SRE: Site Reliability Engineering 16장을 마치며 17장_데이터 포맷 네트워크 너머로 데이터 보내기 0과 1로 표현하기 비트들을 그대로 저장할 수 없는 이유 직렬화 17장을 마치며 3부 | 개발자 이야기 18장_프로그래밍에 대한 열정 재미있고 어렵다 프로그래밍을 향한 동기 결과물 파 vs 순수 코드 파 몰입의 즐거움 18장을 마치며 19장_더 나은 개발자로 성장하기 성장 가능성 무엇을 먼저 공부해야 하나 개발자의 자질 좋은 개발자의 모습 끊임없는 학습 안전지대 벗어나기 나보다 나은 개발자 만나기 기술 블로그 만들기 토이 프로젝트 및 스터디 19장을 마치며 20장_더 나은 팀 문화를 위하여 개발팀의 문화 업무 환경의 변화 비동기 의사소통 문서화의 중요성 모두의 코드를 위한 리뷰 20장을 마치며 찾아보기 |
|
- 하지만 컴퓨터라는 독자만을 염두에 두고 코드를 작성하다가는 머지않아 큰 문제에 부딪히게 됩니다. 2차 독자인 사람을 염두에 두지 않았기 때문입니다.
- 자바에서 예외를 처리할 때 사용되는 throw와 catch라는 키워드 역시 일종의 은유입니다. 사실 이 은유는 다른 언어와는 다른 자바의 예외 처리 방식을 효과적으로 나타내기 위한 목적이 있습니다. - 관심사를 분리하여 코드를 작성하면 각각의 코드 영역에서 적은 수의 관심사에만 집중할 수 있기 때문에 코드를 파악하는 것이 훨씬 수월합니다. - 코드가 강하게 결합되어 있다면 유지 보수 비용이 크게 드는 경향이 있습니다. 일반적으로 ‘의존성 주입 (Dependency Injection)’ 등의 기법을 통해 결합도를 낮출 수 있습니다. - 이 과정에서 인상적이었던 부분은 깃랩의 사고 수습 및 복구 과정이 상당히 투명하게 공개되었다는 것입니다. 그들은 복구 진행 프로세 스 전반을 트위터 계정을 통해 실시간으로 알렸습니다. - 이제부터는 바야흐로 탐정이 될 시간입니다. 디버깅은 수수께끼를 푸는 것과 비슷합니다. 복잡한 수수께끼를 풀기 위해 관찰력, 지식, 직관, 추론 능력으로 중무장하고 끈기와 인내로 문제를 해결해 나가는 셜록 홈즈가 되어야 합니다. - 버그 재현과 로그를 통해 디버깅을 수행할 때 그 과정을 꼼꼼히 기록하는 것도 큰 도움이 됩니다. 복잡하거나 난해한 버그의 경우 이를 추적하는 데 며칠에서 길게는 몇 달까지 걸릴 수 있습니다. 이 기간 동안 획득한 단서나 실험 결과를 머릿속에만 유지하기보다는 일종의 디버깅 문서를 만들어 기록하는 것이 좋습니다. - 패턴에는 이름도 중요합니다. 만약, ‘문’이라는 이름이 없었다면 건축 사무소에 온 손님에게 도면을 설명하기 위해 여기에 문을 달겠습니다 대신 여기에 경첩이 달린 직사각형 형태의 나무를 대고 손잡이를 달아서 여닫을 수 있는 물체를 달겠습니다라고 설명해야 할 것입니다. - 그제서야 각 개발자는 각자의 사본을 가지고 직접 브랜치를 생성하고 커밋을 만들어 나갈 수 있었습니다. 이를 통해 정말 훌륭한 기능을 추가하거나 심각한 버그를 고칠 수 있게 되었습니다. - 혼자 가면 빨리 갈 수 있지만 함께 가면 멀리 간다라는 말이 있습니다. 본문에서 언급한 리누스 토발즈도 사실은 리눅스와 깃을 오롯이 혼자 만들지는 않았습니다. 수많은 오픈소스 기여자들과 함께 수십 년 간 훌륭한 소프트웨어를 만들어 오고 있습니다. - 자바의 생태계에서도 이러한 문제를 인식하고 자바의 장황함을 줄이고자 노력하고 있습니다. 예를 들어, 자바 8에서 ‘람다 표현식’을 도입함에 따라 새로운 스레드를 생성하기 위한 코드가 아래와 같이 간결해졌습니다. - 재미있는 점은 위의 코드 대신 for (i = 0; i 〈=9; i++)로 써도 동작은 동일하게 돌아가지만 이렇게는 잘 쓰지 않는다는 점입니다. 사람들은 이미 전자의 패턴에 익숙해져 있는 상태에서 0~9가 아닌 0~8까지 도는 반복문이라고 잘못 인식할 가능성이 있기 때문입니다. - 이와 같이 Go의 특징을 통해 설계 철학을 엿보다 보면 Go의 목적이 가장 뛰어난 프로그래밍 언어를 만들기 위한 연구의 성격이 아닌 동료의 작업 환경을 개선하고 생산성을 향상시키기 위한 시도였다는 것을 알 수 있습니다. 대학을 갓 졸업하고 구글에 입사한 주니어 개발자들도 새로운 언어를 쉽게 익혀 안전한 코드를 작성할 수 있도록 말입니다. - 개발자들이 자주 하는 변명에 대해 순위를 매겨본다면 아마 다음의 말이 1위를 차지하지 않을까 싶습니다. 제 컴퓨터에선 잘 되는데요? - json 같은 텍스트 형태의 데이터는 저장할 때 파일 전체를 처음부터 끝까지 다시 기록해야 합니다. 수천 명의 회원 목록 중 단 한 명의 데이터만 변경되었다고 하더라도 수천 명의 회원 목록 전부 다시 기록해야 한다는 이야기입니다 --- 본문 중에서 |
|
대상 독자
“개발자가 되기 위해 코딩만 열심히 하고 있는데, 내가 잘하고 있는 건지 모르겠다. 배워야 할 게 너무 많아 항상 불안하다.” “개발자가 된 지 이제 불과 1년도 안 됐는데, 밤낮으로 프로젝트에 파묻혀 살다 보니 단순 코딩 머신이 되어 가는 느낌이다. 높은 곳에서 내가 있는 위치를 한번 확인해보고 싶다.” 매일 파도처럼 밀려오는 새로운 지식에 치이지 않기 위한 나침반과 같은 책 넓은 기술 분야의 지식을 높은 곳에서 한눈에 조망할 수 있는 책 각 지식 간의 연결 고리를 이어주어 인사이트를 주는 책 매일 파도처럼 밀려오는 새로운 지식들을 헤쳐 나가는 것은 어두운 미로를 손전등 하나만 들고 헤매는 것과 같습니다. 그것들 간의 맥락을 설명해주는 나침반과 지도가 꼭 있어야 합니다. 높은 곳에서 한눈에 조망할 수 있다면 이를 기반으로 각 지식 간의 연결 고리를 쉽게 이어갈 수 있습니다. 때로는 한껏 줌을 땡겨 좁은 영역에 복잡한 기술 지식을 자신만의 언어와 표기법으로 새겨 넣습니다. 이러한 과정을 반복하다 보면 멀리서 봤을 때 여러 기술 지식들이 얽히고 설켜 복잡한 개미굴과 같은 3차원의 지도가 완성되어 갑니다. 여러분의 기술 지도를 확장해 나가는 데 도움이 되었으면 좋겠습니다. 닻을 올리고 개발자로서 여행을 떠나는 이들이 더 멀리까지 바라볼 수 있도록 도와주는 책이면 좋겠습니다. 여행 가이드 북이라는 제목처럼 아주 세세한 내용까지는 다루지는 못했습니다. 이때 둘러대기 가장 좋은 핑계는 역시 "지면의 한계"일 것입니다. 하지만 설령 그 한계가 무한하다 하더라도 앞으로 여러분이 기술 분야에서 겪게 될 모든 경험과 즐거움을 책 한 권에 녹여내는 일은 불가능합니다. 그 부분은 여러분의 설레는 탐험의 몫으로 남겨놓겠습니다. 어쩌면 저도 미처 발견하지 못한 아름다운 여행지를 찾게 될지도 모르는 일입니다. 아니, 분명 그렇게 될 것입니다. |