Book

Edward Sciore의 Database Design and Implementation 리뷰

Edward Sciore의 Database Design and Implementation을 읽었다. Database Design and Implementation 북 클럽 참여기에서 다루었던 책이고, 10월 초에 읽기 시작해서 출퇴근 길에 틈틈이 읽다 보니 약 3개월 만에 완독할 수 있었다. 바쁘거나 의욕이 떨어졌을 때에도 이메일 북클럽에서 Chapter별 오프닝 이메일이 와서 훌륭한 페이스메이커 역할을 해주었다.

이 책은 학부 수준의 텍스트로, 내용 면에서 어렵지 않았다. 초반에는 기본 개념을 다루다가, 후반부로 갈수록 앞에서 다룬 개념들이 결합되어 복잡한 구현이 가능해지는 부분이 특히 재미있었다.

책의 장점

이 책의 가장 큰 장점 중 하나는, 데이터베이스의 기본 개념과 구성 요소를 실제 코드로 설명한다는 점이다. 개념만 설명할 경우, 실제 구현 방식을 충분히 이해하지 못한 채 모호하게 넘어갈 수 있지만, 이 책은 코드를 통해 각 요소의 역할과 구현 방법을 구체적으로 이해할 수 있도록 도와준다. 흔히 텍스트에서 개념 설명과 코드의 제시가 따로 노는 경우가 많은데, 이 책은 개념 설명과 코드의 설명이 자연스럽게 연결되어있다. 또한, 코드의 설명도 매우 정성스럽게 이루어져 있어 코드의 이해도 쉬웠다.

다른 중요한 장점은, 데이터베이스의 요소에 대한 단순하고 직접적인 구현을 제시한 뒤, 이를 이용해 다음 장에서 한단계 위의 구성요소를 만들어 올리는 방식이다. 이를 통해 데이터베이스의 모듈화된 구조를 명확하게 보여준다. 추가적인 개념이 도입이 되면, 단순한 구현의 단점을 보완하는 개선된 구현을 제시해 점진적인 학습이 가능하도록 돕는다.

책의 단점

굳이 단점을 꼽자면, 각 Chapter 별로 현대 데이터베이스에서 흔히 사용되는 테크닉들과의 연결고리를 제시하는 Advanced Topic이 있었다면 더 보편적인 텍스트가 되었을 것이라는 아쉬움이 있다. 그러나, 이 책이 단순성과 이해 가능성을 우선시한 접근이었기 때문에 이는 큰 단점이라기보다는 방향성의 차이로 볼 수 있다.

인상 깊었던 부분

특히 재미있게 읽었던 Chapter들은, 데이터베이스의 핵심이라고 할 수 있는 Transaction과 Recovery, Concurrency를 다루는 Chapter 5, 데이터베이스의 빌딩 블럭들을 이용해서 쿼리의 실행과 플랜을 구현하는 Chapter 8과 Chapter 10, 인덱스와 Materialization, Sorting, Buffer 활용, 기초적인 Query 최적화를 다루는 Chapter 12 – 15들이었다. 이렇게 적고 보니 확실히 후반부를 더 흥미롭게 읽었던 것 같다.

읽고 난 후의 소감

2019 – 2020년 경에 데이터베이스 논문들을 읽으면서 현대적인 데이터베이스의 테크닉들을 재미있게 공부했었는데, 이번에 이 책을 읽으면서 기본적인 개념 및 구현과 현대적인 테크닉 사이의 갭을 바라볼 수 있는 시각을 얻게 되었다. 우연한 기회에 북클럽을 통해서 이 책을 읽게되었는데, 생각보다도 공부의 방향을 잡는데 큰 도움이 되었다.

단순히 코드를 읽는 것보다 직접 작성하는 것이 학습에 더 효과적이라고 생각하기 때문에, 시간이 나는대로 이 책의 Programming Exercise 중 중요한 문제들을 풀어볼 계획이다. 앞으로는 이 책에서 다루는 데이터베이스의 기본 개념들과 현대적인 데이터베이스의 테크닉들 사이의 갭에 해당하는 영역을 공부해보고자 한다.

Edward Sciore의 Database Design and Implementation 리뷰 더 읽기"

