[노개북] 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가 그렇게 많이 쓰이고 있다는 것도 몰랐는데 한 번 어떤 특성으로 그런 것인지 공부를 해봐야겠다.