유닉스의 탄생 - 세상을 바꾼 운영체제를 만든 천재들의 숨은 이야기
브라이언 커니핸 지음, 하성창 옮김 / 한빛미디어 / 2020년 8월
평점 :
절판



제목에서 알 수 있듯 책을 읽는다고 해도 프로그래밍에 대해 배울 수 있는 책은 아니지만, 프로그래밍을 조금이라도 아는 사람들에겐 흥미있는 이야기들도 가득하다. 일단 저자부터가 The C Programming Language로 유명한 사람이고, 등장 인물들도 대부분 전설적인 개발자들이다. 개인적으로는 첫 직장에서 지금은 사라진 Sun microsystem의 SVR4에서 일을 배우고 시작했기에 해당 부분을 읽으면서 유난히 더 반가웠다. 워낙 좋은 책이고 좋은 서평도 많아서 내가 특히 인상깊었던 부분들만 몇 가지 골라봤다.

  1. 벨 연구소의 환경
    우리가 흔히 상상하는 이상적인 연구소의 모습, 지원하되 간섭하지 않는 환경을 보여준다. 이런 환경이 뒷받침되었기에 천재적인 개발자들도 마음껏 연구하고 이런 멋진 결과들을 계속 만들어냈던 거 같다. 항상 소프트웨어 개발사의 모습이 어때야 하는지 논의가 많은데, 결국 지향점은 벨 연구소에서 이미 충분히 보여준 거 같다. 공교롭게도 반독점법에 의해 AT&T가 나뉘면서 연구소도 나뉘었는데 그 이후로는 예전만 못한 모습을 보인다.
  2. 문서화
    지금이야 자료들이 많이 있고 여러가지 예시도 비교적 쉽게 찾을 수 있어서 man page를 잘 보지 않지만, 당시만 해도 검색 엔진같은 건 존재하지 않던 시절이고, 누군가에게 배우거나 책이 있지 않으면 스스로 소스코드를 읽어서 이해할 수 있어야 프로그램 사용 방법도 알 수 있던 시절이었다. 그런 환경에서 man이란 명령어로 사용방법부터 known bug까지 기술해 놓은 걸 보면 다른 모든 부분처럼 문서화에서도 선구자였다.
  3. 애자일?
    UNIX 철학의 한 가지가 소프트웨어를 가능한 빨리, 수 주 이내에 사용할 수 있게 설계하고 구축하며, 어설픈 부분을 버리고 다시 만드는 걸 망설이지 않는 것이다. 이 부분을 읽으면서 빨리 동작하는 소프트웨어를 만들고 피드백을 받아 보완을 하는 애자일 방식이 연상이 되었다. 개발 방법론도 이렇게 시작했지만, 규모가 커지면서 waterfall같은 방식으로 변했는데 결국은 다시 UNIX 철학을 바탕에 둔 애자일로 돌아왔나 싶다.

OS를 직접 개발하는 사람이 아니더라도 이런 전설적인 개발자들의 이야기는 얕게는 기분 전환에 도움이 되고, 깊게는 자신의 개발 영역에 어려운 일이 있을 때 영감을 제공할 수 있다. 개발자라면 누구에게나 추천한다.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
개발자에서 아키텍트로 - 38가지 팀 활동을 활용한 실전 소프트웨어 아키텍트 훈련법
마이클 킬링 지음, 김영재 옮김 / 한빛미디어 / 2021년 6월
평점 :
장바구니담기


프로그래밍 면접을 볼 때 어느 정도 연차가 되면 시스템 디자인에 대한 시간이 들어간다. 매니저나 그 이상의 직급에서는 코딩 인터뷰보다 더 많은 시간이 할당되는 경우도 봤다. 코딩 인터뷰와 가장 큰 차이점은 딱 맞아 떨어지는 정답은 없다는 점이다. 그래서 대부분의 회사에서 시스템 디자인 인터뷰에 대해서 안내할 때 “정답이 있는 건 아니다"라는 이야기를 한다. 하지만 또 어느 정도는 납득할 수 있고 수긍할 수 있는 아키텍처라는 게 존재하고 그래서 아키텍처에도 패턴이 있다. 하지만 이 패턴을 외운다고 해도 바로 옳은 답을 할 수 있진 않다. 그래서 아키텍처는 어렵고 경험이 필요하다.