Database Design and Implementation 북 클럽 참여기

관심 가는 소프트웨어 북클럽이 종종 있다. 그런데 대부분 미국 중심이다 보니, 주기적으로 모이는 시간대가 보통 새벽이다. 그래서 참여하기가 힘들고, 참여를 못 하면 북클럽의 의미도 없어진다. 그런데 최근에 Software Internal 관련 이메일 북클럽이 있다는 소식을 듣고, 기대가 되어 바로 참여해보기로 했다. 책은 Edward Sciore의 Database Design and Implementation. 잘 모르는 책이지만, Software Internal 북클럽이니 믿고 일단 신청하고 주문부터 했다.

이메일 북클럽 운영 방식은, 참가자들이 Google Group에 가입해 매주 정해진 디스커션 리더가 새 챕터별로 쓰레드를 여는 형태였다. 특별히 큰 의무감이 따르지 않는 방식이었는데도, 매주 열리는 디스커션이 일종의 페이스메이커 역할을 해주었다.

요즘 공부 의욕이 높지 않아서 많은 시간을 들인 것은 아니고, 주로 퇴근길 버스에서 틈틈이 읽고 있다.

Chapter 1, 2, 3이 각각 Database Systems, JDBC, Disk and File Management 주제를 다루는데, 학부 수준의 내용이라 흥미가 생기지 않아 괜히 시작했나 싶기도 했다. Software Internal 북클럽인데 왜 하필 이 책을 고른 건지 의문이 들었다.

그러나 Chapter 3 마지막에 이 책의 가치를 조금 이해하게 되었다. 이 책은 Java로 만든 매우 단순한 데이터베이스 구현체인 SimpleDB를 함께 설명하면서, 각 장 마지막에 코드 레벨로 개념을 다룬다. Excercise에는 이 코드를 개선해보는 과제들도 있다.

어제 퇴근길에 Chapter 4 Buffer Management까지 읽었다. 데이터베이스의 핵심 구조이다 보니 집중해서 읽게 되었고, 코드까지 함께 다뤄볼 수 있어 흥미로웠다. 아침에 시간을 내어 오래된 SimpleDB 코드를 빌드하고 실행할 수 있게 만들었다.

처음 시도해보는 소프트웨어 북클럽이라 약간 망설임도 있었지만, 시간이 갈수록 생각보다 많은 것을 배우고 있다. 단순히 읽기만 하는 것과 달리, 직접 코드를 만져보며 책 속 개념들이 어떻게 구현되는지 더 깊이 이해하게 된다. 이제는 다른 언어로 포팅해보는 것도 하나의 도전으로 삼고, 앞으로도 꾸준히 참여해보려고 한다.

Database Design and Implementation 북 클럽 참여기 더 읽기"

Artificial Condition: The Murderbot Diaries

머더봇 다이어리 2권, Artificial Condition을 읽었다.

1권의 사건 이후로 일종의 자유를 얻게된 머더봇은, 처음으로 자신의 목적에 따른 여정을 떠나게 된다.

회사의 소유는 아니게 되었지만 여전히 SecUnit이 홀로 다닌다는 것은 인간들에게 커다란 위협이다. 인간사회로부터 이목을 끌지 않기 위해 노력하는 과정들이 흥미롭고, 결국 어느 정도 성공한 것으로 보인다. 특히 인간들과도 어울릴 수 있게 된 점으로 인해 시리즈의 후속편들에서 여러가지 전개의 가능성이 열리게 된 것 같다.

이 책에서 가장 즐거웠던 것은 머더봇이 ART (Asshole Research Transport)라고 부르는 연구용 수송선과 티격태격 대는 장면들이었다. 드라마를 함께보며 신뢰를 쌓고 서로의 의도를 알아채고 행동을 하는, 인간으로 말하자면 우정을 쌓으며 사건을 해결해나가는 과정이 재미있었다.

1권과 마찬가지로 2권의 사건도 격렬한 전투로 마무리가 된다. 마치 액션 영화를 한편 본 느낌.

이야기가 진행되는 공간의 범위가 크게 넓어지면서, 머더봇이 설명하는 인간들의 모습이나 네트워크와 봇들과 어울려 살아가는 인간 사회의 모습이 꽤나 있음직하고 자세하게 묘사되었다. 이후의 이야기들도 기대가 된다.

