노마드 코더에서 진행하는 챌린지 기록들
노개북 챌린지 7일차
오늘의 범위
- episode 30: 코로나가 준 레거시 시스템의 교훈
- episode 31: 데이터와 단짝 친구, SQL
- episode 32: NoSQL이 뭐죠?
- episode 33: 깃 & 깃허브, 똑같은 거냐고?
- episode 34: 버전을 표기하는 방법도 있어요?
Ep 30 코로나가 준 레거시 시스템의 교훈
코로나가 한창 유행일 때 미국 뉴저지주에서는 코볼(COBOL) 개발자를 급히 찾았다. 코로나로 인해 정부 시스템을 이용해야 하는 상황이 많아졌는데, 그 시스템이 바로 코볼이라는 언어로 구현되어 있었기 때문이었다.
미국의 은행 시스템 중 43%, ATM 시스템은 95%가 코볼로 개발되었을 정도로 코볼은 과거 인기 있었던 레거시 시스템이다. 그러나 오늘날 이를 다룰 줄 아는 사람들은 이미 은퇴하고 없어 코볼로 개발한 핵심 인프라들을 관리할 개발자가 없다는 것이 문제였던 것이다.
레거시 시스템 사태의 교훈
개발자는 자신이 만든 프로그램에 대해 완벽한 책임을 져야 한다. 관리자 또한 프로그램에 관심을 가지고 꾸준히 관리해야 한다. 시스템은 한번 구축하고 끝나는 것이 아닌, 사람들에게 지속적으로 영향을 주는 만큼 코드를 신경 써서 작성하고 꾸준한 관리가 필요하다는 것을 인지하고 개발을 하는 것이 이 레거시 시스템 사태에 대한 교훈이라고 할 수 있겠다.
Ep 31 데이터와 단짝 친구, SQL
SQL(Structured query Language)은 데이터베이스에 질의를 하기 위한 구조를 가진 언어이다. 한마디로 데이터베이스를 다루는 언어라고 할 수 있다.
데이터베이스는 데이터를 보관하고 있는 역할만 하기 때문에 이를 처리하려면 DBMS(Database Management System)을 거쳐야 한다. DBMS는 데이터베이스 관리 시스템으로 MySQL, SQLite, Oracle, MariaDB 등이 있다.
ORM(Object Relational Mapping)
SQL 문법은 쉬운 편임에도 불구하고 잘 모르는 개발자가 많다. 그 이유는 ORM 때문이다. ORM은 개발자에게 SQL을 번역해주는 도구 같은 것인데, 사용자에게 익숙한 프로그래밍 언어로 SQL을 사용할 수 있게 해준다. 마치 통역가를 옆에 두고 다른 사람과 이야기를 나누듯이 말이다.
문제는 개발자가 ORM을 사용하면 이에 지나치게 의존한다는 것이다. 의존도가 높으면 ORM으로만 해결하기 어려운 상황에서 대처하기 힘들 수 있기 때문에 SQL 기초 공부는 미루지 말고 꼭 해두도록 하자.
Ep 32 NoSQL이 뭐죠?
NoSQL은 SQL과는 다른 특징을 가지고 있다. NoSQL 데이터베이스 종류 중 세 가지를 아래에 소개한다.
도큐먼트 데이터베이스
도큐먼트 데이터베이스는 몽고디비(MongoDB)가 대표적이다. 몽고디비는 데이터를 JSON 형식으로 저장한다.
JSON(Javascript Object Notation)
{키1: 값1, 키2: 값2, 키3: 값3 …}의 형태
[
{ "id": 1, "name": "바지", "price": 15000 },
{ "id": 2, "name": "모자", "price": 5000 }
]
SQL은 데이터베이스가 테이블 형태를 띠고 있어 열을 늘리고 싶으면 다른 행에는 열에 해당하는 값을 넣어야 한다. 그러나 json 도큐먼트 형태는 데이터마다 구성이 같을 필요가 없어 원하는 모양, 종류의 데이터를 저장할 수 있다는 장점이 있다.
키값 데이터베이스
대표적인 키값 데이터베이스에는 카산드라디비(CassandraDB), 다이나모디비(DynamoDB)가 있다. 카산드라디비는 1초에 수만 개의 데이터를 쓸 수 있고 다이나모디비는 1초에 2만 4,000개의 데이터를 읽을 수 있을 정도로 속도가 매우 빠르다. 특히 다이나모디비는 애플, 넷플릭스, 인스타그램 등의 대용량 데이터를 다루는 회사에서 흔히 사용되고 있다.
그래프 데이터베이스
그래프 데이터베이스는 열, 도큐먼트 대신 노드를 필요로 한다. 노드는 간단히 말해 데이터의 관계망 정도로 생각하면 된다. 그래프 데이터베이스는 Apache AGE, Amazon Neptune 등이 있다.
SQL, NoSQL은 뭐가 더 좋다라고 우열을 가릴 수 없다. 서로의 특징이 다르기 때문이다. 용도에 맞게 사용하면 된다.
Ep 33 깃 & 깃허브, 똑같은 거냐고?
Git
Git은 파일 이력을 관리하는 프로그램으로 같은 파일이라도 다른 버전으로 보관할 수 있다는 특징이 있다. 깃은 협업에서도 중요한 역할을 한다. 같은 파일을 각자의 컴퓨터에서 작업한 후 변경한 부분만을 모아 합칠 수 있기 때문이다.
Github
Github는 위에서 말한 깃으로 관리한 파일 이력을 저장하여 공유할 수 있는 공간이다. 파일 클라우드 서비스처럼 특정 폴더나 파일을 공유할 수도 있고 거기에 플러스로 깃으로 관리한 파일 이력까지 공유가 가능하다.
Ep 34 버전을 표기하는 방법도 있어요?
버전은 보통 2.1.0과 같이 표기되는데 자리마다 의미가 존재한다. 일단 숫자 세 개로 표기하는 방식을 시맨틱 버저닝(Semantic Versioning specification, SemVer)이라 하고 이 방식이 가장 널리 쓰이고 있다.
첫 번째 숫자는 프로그램에 큰 변화가 있을 때 변경되는 자리이다. 이전 버전으로 만들어진 프로젝트를 새 버전으로 변경하면 코드를 전체적으로 모두 업데이트해야 하는 결과를 초래할 수도 있다.
두 번째 숫자는 프로그램에 작은 변화가 있을 때 변경된다. 기존 기능에 새로운 기능을 살짝 추가하는 정도의 수준이랄까.
마지막 숫자는 패치나 버그 수정을 의미한다. 기존 프로그램의 오류를 수정했을 때 숫자가 하나씩 카운트된다.
느낀 점
가장 기억에 남는 건 NoSQL에 대한 내용이었다. SQL과의 차이를 이번에 확실히 정리할 수 있게 되었다.
프로젝트의 규모가 커지면 SQL에서 NoSQL로 많이 변경하는 것 같은데, NoSQL의 스피드라든지, 구성이나 종류에 상관없이 데이터를 저장할 수 있다는 점이 매력적이다. SQL은 어느 정도 알고 있으니 NoSQL도 공부해보면 좋을 것 같다.
그리고 놓치고 있던 DBMS! 하도 MySQL이나 오라클과 같은 관리 시스템을 그냥 SQL이라 부르다 보니 본질을 잊을 것 같은데 잘 기억해놔야겠다.
References
book - IT 5분 잡학사전