우연히 발견한 책이지만, 나름 재밌게 읽어서 정리함.
미래를 바꾼 아홉가지 알고리즘
첫 챕터만 봐도 컴퓨터 전공자만을 위한 책이 아니라는 것을 알 수 있다. 좋은 책이라고 생각한다.
Chapter 1 - [컴퓨터를 움직이는 위대한 아이디어들]
컴퓨터과학자들은 자신들의 중요한 아이디어의 상당수를 ‘알고리즘(Algorithm)’ 이라고 표현한다.
- 알고리즘이란
- 문제를 푸는 데 필요한 단계의 순서를 명확히 명시하는 구체적인 계산법.
- 이 책을 읽었다고 해서 매우 숙련된 컴퓨터 사용자가 될 수는 없겠지만, 컴퓨터 장치에서 여러분이 매일 끊임없이 이용하는 알고리즘의 아름다움을 훨씬 깊이 느낄 수 있게 될 것이다.
- 그게 왜 좋을까? 비유를 들어 보겠다. 나는 천문학 전문가가 아니다. 사실 천문학에 대해 상당히 무지하고 더 많이 알고 싶어 한다. 그러나 내가 가진 매우 짧은 천문학 지식 덕분에 밤 하늘을 볼 때마다 즐거움이 배가된다. 내가 바라보는 대상에 관한 이해가 만족감과 경탄을 낳기 마련이다. 책을 읽은 뒤 컴퓨터를 사용하면서 이런 기쁨을 가끔은 느끼게 되길 진심으로 바란다.우리 시대에서 가장 편재하고 불가해한 블랙박스인 컴퓨터, 즉 여러분 앞에 놓인 천재의 진가를 알아보게 될 것이다.
Chapter 2 - [검색엔진 인덱싱: 세상에서 가장 큰 건초 더미에서 바늘찾기]
검색엔진은 우리 삶에 엄청난 영향을 미쳤다. 우리 대부분은 하루에도 몇 번씩 검색 쿼리를 던지지만 이 탁월한 툴의 작동 원리를 그다지 궁금해 하지 않는다. 막대한 정보의 양도, 빠른 속도로 나오는 훌륭한 결과도 이제는 늘 있는 일이라, 몇 초 안에 질문에 대한 답을 얻지 못하면 짜증이 밀려온다.
- 매칭과 랭킹
- 가장 좋은 소수의 검색결과를 적절한 순서로 선별하는 작업을 ‘랭킹’이라 부른다. 랭킹은 매칭이라는 첫 단계를 뒤따르는 중요한 두 번째 단계이다. 검색 산업이라는 치열한 경쟁 세계에서 검색엔진은 랭킹 시스템의 질에 따라 살거나 죽는다.
- 2002년 미국 최고 검색엔진 시장은 구글,야후, MSN이 각각 30% 가량을 점유했다. (MSN -> Live Search -> Bing) 이후 몇 년간 구글이 시장 점유율에서 극적으로 성장하며 야후와 MSN을 각각 20%이하로 떨어뜨렸다.
- 구글이 검색 산업의 강자로 부상하게 된 것은 랭킹 알고리즘 덕분이라 여겨진다.
- 검색엔진은 랭킹 알고리즘의 질에 따라 살거나 죽는다는 말은 절대 과장이 아니다.
- 알타 비스타 : 최초의 웹 규모 매칭 알고리즘
- 검색엔진 매칭 알고리즘에 대해 많은 사람들이 21세기 초에 일어난 위대한 기술 성공 신화인 구글이 태오라고 생각할 것이다.
- 웹 검색이라는 발상은 수년 전부터 이미 존재했다. 웹 검색기법을 최초로 상용 도입한 기업은 인포시크와 라이코스, 그리고 1955년에 검색엔진을 출범시킨 알타비스타(AltaVista)였다.
- 1990년대 중반 몇 년 동안 알타비스타는 검색엔진의 왕이었다.
- 최초로 검색엔진은 웹의 모든 페이지에 있는 모든 텍스트를 완전히 인덱싱했다. (눈 깜빡할 사이에 결과가 떴다.)
- 이 획기적 기술발전을 이해하려면 아주 오래된 개념인 인덱싱부터 살펴 봐야한다.
- 오래된 평범한 인덱싱
- 인덱스(index)란 개념은 모든 검색엔진 이면에 있는 가장 근본적 발상이다.
- 웹 검색엔진용 인덱스는 책의 인덱스와 같은 방식으로 작동한다.
- 구문 쿼리(phrase query)처리 문제 때문에 단순한 인덱싱으로는 부족하다.
- 단어 위치 트릭
- 구문 쿼리 문제의 해결책이 오늘날 검색엔진을 잘 작동하게 만든 첫 번째 기발한 발상이다.
- 인덱스가 페이지 번호뿐 아니라 페이지 안의 위치도 저장해야 한다는 아이디어에서 출발한다.
- 랭킹과 근접성
- 사용자에 보여 줄 소수의 상위 검색결과를 설변하는 단계가 ‘랭킹’이다.
- 페이지의 ‘순위’는 실제로 무엇에 달려 있는가?
- ‘이 페이지가 쿼리에 부합하는가?’가 아니라 ‘이 페이지가 쿼리에 적합한가?’ 이다.
- 컴퓨터과학자는 ‘적합성’ 이란 용어를 주어진 페이지가 특정 쿼리에 적압하거나 유용한 정도를 기술하는 데 쓴다.
- 메타워드 트릭
- 대부분 웹페이지는 제목, 표제, 링크, 이미지 등 구조가 꽤 복잡하다.
- 메타워드 : 제목의 시작, 끝, 표제의 시작, 끝 등을 말함.
- 보통 단어와 같은 방식으로 메타워드를 인덱싱하는 트릭을 메타워드 트릭 이라고 한다. 터무니 없이 간단해 보일 수도 있지만 메타워드 트릭은 검색엔진이 정확한 결과와 고품질의 랭킹을 내는 데 결정적인 역할을 한다.
- 인덱싱과 매칭 트릭이 전부는 아니다
- 이 장에서 소개한 두 트릭만으로 효과적 검색엔진 인덱스를 구축하지는 못한다는 사실을 반드시 인식해야 한다. 그러나 단어 위치 트릭과 메타워드 트릭은 분명히 실제 검색엔진이 인덱스를 구축하고 이용하는 방식을 맛배기로 보여준다.
- 알타비스타가 (다른 검색엔진은 실패했던) 전체 웹에서 딱 들어맛는 결과를 찾는 데 성공한 이유는 메타워드 트릭 덕분이었다는 것을 1999년 알타비스타가 제출한 **<인덱스 제한 검색(Constrained Searching of and Index)> 라는 미국 특허를 통해 볼수 있다.
- 우리가 이미 알고 있듯 효율적 매칭은 효과적 검색엔진이 되는 데 딱 절반 정도의 역할을 할 뿐이다. 나머지 과제는 적절하게 매칭된 페이지의 순위를 매기는 일, 즉 랭킹이다. 다음 장에서 보겠지만 새로운 유형의 랭킹 알고리즘은 알타비스타를 몰락시키고 구글을 웹 검색 세계의 중심으로 올려 놓기에 충분했다.
Chapter 3 - [페이지 랭크: 구글을 출범시킨 기술]
구글이 검색결과의 순위를 매기는 데 이용한 혁신적 알고리즘은 페이지랭크 이다. 이는 웹페이지 순위를 매기는 알고리즘인 동시에 래리 페이지가 개발한 랭킹 알고리즘이기도 하다. 이 장에서는 검색 쿼리에 가장 적합한 결과를 상위 검색결과로 산출할 수 있는 방법과 요인을 살펴본다.
- 하이퍼링크 트릭
- 하이퍼링크란 클릭했을 때 다른 웹페이지로 연결하는 웹페이지 구문이다. 대부분 웹브라우저에서는 눈에 쉽게 띄도록 파란색 밑줄이 표시되어 있다.
- 페이지 랭크를 이해하는 첫 단계는 이 책에서 하이퍼링크 트릭 이라고 부를 간단한 발상이다.
- 각 페이지에서 연결된 페이지 수를 세어 각 페이지에 있는 인커밍링크 (incoming link) 의 수에 따라 순위를 매기는 방법으로 접근했다. 물론 사람이 페이지 전체를 읽고 순위를 수동으로 결정하는 방법만큼 정확하지 않지만 유용한 기법이다.
- 한 가지 명백한 점은 때론 링크가 좋은 페이지가 아닌 나쁜 페이지를 지칭하는 데 이용된다는 것이다.
- 권위 트릭
- 페이지의 모든 인커밍 링크를 동등하게 취급하는 것은 좋은 방법이 아니다.
- 전문가의 추천은 일반인의 추천보다 분명히 더 가치가 있다로 출발한 아이디어.
- 사이클이 생길 수 있다. (단점)
- 무작위 서퍼 트릭
- 사이퍼링크는 컴퓨터과학자가 ‘사이클’이라고 부르는 것을 형성할 가능성이 꽤있다.
- 무작위 서퍼 트릭은 하이퍼링크와 권위 트릭의 순기능을 결합했지만 하이퍼링크 사이클이 있을 때도 작동한다.
- 무작위로 인커밍 링크중 하나를 방문하는식으로하여 점수를 메긴다.
- 실제 페이지 링크
- 페이지랭크의 핵심을 공격하는 웹 스팸(web spam) 때문에 많은 연구가 지속됨.
- 상용 검색엔진이 페이지랭크 같은 링크 기반 랭킹 알고리즘 외에도 훨씬 더 많은 것을 이용해 순위를 결정한다.
- 1998년 공개된 구글 설명에서조차 구글의 두 공동 창업자는 검색결과 랭킹을 기여하는 여러 다른 특징을 언급했다.
- 구글의 웹사이트는 페이지 중요도 평가에 200개 이상의 신호를 이용한다고 한다.
- 오늘날 검색엔진이 매우 복잡해지기는 했지만, ‘권위 있는 페이지는 하이퍼링크를 통해 다른 페이지에 권위를 부여한다.’는 페이지랭크의 핵심 아이디어는 여전히 유효한다.
Chapter 4 - [공개 키 암호화: 공개 엽서에 비밀을 적어 아무도 모르게 보내는 방법]
인터넷상의 어떤 메시지든 라우터(router)라 불리는 수많은 컴퓨터를 거쳐 여행하기에 이 라우터에 접속하면 누구든지 메시지 내용을 볼 수 있다.
- 공유 비밀로 암호화
- 128비트 암호화
- 덧셈 트릭을 이용한 암호화 기법
- 비트 수의 30%를 계산하면 키의 근사 자릿수를 알 수 있다. 그렇다면 128의 30%는 약 38 이므로 128비트 암호화는 38자리 숫자 키를 이용한다.!
- 38자리 숫자는 매우 큰 수이고 현존하는 어떤 컴퓨터도 이 모든 가능성을 시도하는 데 수십억 년이 걸리므로 38자리 공유 비밀은 매우 안전하다고 할 수 있다.
- 블록 암호(Block cipher)
- 덧셈은 통계적으로 분석 가능한 결과를 낳고 이는 누군가가 암호화된 메시지 분석을 기반으로 키를 계산할 수도 있다.
- 변형된 덧셈트릭인 ‘블록암호’를 이용한다.
- 긴 메시지를 통상 10~15자로 이뤄진 고정된 크기의 작은 ‘블록’으로 쪼갠다.
- 그냥 메시지를 한 블록과 키를 더하는 대신 각 블록을 덧셈과 유사하지만 메시지와 키를 더 공격적으로 섞는 고정된 규칙에 따라 수 차례 변형한다.
- 오늘날의 블록 암호는 주로 10차례 혹은 그 이상 작업을 한다.
- 키를 아는 사람은 모든 계산을 역으로 구동해 해독된 원래 메시지를 얻을 수 잇다.
- AES(Advanced Encryption Standard)
- 다양한 설정으로 이용 할 수 있지만 일반적으로 16자짜리 블록을 128비트 키와 함께 이용해 10차례의 혼합 계산을 하는 방식으로 사용한다.
- 128비트 암호화
- 공유 비밀을 공개적으로 설정하기
- 페인트 혼합 트릭(디피-헬만 키 교환)
- 숫자로 하는 페인트 혼합 트릭
- 컴퓨터는 혼합 계산으로 이산 누승법(discrete exponentiation) 과 이산 로그(discrete logarithm)를 사용한다.
- 컴퓨터는 이산로그를 효율적으로 계산할 방법이 없다! (이점을 이용하면 일방향 암호화가 된다.)
- 공개 키 암호화의 실체
- RSA와 디피-헬만을 비롯한 공개 키 암호 시스템은 단순히 기발한 알고리즘 수준을 넘어선다. 이는 기업과 개인에게 동일하게 매우 중요한 상업 기술과 인터넷 표준으로 발전했다. 우리가 대부분은 공개 키 암호화 없이 안전하게 완료될 수 없다.
Chapter 5 - [오류 정정 코드: 데이터 오류를 스스로 찾아 고치는 마법]
오류 정정 코드란 컴퓨터 데이터에서 오류를 검출해 정정하는 마법 같은 알고리즘이다.
- 오류 검출과 정정의 필요성
- 컴퓨터는 세 가지 근본적 작업을 수행한다. 가장 중요한 일은 계산수행이다. 그러나 컴퓨터가 수행하는 다른 두 가지 매우 중요한 일이 없다면 답을 계산하는 능력조차 거의 무용지물이 될 것이다. 이는 데이터 저장 과 전송 이다.
- 데이터 전송과 저장과 관련된 큰 난관이 있다. 데이터는 정확해야 한다는 점이다. 많은 사소한 실수 하나조차 데이터를 무용지물로 만들 수 있기 때문이다.
- 반복 트릭
- 같은 정보를 반복적으로 전송하여 가장 많이 전송된 값을 올바른 데이터라 판단하는 방법.
- 안타깝게도 오늘날의 컴퓨터 시스템에 별로 알맞지 않다. 데이터의 크기가 커졌기때문!
- 리던던시 트릭
- 신뢰도를 향상시키기 위한 잉여 정보를 보낸다. 이를 리던던시(redundancy)라고 한다.
- 반복 트릭보다 더욱 선호한다. (상대적 비용(overhead)이 더 적다.)
- 체크섬 트릭
- 오류 정정을 하지않고 검출하는데만 집중하는 방법!
- 오류의 여부에 따라 재전송을 요청하도록 하는 방식이다.
- 핀포인트 트릭
- 2차원 패리티(two-dimensional parity)라고 컴퓨터과학에서는 부른다.
- 패리티란 컴퓨터가 통상 쓰는 이진수로 작동하는 단순 체크섬을 뜻한다. 그리고 메세지를 이차원 격자(grid)에 배열하기에 이차원 패리티라고 부른다.
- 실제 컴퓨터에 이용했지만 이는 그 어떤 리던던시 트릭보다 비효율적이다. 하지만 시각화가 쉽고, 오늘날 컴퓨터 시스템에서 흔히 쓰는 코드 이면의 복잡한 수학을 요하지 않고도 오류를 찾고 정정하는 방법의 묘미를 전달하기에 적합하다.
- 실제 오류 정정과 검출
- 일반적으로 체크섬은 오류 정정보다 오류 검출에 널리 사용된다.
- 이더넷은 오늘날 지구에 있는 거의 모든 컴퓨터가 쓰는 네트워킹 프로토콜로서, CRC-32란 체크섬을 이용해 오류를 검출한다.
- 가장 유명한 인터넷 프로콜인 TCP도 보내는 데이터의 각 청크 또는 패킷에 체크섬을 이용한다. 체크섬이 부정확한 패킷은 폐기된다. tcp는 필요한 경우 이를 나중에 자동으로 재전송 하도록 설계됐기 때문이다.
- 인터넷 상에 배포되는 소프트웨어 패키지는 대개 검사 합계를 이용해 검증된다.
- 자주 쓰는 체크섬은 MD5와 SHA-1 이다.
- 둘다 암호학적 해시 함수로 고안돼 무작위 통신 오류뿐 아니라 소프트웨어의 악성 변형으로부터 보호 기능을 제공한다.
- 일반적으로 체크섬은 오류 정정보다 오류 검출에 널리 사용된다.
Chapter 6 - [패턴 인식과 인공지능: 사람처럼 학습하고 생각하는 컴퓨터]
인간의 타고난 이점을 활용하는 분야 -> 패턴 인식(pattern recognition) 인접이웃 분류자(nearest-neighbor classifier),의사 결정나무(decision tree),인공 신경망(artificial neural network)에 대해서 알아본다.
- 인접이웃 트릭
- 가장 단순한 형태의 인접이웃 트릭은 문자 그대로의 작업을 한다. 가장 근접한 이웃을 찾아 이 최근접 이웃의 클래스를 예측값으로 이용한다.
- 스무고개트릭: 의사결정나무
- 스무고개와 같은 방식으로 동작한다.
- 분류자의 학습 단계는 복잡할 수 있지만 이는 완전히 자동이고 사람은 이를 단 한 번만 하면 된다. 그러면 우리가 필요로 하는 의사 결정나무를 갖게 되고 분류 단계는 놀랍도록 간단하다.
- 인공 신경망
- 뇌의 아주 작은 부분을 매우 단순하게 작동하도록 재현한 컴퓨터 모델이다.
- 패턴인식 :과거, 현재, 미래
- 패턴인식은 인공지능의 하위 분야다.
- 패턴인식은 소리, 사진, 영상 같은 데이터를 다루는 반면, 인공지능은 체스, 로봇 등 다양한 과제를 다룬다.
- 인공지능과 패턴 인식은 서서히 범위를 확장하고 있으며 성능을 향상시키고있다.
Chapter 7 - [데이터 압축: 책 한 권을 종이 한 장에 담기]
압축은 컴퓨터시스템의 보이지 않는 곳에서 꽤 자주 이용된다. 예를 들어 인터넷을 거쳐 전송되는 많은 메시지는 사용자조차 모르는 사이에 압축되고 거의 모든 소프트웨어는 압축된 형태로 다운로드된다. 가장 보편적인 ZIP 파일 포맷은 이 장에서 설명할 기발한 압축 알고리즘을 이용한다.
- 무손실 압축: 최고의 공짜 점심
- 런-렝스 인코딩(run-length encoding)
- 특정 길이를 가진 반복의 런을 인코딩 하는 방법
- ex) aaaabcbcbcaaaff -> 4a, 10bc,3a, 2fa1629715A
- 안타깝게도 이 인코딩법은 매우 특정한 유형의 데이터에만 유용하다.
- 실제로 이를 사용하기도 하지만 주로 다른 압축 알고리즘과 함께 쓴다. 허프만 코딩
- 허프만 코딩과 함께 결합하여 팩스 기계에 사용한다. 팩스기계는 검색은이나 흰색의 수많은 점이기 때문에 가능하다.
- 런-렝스 인코딩(run-length encoding)
- 전과 같음 트릭(same-as-earlier trick)
- 이전에 나왔던 문자를 반복해서 말하지 않고 특정지점으로 돌아가서 복사하라는 식으로 하여 압축하는 방식.
- 더 짧은 심벌 트릭(shorter-symbol trick)
- 심볼 테이블을 작성하여 압축하는 방식.
- 짧은 내용을 압축할때는 효율이 적은거 같지만 사이즈가 커질수록 효율이 엄청나다.
- 요약: 공짜 점심은 어디서 올까?
- 컴퓨터의 전형적인 ZIP 압축 파일 제작 배후에 있는 모둔 중요한 개념
-
- 압축되지 않은 원본 파일을 ‘전과 같음 트릭’ 을 이용해 변형해서 파일에 있는 반복 데이터 대부분을 돌아가서 데이터를 작성한다.
-
- 변형된 파일에서 어떤 심벌이 자주 등장하는지 검토한다.
-
- 2.에서 숫자 코드는 직접 번해해 다시 파일은 변형한다.
-
- 2단계에서 계산된 숫자 코드 테이블도 ZIP파일에 저장한다. (나중에 풀기위함)
-
- 압축되지 않은 파일이 다르면 숫자 코드 테이블도 달라진다.
- ZIP파일의 숫자 코드 테이블은 각각 다르다는 것 알 수 있다. (2단계로 인해서)
- 이 모든 과정은 효율적이고 자동적으로 이뤄지고 많은 유형의 파일에서 훌륭한 압축을 달성한다.
- 컴퓨터의 전형적인 ZIP 압축 파일 제작 배후에 있는 모둔 중요한 개념
- 손실 압축: 공짜 점심은 아니지만 매우 좋은 거래
- 이미지나 오디오 데이터는 손실 압축을 한다. (사람은 컴퓨터보다 덜 민감하기 때문에 가능)
- 생략 트릭
- 단순 생략
- 짝수번째 행과 열을 생략하여 데이터를 변형 (1/4로 줄일 수 있다)
- 픽셀의 일부 행과 열을 삭제 했기 때문에 사라진 픽셀을 추측해서 압축을 해제해야한다. (감안할 점)
- JPEG
- 지나치게 전문전인 압축법이라 간단히 설명할 수 없다.
- 기본적인 발상은 간단하다. 전체 이미지를 8x8픽셀 크기의 작은 정사각형으로 나눈다.
- 각 정 사각형을 개별적으로 압축한다. 칼라일경우 세배가 된다 (r,g,b)
- 정사각형이 약간의 차이만 있고 거의 동일한 색이라면 컴퓨터는 하나의 숫자로 대체할 수 있고, 압축을 해제했을 때 매우 작은 오류만이 드러나는 괜찮은 압축 결과를 낳는다.
- 단순 생략
Chapter 8 - [데이터베이스: 일관성을 향한 여정]
거의 모든 온라인 거래는 1970년대이래 개발된 정교한 데이터베이스 기법을 이용해 처리된다. 데이터 베이스는 두 가지 사안을 중요시 한다. 효율성 그리고 신뢰성 이 장에서는 데이터베이스 이면의 근본적 알고리즘 세 가지를 다루겠다. 이는 미리 쓰기 로그(write-ahead logging), 2단계 커밋(2-phase commit), 관계형 데이터베이스(relational database) 이다.
- 트랜잭션과 할 일 목록 트릭
- 트랜잭션(transaction)
- 데이터 불일치, 충돌들을 피하고자 만들었음.
- 일관성 유지를 위해 트랜잭션 ‘복귀(rollback)’ 이란 개념도 존재한다.
- 충돌이란, 컴퓨터의 기능을 멈춰 데이터 손실을 야기할 수 있는 모든 사고를 아우른다.
- 할 일 목록 트릭
- 모든 사람이 체계적이지는 않다. 하지만 체계적인지 여부와 상관없이 매우 체계적인 사람이 가진 훌륜한 무기 중 하나는 ‘할 일’ 목록이다.
- 컴퓨터과학자들도 유사한 개념으로 미리 쓰기 로그 란 용어를 사용한다.
- 기본 개념은 데이터베이스가 수행하려는 동작의 로그를 유지하는것이다. (하드 드라이브 등에 저장)
- 로그에 있는 정보는 충돌과 재시작 후에도 살아남게 된다. 모든 트랜잭션이 성공적으로 완료되면 할 일 목록을 삭제해 디스크 공간도 줄인다.
- 한 트랜잭션은 몇 번 수행 되더라도 상관없이 같은 효과를 내도록 고안되었다. 전문용어로 멱등(idempotent) 라고 한다.
- 크고 작은 원자성
- 트랜 잭션을 이해하는 또 다른 방법이있다. 데이터베이스 사용자의 관점에서 모든 트랜잭션은 원자성(atomicity)을 띤다.
- 할 일 목록 트릭은 원자적 트랜잭션을 제공해 일관성을 보장한다.
- 할 일 목록은 잠금(locking) 기법과 결합할 때 수천 개의 요청이 들어와도 일관성을 유지할 수 있다.
- 할 일 목록 트릭은 데이터 오염을 사전에 차단하지만 데이터 손실을 제거하진 못한다.
- 중복 데이터베이스를 위한 준비 후 커밋 트릭
- 중복 데이터 베이스
- 하드웨어 이상으로 인한 영구적 데이터 손실은 할 일 목록 트릭으로는 도움이 되지 않는다.
- 두개 이상의 데이터베이스 사본 유지가 명백한 해결책이다.
- 백업(back up) 유지라는 친숙한 개념과는 조금 다르게 동작한다.
- 백업은 특정 시점 데이터의 스냅샷이다.
- 항상 최신 상태를 유지하진 않는다.
- 백업과 다르게 중복 데이터 베이스는 모든 사본을 늘 동기화한다.
- 트랙잰션 복귀
- 트랜잭션은 데이터베이스의 일관성을 보장하기 위해 반드시 수반되어야 하는 데이터베이스에 대한 일련의 처리 동작이다.
- 어떤 이유에서 트랙잭션을 완료 할 수 없을때도 있다. (디스크 공간부족 등)
- 대표적인 트랜잭션을 완료 할 수 없는 상황은 잠금(lock)상태이다. (교착상태)
- 교착상태 검사를 주기적으로 실행하여 트랜잭션 중 하나가 취소돼 나머지 트랜잭션을 진행 할 수 있도록 한다.
- 준비 후 커밋
- 2단계 커밋 프로토콜
- 1단계: 준비 단계.
- 2단계: 결정 또는 중단 단계.
- 복제 본들이 트랜잭션을 완료할 수 있는지 없는지 여부를 보고 수행을 하도록 하는 것.
- 2단계 커밋 프로토콜
- 중복 데이터 베이스
- 관계형 데이터베이스와 가상 테이블 트릭
- 오늘날 데이터베이스 테크놀로지의 진짜 힘은 복수의 테이블을 가진 데이터베이스에서 촉발됐다.
- 복수 테이블 접근의 이점은 저장해야 하는 정보의 양이 줄어든는 점이다.
- 테이블을 정확히 설계한다면 데이터베이스에 쉽게 변화를 줄 수 있다는 점이다.
- 키
- 테이블에 있는 상세 정보를 ‘찾아보는’ 데 이용하는 열을 데이터베이스 용어로 키(key)라고 한다.
- 사람이 사전에서 단어를 찾는 방식과 유사하다.
- 빠르게 키를 찾고자 사전에 계산된 묶음의 집합을 컴퓨터과학에서는 B-트리(B-tree)라 한다. 이는 오늘날 데이터베이스를 뒷받침하는 또 하나의 중요하고 기발한 개념이다.
- 가상 테이블 트릭
- 기본 아이디어는 데이터베이스의 모든 정보는 고정된 테이블에 저장되지만 데이터베이스는 필요할 때마다 완전히 새로운 테이블을 일시적으로 생성할 수 있는데, 이 처럼 일시적으로 추가하는 테이블은 어디에도 실제로 저장되지 않는 가상 테이블 을 만드는 것이다.
- join(조인)이라는 명령을 이용하여 가상 테이블을 생성한다.
- 관계형 데이터베이스
- 상호 연결된 테이블에 있는 모든 데이터를 저장하는 데이터베이스를 관계형 데이터베이스라 부른다.
Chapter 9 - [디지털 서명: 진짜 누가 이 소프트웨어를 작성했을까?]
디지털(digital)이라는 단어를 문자 그대로 해석하면 ‘숫자 열로 구성된’ 이란 뜻이다. 서명(signature)의 핵심은 서명한 사람 이외의 사람이 읽을 순 있지만 복사(위조) 할 수 없다는 데 있다.
- 디지털 서명의 실제 목적은?
- 종이 서명에서는 여러분이 상대방에게 보낼 내용에 서명을 하지만, 디지털 서명에서는 상대방이 여러분에게 내용을 보내기 전에 서명한다.
- 사람들이 잘 인식하지 못하는 이유는 컴퓨터가 디지털 서명을 자동으로 확인하기 때문이다.
- RSA의 보안
- 모든 디지털 서명 체계의 보안 문제는 ‘적이 내 서명을 위조할 수 있는가?’ 라는 질문으로 압축된다.
- RSA 체계는 엄청나게 큰 시계 크기를 쓴다는 데 있다. (수천자리에 이름) 현존하는 컴퓨터 중 가장 빠른 컴퓨터조차 모든 가능한 자물쇠 값을 시도해 보는 데 수조 년이 걸린다.
- 실제 디지털 서명
- 일부 컴퓨터에 정통한 사용자는 이메일 메시지 같은 곳에 서명을 하지만 대부분은 다운로드한 내용을 검증할 때 디지털 서명을 주로 사용한다.
- 서명은 다른 메세지로 전환될 수 없으므로, 이를 그냥 복사한다고 해서 위조할 수 있는것은 아니다.
Chapter 10 - [계산 가능성과 결정 불가능성: 컴퓨터로 모든 문제를 해결할 수 있을까?]
미래에 아무리 많은 기발한 알고리즘이 개발되더라도 ‘컴퓨터로 해결할 수 없는’ 문제는 늘 존재 할 것이다. 이 장은 간단한 정리로 마무리한다. 책의 예시를 다 적을순 없으므로…
- 버그, 충돌, 소프트웨어의 신뢰성
- 어떠한 소프트웨어 검사 도구라도 ‘모든’ 프로그램에 잠재해 있는 충돌을 ‘모두’ 검출하는 일은 불가능하다는 것을 증명할 수 있다.
- 모든 충돌을 검출하는 프로그램은 존재할 수 없다는 사실을 귀류법으로 증명할 수 있다.
Comments