Artificial Condition: The Murderbot Diaries 더 읽기"

삼체 1부: 삼체 문제

류츠신의 삼체 1부를 읽었다.

삼체 세계라는 3개의 항성을 가진 행성의 문명과 인류가 조우하는 이야기를, 삼체 게임을 통한 삼체 세계에 관한 설명, 문화혁명으로 시작하는 예원제의 비극적인 삶, 과학자들의 자살 사건으로 시작하는 미스테리와 충돌이라는 3가지의 흐름으로 풀어내고 있다.

이 작품에서 가장 매력을 느꼈던 이야기는 예원제의 이야기였다. 문화혁명에서 소신을 굽히지 않았던 과학자 아버지를 잃고 자신도 반동분자의 자식으로서 정신적인 고통과 고초를 겪는다. 과학자로서 예전에 했던 연구를 의미를 알아보는 사람이 있어서, 양탄일성과 함께 시작된 국가 프로젝트의 격리된 시설에서 외롭고 생존을 위한 치열한 삶을 살아간다. 예원제의 이야기는, 소설의 다른 이야기들과는 달리, 국가 또는 대중의 개인에 대한 폭력이 얼마나 개인에게 상처를 줄 수 있는지, 그리고 정치적인 관념이 과학을 지배할 때 어떠한 일이 일어나는지를 섬세하게 보여주어, 이 소설의 주인공과 주제는 예원제의 삶이 아닐까 생각했다.

삼체 문명과의 조우 사건이 전개되는 과정에서 일반해가 없다고 증명된 삼체 문제를 몬테카를로 방법으로 풀려고 사도한다든가, 우주엘리베이터에 사용될 수 있는 강도를 가진 나노 소재 연구라든가, 소립자의 차원을 조작해서 직접회로를 만든다든가 하는 SF 소설을 읽는 사람들이 즐길만한 소재들도 상당히 많이 활용되었다. 개인적으로는 과학적인 소재에 대한 설명을 줄이고 좀 더 인물들의 생각과 대화에 좀 더 비중을 두었다면 이미 훌륭한 작품이 더욱 훌륭한 SF 고전이 되지 않았을까 생각한다. 하지만, 저자의 맺음말에서도 오히려 과학적인 소재에 치중하는 중국 SF계의 유행을 벗어나기 위해 의식적으로 노력을 기울인 결과임을 알고나서는 어느 정도 이해가 되었다.

삼체 1부: 삼체 문제 더 읽기"

다섯번째 계절

N. K. 제미신의 부서진 대지 3부작의 1권인 다섯번째 계절을 읽었습니다.

서로 다른 시간과 장소에서 세 갈래의 이야기가 각각의 강렬한 사건으로 시작합니다. 이 책을 읽으며 이야기 속의 세상과 삶이 어떻게 이루어져 있는지 배우고, 절반 정도에 이르면 어느 정도 익숙해집니다. 하지만, 이것으로 끝나지 않고, 이 책의 마지막 장까지 놀라움은 끊이지 않습니다.

주인공들과 이 세상의 사람들은 (우리와 별 다를 것 없이) 고통 한가운데에서도 한 줌의 평범한 삶과 자유를 구합니다. 주인공들이 욕지거리를 하거나 그저 침묵으로 말을 하며 감정을 드러내지 않을 때에도 깊이 감정이 전해졌습니다.

마지막에 이르러 세갈래의 이야기가 만나며 이제서야 이야기가 시작되었다고 말합니다.

다섯번째 계절 더 읽기"

좋아하는 일만 하며 사는 법

소싯적에는 일터에서 역량이 올라가고 인정을 더 많이 받게 되면 내가 좋아하는 일을 더 많이 할 수 있을거라고 믿었던 적이 있다. 그런데 현실은 더 많은 책임을 지게 되면서 더욱 많은 사람들이 내게 요구를 하기 시작하고 그걸 하는 것만으로 내 인생은 흘러가버리고 있었다. 그렇게 느끼고 있을 즈음에 서점에서 골라든 책이 바로 이 책 “좋아하는 일만 하며 사는 법“이다.