이 책은 아키텍트가 되려면 어떻게 해야 하는지 여러가지 측면에서 다루는 데 다른 책들과는 특히 구분되는 면은 비기술적인 면도 중요하게 다룬다는 점이다. 예를 들어 4장은 “이해관계자와 공감하기”, 5장 “아키텍처 핵심 요구사항 알아내기”는 시스템의 관계자들과 협의를 하고 무엇을 최선으로 할지 결정하는 방법을 설명하는 데 다른 아키텍처 관련 서적에서는 쉽게 보기 힘든 부분이다. 실제로 업무를 하면 다른 부서의 매니저들이나 개발자들 뿐만 아니라 product owner와 같은 비즈니스 관련자들과 협의가 개발 방향에 큰 영향을 미친다. 이 때 어느 정도의 트레이드 오프를 통해 개발쪽에서 원하는 설계 방향을 유지하면서 비지니스 목표 달성에 협조하는 게 설계를 하는 사람의 몫이 된다.

또 다른 특징은 문서화를 강조한다는 점이다. 10장 “설계 시각화하기”, 11장 “아키텍처 문서화하기”를 통해 체계적인 문서화로 아키텍처 설계의 결과뿐만 아니라 과정도 같이 보여줘야 한다고 설명한다. 맥락이 없이 결론만 보게 되면 과정에서 논의되었지만 어떤 이유로 배제되었던 다른 아키텍처를 다시 설명해야 할 수도 있고, 다른 목표와 상충되어 일단은 포기하고 가기로 했던 부분을 왜 빠뜨렸냐고 묻는 사람이 생길 수도 있는데, 이런 불필요한 낭비를 줄일 수 있다는 점에서 아키텍처 문서화 역시 중요하다.

마지막으로 Part 3 “아키텍트의 은색 도구상자"에 있는 여러가지 활동이 독특한데, 모든 활동을 따라할 필요도 없고 가능하지도 않겠지만, 체계적인 회의를 하고 싶을 때 도움이 될 자료들이 많이 있다. 이런 개발과 무관해 보이는 업무 방식이 실제로는 잘 활용하면 업무 생산성을 높이는 데 도움이 된다는 점을 감안하면 여기 나오는 여러가지 활동을 잘 사용하면 아키텍처 설계뿐만 아니라 일반적인 개발 업무에서도 도움이 될 거 같다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
이벤트 기반 마이크로서비스 구축 - 대규모 조직 데이터를 활용하는 기법
애덤 벨메어 지음, 이일웅 옮김 / 한빛미디어 / 2021년 5월
평점 :
장바구니담기




Microservice architecture는 이미 널리 쓰이고 있다. 개인적으로 기록하는 노트를 보니 microservice에 대해 처음으로 기록한 게 2017년 12월이었다. 새로운 기술을 유용하다고 판단하면 짧은 시간에 많은 회사들이 뛰어들어 채택하고 성과를 내거나 실패한다. 성공이 더 많으면 더 확산되고 또 하나의 defacto standard가 된다. 동기식microservice는 이미 그렇게 되었다. 하지만 이전의 많은 표준들이 그렇듯 장점과 함께 단점을 가지고 있고, 그 단점을 해결하기 위해 event-driven microservice가 나왔다.

Microservice는 말 그대로 service를 micro하게 나눴다. 하나의 service는 그 자체로 완결되어야 한다. 각 service끼리는 최소한의 필요한 정보를 주고받으면 되고, data는 각 service의 DB에 저장된다. 각 service의 성격에 따라 RDB나 nosql이나 필요한 최적의 storage를 선택하면 된다. 하지만 실제 product에서는 이렇게 이상적으로 loosely coupled service를 만드는 건 매우 힘든 일이다. 여러 종류의 DB를 쓰면 DBA가 관리하기 어려울 수도 있고 최적의 환경을 만들기 불가능할 수도 있다. 트랜잭션이 어렵거나 불가능할 수 있고, join을 할 수 없으니 각 data를 통합해서 보기 위해 application에서 처리를 해야 하거나 서로 다른 DB에 중복 저장해야 할 수도 있다.

