# [노개북] It 5분 잡학사전#8 - ep. 30~34

## 📌 오늘 TIL 3줄 요약

* 레거시는 유산이라는 뜻으로 오래전에 개발된 시스템을 레거시 시스템이라고 부른다.
    
* NoSQL는 document, key-value, graph DB가 있으며 각 특성에 따라 용도가 다르다.
    
* 시멘틱 버전닝(e.g., 1.0.0)에서 뒤로 갈수록 작은 수정을 의미한다.
    

## 📆 TIL (Today I Learned) 날짜

2023-12-17

## 📚 오늘 읽은 범위

에피소드 30~34

## 📝 책에서 기억하고 싶은 내용

### 에피소드 30 코로나가 준 레거시 시스템의 교훈

* 레거시(legacy)는 유산이라는 뜻으로 오래 전에 개발된 시스템을 레거시 시스템이라고 한다.
    
* 코로나가 터지고 뉴저지 주지사가 TV에 나와서 "코볼 개발자를 급하게 찾는다"라고 했다. 실업자가 많아졌는데 실업자를 위한 실업 급여, 생계 지원 등을 하는 시스템이 코볼로 작성되어 있기 때문이었다.
    
* 코볼 (COBOL, Common business oriented language)
    
    * 영어와 유사한 형태로 지금의 파이썬과 같은 느낌의 프로그래밍 언어
        
    * 미국의 은행 시스템 가운데 43%, 미국 ATM 시스템은95%가 코볼로 개발됨
        
* 코볼의 문제점은 커뮤니티가 너무 적다는 것
    
    * 프로그램으로서의 기능은 매우 훌륭하게 수행하고 있음
        
    * 하지만 젊은 개발자들은 더 이상 코볼에 관심을 갖지 않음
        

#### 교훈1: 프로그램은 책임 있게 만들어야 한다.

* 개발자는 자신이 만든 프로그램에 대해 책임을 져야 한다.
    
* 잘못 만든 프로그램은 사용하는 사람들에게 굉장히 큰 영향을 준다.
    

#### 교훈2: 프로그램은 끊임없이 관리해야 한다.

* 충격적이게도 위 사례에서 시스템 관리자가 '코볼'을 '코발트'로 잘못 알고 있었다.
    
* 시스템은 한 번 구축하면 끝이 아니라 꾸준히 관리를 해줘야 한다.
    

### 에피소드 31 데이터와 단짝 친구, SQL

* SQL은 structured query language의 줄임말로 데이터베이스를 다루는 언어이다.
    
* DBMS(database management system)은 이름 그대로 데이터베이스 관리 시스템을 말한다.
    
    * SQL은 데이터베이스를 관리해주는 DBMS와 소통하기 위한 언어
        
    * DBMS로는 MySQL, PostgreSQL, SQLite, Oracle, MariaDB 등이 있다.
        
* 데이터를 표처럼 테이블에 행과 열의 개념으로 저장한다.
    

#### SQL을 프로그래밍 언어로 쓸 수 있게 해주는 ORM

* ORM(Object, relational mapping)은 개발자에게 SQL 번역기 같은 도구이다.
    
* ORM은 만능이 아니기 때문에 ORM에 너무 의존하는 것은 좋지 않다.
    

### 에피소드 32 NoSQL이 뭐죠?

* NoSQL의 종류
    
    * Document DB
        
    * Key-value DB
        
    * Graph DB
        
* SQL과 NoSQL은 누가 더 좋은지 비교가 의미가 없음
    
    * 애초에 다른 것으로 서비스의 특성을 잘 고려하여 선택
        
    * 인스타그램도 처음에는 PostgreSQL로 시작했지만 Graph DB로 이동
        

#### Document DB: 데이터 형식이 매우 자유로움

* MongoDB가 대표적
    
* 데이터를 Json document 형태로 저장
    
* SQL과 다르게 데이터의 구성이 같을 필요가 없음
    

#### Key-value DB: 읽고 쓰는 속도가 엄청 빠름

* CassandraDB, DynamoDB가 대표적
    
* CassandraDB는 column wide db로 읽고 쓰는 속도가 굉장히 빨라 대용량 데이터를 빠르게 저장해야 하거나 읽어야 할 때 좋은 선택지. 수만 개의 데이터를 1초 만에 쓸 수 있음. 애플은 10페타바이트의 데이터를 저장하고 있음, 넷플릭스, 인스타그램, 우버도 마찬가지로 사용함
    
* DyanamoDB는 아마존이 만든 데이터베이스로 Duolingo라는 학습 애플리케이션에서 사용함. 읽는 속도가 굉장히 빨라 1초에 2만 4,000개의 데이터를 읽을 수 있음
    

#### Graph DB: 노드로 관계를 표현

* 페이스북에서는 데이터를 친구, 좋아요와 같은 관계로 연결한다.
    
* 이를 표현하기에 적합한 페이스북에서 개발한 데이터베이스
    

### 에피소드 33 깃 & 깃허브, 똑같은 거냐고?

* 깃은 파일 이력을 관리하는 프로그램
    
    * 파일에 무엇을 기록했는지, 지웠는지, 파일을 아예 지웠는지 등 모두 추적
        
    * 같은 파일이라도 시간에 따라 여러 버전으로 함께 보관할 수 있음
        
    * 협업을 해야 하는 상황에서 변경된 부분만 비교해서 다시 하나로 만들 수 있어 유용
        
* 깃허브는 깃으로 관리한 이력을 저장하고 공유하는 공간
    
    * 파일뿐만 아니라 깃으로 관리한 파일 이력도 함께 공유할 수 있음
        

### 에피소드 34 버전을 표기하는 방법도 있어요?

* 시멘틱 버전닝 (semantic versioning specification, SemVer) - `1.0.0`
    
    * 대표적으로 리액트나 장고가 시멘틱 버전닝을 사용함
        
    * 첫 번째 숫자는 프로그램에 큰 변화가 있을 때
        
    * 두 번째는 기능을 추가하는 수준의 작은 변화가 있을 때
        
    * 세 번째는 패치나 버그 수정을 의미
        

## 😀 오늘 읽은 소감 및 떠오르는 생각

* 레거시가 유산이라는 뜻이었다는 것을 이전에 본 적이 있었는데 단순히 불편하게 만드는 존재라고 생각했던 적도 있었지만 그 상황에서 최선을 다해서 만들어낸 유산, 결과물이라는 것을 항상 마음속에 먼저 품어야겠다. 그리고 생각해보면 나도 레거시를 만들고 있는 것이다.
    
* NoSQL의 3가지 종류에 대해서 다 들어본 적은 있지만 모두 NoSQL의 일종이라고 생각 하지 못하고 있었다는 것을 발견했다! 카산드라DB가 그렇게 많이 쓰이고 있다는 것도 몰랐는데 한 번 어떤 특성으로 그런 것인지 공부를 해봐야겠다.