이 책은 과학적인 연구결과를 바탕으로 독자를 설득하는 책이라거나 눈부신 성과와 업적을 쌓은 경영자가 쓴 책은 아니다. 저자인 고코로야 진노스케라는 분이 자신의 인생에서 느끼고 실천한 것들을 바탕으로 독자들에게 자신의 인생을 바라보는 ‘다른’ 관점을 제시하는 책이라고 할 수 있다.

나도 이 책을 읽고서야 비로소 나는 내가 좋아하는 일을 하는 것이 아니라, 다만 열심히 노력하고 있다는 것을 완전히 깨달을 수 있었다. 이 책을 읽기 시작한 것은 약 1년 전이지만, 물론 지금의 나도 그러고 있고, 내가 아는 많은 주변의 사람들도 자신이 좋아하는 일이 아니더라도 인내하고 고군분투하며 일을 하며 살아가고 있다.

이 책에서 이야기 하고자 하는 내용을 추려보면 그리 많지는 않고 책을 통틀어 여러가지 관점에서 독자들을 설득하기 위해서 비슷한 내용을 반복하고 있다. 미래의 나를 위해서 간략히 요약을 해보았다.

  • 노력이 항상 보상 받는 것은 아니다. 노력하지 않아도 보상받을 때도 있다.
  • 노력하지 않아도 자신에게 가치가 있다는 것을 믿어야 한다. 노력하지 않는 ‘나’는 가치가 없다고 생각하는 이유는 어렸을 때부터 부모님 혹은 선생님, 주변 사람들이 계속 노력을 강요했기 때문이다.
  • 쉬운 길이 있다면 이것을이용하자. 누구나 올라가는 에스컬레이터를 탈 수 있지만 노력하는 사람들은 타지 않는다.
  • 혼자 애쓰지 말자. 남의 힘을 빌릴 줄도 알아야 한다. ‘자신의 힘’만을 믿고 ‘남의 힘’을 믿지 못하면 그 힘은 결코 이용할 수 없다.
  • 내가 좋아하는 일을 하면 그로 인해 모두가 즐거워진다. 내가 좋아하는 일을 하면서 마음껏 즐기는 일이 누군가에게 용기를 주고, 인생의 새로운 가능성을 열어주기 때문이다.
  • 좋아하는 일을 하기로 작정했다면 다른 사람에게 폐를 끼치는 용기와 미움받을 각오가 필요하다.
  • 대다수의 일하는 사람들은 일이 너무 힘들어도 책임감 때문에 회사를 그만두지 않는다. 그런 책임을 느낄 필요는 없다. 가족의 행복을 위해서 아버지는 열심히 일하고 있지만, 아버지가 노력해서 회사에 계속 다니는 게 가족을 위한 행복이라고는 할 수 없다. 가족은 행복해도 아버지가 불행하다면 아무런 의미가 없다.
  • 지금까지와 다른 삶을 살려고 마음먹었다면, 애쓰며 사는 삶에서 벗어나기 위해 애쓰는 것도 좋은 방법이다.
  • ‘나도 다른 사람에게 폐를 끼칠 수 있고, 동시에 다른 사람들도 나한테 피해를 줄 수 있다.’ 이렇게 생각하면 오히려 피해는 줄어들고, 사람들은 좀 더 자유롭게 살아갈 수 있다. 문제가 생겼을 때는 진심으로 ‘미안하다’고 사과하면 의외로 문제는 쉽게 해결된다.
  • 평범한 인생을 살아갈지 대단한 삶을 살아갈지는 선택의 문제다. 안전을 추구하면 ‘즐거움’을 잊게 된다.

이 책을 읽고 깨달음이 있어서 다른 사람들에게도 몇번 들려주었던 책 속의 이야기도 인용해본다.

그때까지 저는 혼자서 열심히 우물을 파고 있던 셈입니다. 우물을 파야만 물을 얻을 수 있다고 믿었으니까요. 그래서 다음 날도, 그다음 날도 열심히 곡괭이질하며 우물을 팠던 거죠. 가까이에 강이 흐르고 있었지만 내가 마실 물은 직접 우물을 파서 얻어야 한다는 착각에 빠져 강물은 거들떠보지도 않았습니다. 편하게 강물을 끌어와 마시는 사람을 보면 뻔뻔하다는 생각이 들어 화가 났습니다. 그런데 냉정하게 생각해보니 그렇지 않더군요.

‘저기 강이 있으니까 그 옆에 깊게 골을 파면, 힘들여 우물을 파지 않아도 저 녀석처럼 편하게 물을 마실 수 있잖아.’

그 사실을 깨닫고 나서 깊게 골을 파기로 결심했습니다. 예전의 나였다면 골을 파는 것도 전부 스스로 해야만 한다고 고집을 부렸을 겁니다. 하지만 그때는 ‘조금 기다려보자’고 마음 먹었습니다. 주변에는 사람이 많이 있었고 어쩌면 그들의 도움을 받을 수 있을지도 모르니까요.

저는 시험 삼아 “죄송합니다만, 깊게 골을 파려고 하는데 도와주실 수 있으세요?”라고 외쳐보았습니다. 그러자 “아아, 그러죠”라며 사람들이 다가오더군요. 제 주변에는 땅을 파고 싶어 하는 사람과 파는 것을 잘하는 사람, 좋아하는 사람이 많았던 겁니다. 그들의 도움으로 순식간에 골을 팔 수 있었습니다. 제가 기뻐하자 그들도 기쁘다고 말해주었습니다.

이 책을 읽은 이후에 삶을 바라보는 새로운 관점이 추가되기는 했지만, 정말로 이를 실행에 옮기는 것은 쉬운 일이 아니었다. 정신을 차려보면 항상 ‘노력하는 나’로 돌아가있었고 남들에게 폐를 끼치는 것, 미움 받는 것이 두려워서 남들이 요구하는 일만을 하고 있었다. 애쓰며 사는 삶에서 벗어나기 위해 매일 매일 적극적으로 노력하지 않으면 쉽지 않은 일인 것 같다.

나는 엔지니어로서의 일을 사랑하고 이 일을 통해서 ‘대단한 것’을 하고 싶다. ‘대단한 것’을 할 수 있었던 많은 사람들은 ‘좋아하는 일’을 했다는 것도 알고 있다. 그리고 그것을 할 수 있는 능력이 내게 있다는 자신감도 있다. 단 한가지 문제는 내가 여태껏 ‘좋아하는 일’을 ‘하지 않는’ 선택을 해왔을 뿐일 것이다. 다시 한번 ‘좋아하는 일을 하는 선택’을 해보자.

좋아하는 일만 하며 사는 법 더 읽기"

Programming in Scala

Programming in Scala 2nd EditionProgramming in Scala, Second Edition

2013년이 시작하고 얼마 지나지 않아 트위터에서 개발자 저마다 개인적으로 2012년의 프로그래밍 언어를 꼽는 것이 유행한 적이 있다. 조금 늦었지만, 내게 2012년 한 해의 언어를 꼽으라면 Scala가 될 것 같다.

가장 큰 이유는 두가지로, 첫번째는, (정확히 세어보지는 않아서 모르겠지만 아마도) 2012년 동안 가장 많은 라인을 코딩한 프로그래밍 언어가 Scala라는 것, 두번째는, Programming in Scala를 읽었다는 점이다.

“The Scala Programming Language”

이 책의 주 저자라고 할 수 있는 Martin Odersky는 바로 Scala 언어의 설계자로, 즉 이 책은 흔히 “The XXX Programming Language”에 해당하는 책이라고 할 수 있다. 책의 내용은 Scala의 전반적인 특징들을 예제를 통해서 익히는 튜터리얼 성격의 도입부와 주요한 문법들을 설명하는 부분, 클래스 라이브러리에 관한 부분으로 나누어져 있다고 볼 수 있는데, 지루해 보이는 예제 프로그램을 여러 장에 걸쳐서 계속해서 써먹고 있다는 것을 빼고는 잘 쓰여진 프로그래밍 언어 서적이라고 생각한다. 따라서, Scala 언어를 공부하고자 한다면 이 책을 읽는 것을 추천해도 무리가 없으리라 생각한다.

Scalable Language

이 책을 읽으면서 Scala 언어를 좋아하게 된 가장 큰 이유 중 하나는, 매우 일반적인 문법 토대를 세우고, 다른 문법 요소나 클래스 라이브러리, Java 언어와의 호환성을 그 위에 일구어 냈다는 것이다. 예를 들어, 패턴 매칭(match…case 구문)이 예외 처리나 Actor에서도 사용되는 것이라든지, 기본형이나 컬렉션 클래스들의 Java 호환성을 implicit conversion을 이용해서 해결하는 것과 같은 것들이다. Java 언어를 공부할 때, 특정한 클래스들이 문법의 요소로 사용되는 것이 마음에 들지 않았는데, Scala는 그런 면에서는 오히려 C++ 언어 template을 이용한 확장성 있는 문법을 보는 듯한 느낌이다. 물론 이 언어의 이름인 Scala도 Scalable Language를 의미하는 것이다.

The Throne Threatened

한편, 최근 몇 년간 나의 과제 중 하나는 JVM 환경에서 적절한 glue language를 찾는 것이었다. 그 과정에서 물망에 올랐던 JRuby는 Java와의 호환성 면에서 프로그래머를 괴롭게 만드는 여러가지 문제들이 발견되어 포기했고 (지금은 해결되었을런지도 모르겠다), Groovy는 초기의 기대에 비해 너무나 인기를 끌지 못해서 다른 사람들을 설득하기가 어려웠는데, 반면, Scala 언어는 Java의 기본형이나 시스템 클래스들, 클래스 라이브러리들과의 호환성이 위에서 언급한 것과 마찬가지로 매우 세심하고 우아한 형태로 준비되어 있는 동시에, 어느 정도는 사람들의 이목을 끌었다는 장점이 있다. 오히려 Java의 개선 방향을 제시해주는 것은 아닐까 생각이 들 정도로 JVM 환경의 언어 수준을 한층 더 끌어올린 것 같다.

Closing

이 책을 읽은 것은 몇 달 전의 일이지만, 이제 Pattern matching과 Actor를 쓰기 시작하는 정도에 익숙해진 정도로 대체로 아직은 Java 코드 수준과 크게 다르지 않은 수준의 코드를 쓰고 있기 때문에, Scala 언어로 쓰인 오픈소스 프로젝트의 코드를 통해 좀 더 Scala다운 스타일의 좋은 코드들을 경험해보는 것이 좋을 것 같다.

Further Reads

 

 

 

Programming in Scala 더 읽기"

Jolt Awards 2012

2012년에도 어김없이 Jolt Awards가 발표되었었는데, 최근에야 생각이 나서 찾아보았습니다. 모두 흥미로운 책들로 보입니다만, Google의 개발 환경을 어느 정도 엿볼 수 있는 How Google Tests Software를 Kindle로 사서 읽고 있습니다.

The Best Books

http://www.drdobbs.com/joltawards/jolt-awards-the-best-books/240007480

Jolt Award

Jolt Productivity Award

Jolt Finalist

Jolt Awards 2012 더 읽기"

Jolt Awards 2011

Excellence Award는 Continuous Delivery, Productivity Award는 Seven Languages in Seven Weeks와 Mining the Social Web이 수상했다. 이들 Top 3 이외에 당장 관심이 가는 책은 Martin Fowler의 DSL 책, Scalability Rules 정도.

The Best Books

http://drdobbs.com/joltawards/231500080

  • Domain-Specific Languages, by Martin Fowler
  • The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1, by Donald E. Knuth
  • The Joy of Clojure: Thinking the Clojure Way, by Michael Fogus and Chris Houser
  • Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages, by Bruce A. Tate
  • Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites, by Matthew A. Russell
  • Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation, by Jez Humble and David Farley

The Rest of the Best

http://drdobbs.com/joltawards/231600815

  • Arduino Cookbook
  • CLR via C#, 3rd Edition
  • Data Analysis with Open Source Tools
  • Eloquent Ruby
  • High Performance JavaScript
  • Scalability Rules: 50 Principles for Scaling Web Sites
  • The Software IP Detective’s Handbook: Measurement, Comparison, and Infringement Detection
  • The Rails 3 Way
  • The RSpec Book: Behavior Driven Development with Rspec, Cucumber, and Friends

Jolt Awards 2011 더 읽기"