이 책은 event-driven microservice의 기초부터 기존 서비스와의 통합, 지원 도구나 테스트 배포까지 전반적인 모든 부분을 설명한다. 다만 책에서도 설명하듯이, 또 언제나 그렇듯 event-driven microservice 역시 silver bullet은 아니다. 데이터 트랜잭션을 DBMS가 아니라 application에서 처리하기 때문에 분산 환경에서 트랜잭션을 처리할 수 있고, 각 service는 성격에 맞는 최적의 DB를 선택할 수 있지만, 그만큼 application에서 신경써야 하는 일이 늘어난다. 동기식 microservice는 일관된 commit이나 rollback을 할 수 없지만, event-driven microservice는 해당 event를 발행해서 실패한 service부터 requeue나 dead letter queue 기능을 사용해 retry를 할 수 있다. 하지만 그만큼 실시간성은 떨어질 수밖에 없고 그래서 eventual이라는 용어를 사용하게 된다. Message queue를 사용해 loosely coupled service를 구현할 수 있고 서비스 흐름을 단순화시킬 수 있으나 message 전달의 신뢰성 문제가 발생할 수 있다. 즉 언제나 그렇듯 비즈니스 요구사항과 개인/조직의 역량에 따라 architecture 설계가 필요하다. Oreilly의 책이 언제나 그렇듯 읽어서 바로 적용할 수 있는 설명보다는 좀 더 기본에 가까운 설명을 하기에 바로 이해하기 어려울 수 있지만 이 책을 여러 번 읽으면 event-driven microservice를 이해하는데 큰 도움이 될 거 같다.

  • 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
혼자 공부하는 자바스크립트 - 1:1 과외하듯 배우는 프로그래밍 자습서 혼자 공부하는 시리즈
윤인성 지음 / 한빛미디어 / 2021년 1월
평점 :
장바구니담기



  1. ‘혼공’을 새로운 시리즈로 미는 거 같다. 혼, 공 자를 다른 색으로 강조했다. 책을 보니 이렇게 https://hongong.hanbit.co.kr/ 별도의 서브 도메인으로 사이트도 준비했고, 다른 기술이나 언어에 대한 시리즈도 이미 출간이 되었다. 사이트를 가보면 스터디 모임을 위한 페이스북 페이지 링크도 있고, 간단한 테스트를 통해 선물 증정 이벤트도 열리고 있다.
  2. 저자 윤인성 님에 대해선 예전에 C책을 본 적이 있어 친숙하다. 오래전에 봤던 책은 그렇게 읽기 편한 구성은 아니었다는 기억인데, 오랜 시간 계속 책을 출간해서인지(물론 출판사나 편집자들의 능력도 더 좋아졌겠지만) 책의 구성이 스크린샷이나 풍부한 소스 코드와 실행 결과를 통해 초보자들이 따라하기 더 편하게 만들었단 생각이 들었다.
  3. 1장은 설치, 2~9장은 문법, 10장은 react 기초로 구성된다. 1~9장을 통해 기초를 익히고, 10장에서 react를 통해 간단한 프로젝트를 진행할 수 있게 하는 목표를 설정했다는 생각이다.
  4. 각 장의 마지막은 “마무리"를 통해 연습 문제를 제공하고 책의 마지막에는 정답과 해설이 있다. https://hongong.hanbit.co.kr/%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8_%ed%95%99%ec%8a%b5%ec%9e%90%eb%a3%8c/에 가면 소스 코드와 정답 압축 파일을 제공한다. 또 https://www.youtube.com/c/%EC%9C%A4%EC%9D%B8%EC%84%B1 를 통해 동영상 강의도 제공한다. 그야말로 “혼자 공부"라는 컨셉을 위해 가능한 대부분의 방법을 알려준다.
  5. 책 마지막에는 혼자 공부하는 사람들을 위한 용어 노트라는 별도의 소책자가 붙어있다. 이렇게까지 구성해야 할까? 하는 생각이 들기도 하지만, 만약 이 책을 통해 자격증이나 시험을 준비하는 사람들이 있다면 유용할 수도 있겠단 생각이 든다.



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
자바로 배우는 핵심 자료구조와 알고리즘 - 기술 면접에 필요한 실용주의 자료구조와 알고리즘
앨런 B. 다우니 지음, 유동환 옮김 / 한빛미디어 / 2018년 6월
평점 :
장바구니담기


최근 스타트업이 다시 인기를 얻고 AI가 (실제와는 다르게) 세상을 바꿀 듯 표현하는 기사들이 넘쳐나면서 개발자 인기가 좋아진 듯 보인다. 취업난과 함께 이런 현상들에 힘입어 비전공자들의 프로그래밍에 대한 관심이 높아지고, 이는 더 다양한 종류의 개발 입문서 출간으로 이어지지 않았을까 혼자 망상을 해봤다.

개발 입문서는 몇 가지 종류가 있겠지만 대표적인 예는 역시 자료구조와 알고리즘에 대한 책이다. 학부에서 초기에 배우는 필수 과목이기도 하고 이제는 사실상 표준이 된 프로그래밍 면접에서도 빠지지 않기 때문에 개발자라면 이에 대한 기본 지식은 필수이다(물론 필수다 아니다에 대한 논쟁은 예전부터 있어왔지만). 이 분야의 책은 교과서적인 경우, 여러가지 자료구조/알고리즘을 보통 pseudo code로 자세히 이론을 설명하는 매우 두꺼운 책(e.g. Introduction to Algorithm)과 실무 응용이나 면접을 위한 문제풀이에 더 치중하는 책(e.g. Cracking the coding interview)으로 아주 거칠게 나눌 수 있다.

이 책은 굳이 분류를 하자면 위의 두 책을 양 극단으로 볼 때 대충 중간 어디쯤에 있다고 생각한다. 즉 기초적인 부분에 대해서도 설명하지만 또 한편으로는 문제풀이는 아니지만 프로젝트에 적용할만한 코드를 설명을 하기도 한다. 이런 부분이 장점이자 단점으로 다가올 수 있는데, 여러가지 자료 구조를 알기 원하거나 자세한 원리를 원하는 사람에게는 불만족스러울 수 있으나, 당장 어딘가에 적용을 하기 원하고 빠른 시간 내에 바로 사용할만한 코드를 원하는 사람에겐 도움을 줄 수도 있기 때문이다.

저자는 이런 부분에 대해 대부분의 책이 너무 이론적이고, 분량이 많고, 동작 원리에만 치중한다는 생각을 했기 때문에 이 책을 썼다고 설명한다. 그래서 ArrayList, LinkedList, Doubly linked list, tree traverse, map, hashing, HashMap, TreeMap, binary search tree등의 자료 구조 개념 혹은 java collection library의 자료 구조를 위키피디아 크롤링 및 검색을 구현이라는 프로젝트와 결합해 설명한다. 아무런 사전 지식 없이 이런 목차를 보면 자료 구조 책인데 자료 구조와 크롤링 검색이 목차에 함께 있다는 점이 조금 의아할 수 있지만, https://flatironschool.com/이란 온라인 강의 사이트의 교육 과정에서 사용되는 책이라서 아마 어느 정도 완결성을 가진 프로젝트를 진행하기 위해 이런 구성을 택했을 거라 생각이 든다.

자료 구조/알고리즘을 제대로 배우기 위해서는 조금 불만족스러울 수 있으나, 기본을 빨리 익히고 사용하기 원하는 경우, 특히 java 사용자에게는 유용할 거 같다.

Ref.



댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo