IT 5분 잡학사전
노마드코더 IT 5분 잡학사전 2주 챌린지
ID
11
status
Public
menu
TIL
submenu
tags
IT
summary
노마드코더 IT 5분 잡학사전 2주 챌린지
thumbnail
date
Apr 1, 2024

2023.01.14에피소드 1: 개발자에 대한 오해 5가지!에피소드 2: 어떤 언어부터 공부해야 할까?에피소드 3: 새 언어를 쉽게 배우는 노하우?에피소드 4: 언어 이름은 왜 그렇게 지었을까?에피소드 5: C, C++, C#은 이름처럼 비슷할까?2023.01.15에피소드 6: 왜 나만 오류가 자주 생길까?에피소드 7: 파이썬은 왜 이렇게 인기가 많을까?에피소드 8: 파이썬이 C 언어보다 느린 이유는?에피소드 9: 자바스크립트는 웹 개발에만 쓰는 언어일까?에피소드 10: 코틀린은 정말로 자바와 100% 호환될까?2023.01.17에피소드 11: 라이브러리와 프레임워크, 비슷한 거 아냐?에피소드 12: 제이쿼리는 반드시 배워야 하는 기술일까?에피소드 13: 그놈의 API, 대체 뭐길래?에피소드 14: 도메인은 왜 돈을 주고 사야 할까?에피소드 15: 플래시의 서비스 종료와 스티브 잡스2023.01.18에피소드 16: 인터넷 익스플로러가 사라진 이유와 브라우저 엔진에피소드 17: 아, 쿠키가 먹는 게 아니라고요?에피소드 18: 프런트엔드, 백엔드?에피소드 19: 서버가 뭔지 아직도 모른다고?에피소드 20: 슈퍼 개발자만 할 수 있다., 풀스택?에피소드 21: 서버리스는 서버가 없다는 뜻?2023.01.19에피소드 22: 자료구조와 알고리즘은 필수라고?에피소드 23: 배열이 뭐죠?에피소드 24: 알고리즘의 속도는 어떻게 표현할까?에피소드 25: 검색 알고리즘이 뭐죠?2023.01.21에피소드 26: 정렬 알고리즘이 뭐죠?에피소드 27: 스택, 큐가 뭐죠?에피소드 28: 해시 테이블이 뭐죠?에피소드 29: 개발자 필수 소양, 클린 코드!2023.01.22에피소드 30: 코로나가 준 레거시 시스템의 교훈에피소드 31: 데이터와 단짝 친구, SQL에피소드 32: NoSQL이 뭐죠?에피소드 33: 깃 & 깃허브, 똑같은 거냐고?에피소드 34: 버전을 표기하는 방법도 있어요?2023.01.24에피소드 35: 비밀번호는 어떻게 저장될까?에피소드 36: 객체 지향 프로그래밍이 뭐죠? -1-에피소드 37: 객체 지향 프로그래밍이 뭐죠? -2-에피소드 38: 함수형 프로그래밍이 뭐죠?2023.01.25에피소드 39: 인공지능, 머신러닝, 딥러닝, 아직도 구분하기 힘들다고?에피소드 40: REST API라니, 휴식 API인가? 이게 대체 뭐죠?에피소드 41: 도커가 뭐지? 왜 필요할까?에피소드 42: 암호화폐의 진실에피소드 43: 하이브리드...앱? 뭐라고요?에피소드 44: NFT가 도대체 뭐길래?에피소드 45: 멀웨어, 바이러스, 웜 개념 몽땅 정리
2023.01.14
오늘 읽은 범위: 에피소드 1 ~ 에피소드 5
에피소드 1: 개발자에 대한 오해 5가지!
진실 정리하기
- 누구나 프로그래밍을 잘할 수 있는 건 아니다
- 프로그래머는 암기력이 부족해도 된다
- 개발자는 천재이거나 해커가 아니다
- 코딩은 재능이 아닌 끈기의 영역이다
- 수학 못해도 개발자가 될 수 있다
에피소드 2: 어떤 언어부터 공부해야 할까?
- 프로그래밍으로 하고 싶은 것을 먼저 정하고 그에 맞는 언어를 공부하면 된다
- 가전 제품에 이식되는 프로그램을 만들고 싶다면 C언어
- 시스템 유지보수, 안드로이드 앱 개발을 하고 싶다면 자바
- 웹 개발, 인공지능 개발 등 범용성이 매우 넓고 초보자에게는 파이썬.
- 웹 개발을 하고 싶다면 자바스크립트
에피소드 3: 새 언어를 쉽게 배우는 노하우?
- 공식 문서 살펴보기
- 문법 확인하기
- 다른 언어와 비슷한 특징 집중해서 보기
- 새 언어로 코딩 시작하기
- 튜토리얼 시작하기
- 나만의 프로젝트 만들기
에피소드 4: 언어 이름은 왜 그렇게 지었을까?
- 자바는 좋아하던 커피 종류가 자바라서
- 코틀린은 러시아의 섬인 코틀린을 따서
- 자바스크립트는 처음에 모카에서 라이브스크립트로 이름을 바꿨는데 자바가 엄청나게 유행할때 라이브스크립트를 널리 알리려는 의도로 자바스크립트로 이름을 바꿈
- C 언어는 당시 가장 유명했던 프로그래밍 언어인 B 언어의 이름을 따라 지음
- C++는 C에서 조금 더 발전한 언어라는 의미로 이름을 지음
- C#은 C++ 다음에 등장한 언어인데 +기호 4개를 붙인 모양
- 루비는 펄(Perl) 언어의 영향을 많이 받았는데, 진주를 뜻하는 펄과 발음이 비슷해서 루비라고 지음
- 파이썬은 코미디 쇼의 이름을 따서 지음
- 고(Go)는 단순히 구글이 만든 언어라서
- 러스트는 녹병이라는 곰팡이 이름을 따서 지음
에피소드 5: C, C++, C#은 이름처럼 비슷할까?
- C 언어는 자원을 효율적으로 쓰면서도 최대 성능을 내는 프로그램을 만들 때 사용한다
- C++은 C 언어를 포함한 언어고 객체 지향을 지원하는 언어이다
- C#은 마이크로소프트에서 만든 언어인다 C와 C++와는 완전히 다른 언어이다. 마이크로소프트에서 만든 자바 언어라고 볼 수 있다.
2023.01.15
오늘 읽은 범위: 에피소드 6 ~ 에피소드 10
에피소드 6: 왜 나만 오류가 자주 생길까?
훌륭한 개발자가 되려면 오류를 만났을 때 잘 대응 해야 한다.
오류를 만났을 때 대응 방법 3가지
- 문제가 생겼을 때 나 자신을 문제에서 빼지 말 것
- 오류부터 고치려고 무작정 달려들지 말 것
- 오류 메시지를 읽을 것
에피소드 7: 파이썬은 왜 이렇게 인기가 많을까?
스택오버플로 사이트의 설문조사를 보면 파이썬의 인기는 계속해서 올라간다. 그 이유를 알아보면,
- 파이썬은 영어와 매우 비슷해서 친숙하다
- 파이썬은 활용 범위가 매우 넓다
- 파이썬의 커뮤니티가 어마어마하게 크다
- 파이썬의 업무 자동화에 완전 찰떡이다
에피소드 8: 파이썬이 C 언어보다 느린 이유는?
프로그래밍 언어는 2가지 방법으로 번역되는데 각각 인터프리트 언어, 컴파일 언어라고 한다.
- 인터프리트 언어: 동시 통역사 같은 방식(실시간 번역)
- 컴파일 언어: 도서 번역가처럼 해석
- 파이썬은 인터프리트 언어이고 C는 컴파일 언어라서 파이썬이 더 느리다
에피소드 9: 자바스크립트는 웹 개발에만 쓰는 언어일까?
자바스크립트는 웹 개발말고도 다양한 곳에 쓰인다.
- 하이브리드 앱, 크로스 플랫폼 앱을 만들 수 있다.
- 윈도우, 맥, 리눅스를 위한 데스크톱 소프트웨어를 만들 수 있다.
- 게임을 만들 수 있다.
- 3D, 가상 현실, 증강 현실 개발도 할 수 있다
- 머신러닝도 할 수 있다.
에피소드 10: 코틀린은 정말로 자바와 100% 호환될까?
코틀린은 젯브레인즈(JetBrains)라는 회사에서 자바와 호환되고 더 좋고 멋진 프로그래밍 언어로 개선하고 싶어서 만든 언어이다.
자바는 컴필레이션과 인터프리테이션을 다 활용하기 떄문에 코틀린이 자바와 100% 호환될 수 있다.
코틀린을 굳이 써야 하는 이유는 다음과 같다.
- 코틀린은 null에서 안전한 언어다
- 코틀린은 코루틴을 지원하는 언어다. 코루틴은 문법인데 이 문법은 많은 일은 한번에 실행할 수 있게 해준다.
소감:
- 다양한 언어들의 특징을 알 게 되어서 좋았다.
2023.01.17
오늘 읽은 범위: 에피소드 11 ~ 에피소드 15
에피소드 11: 라이브러리와 프레임워크, 비슷한 거 아냐?
공통점: 개발 속도를 더 빠르게 만들어 준다
차이점: 내가 제어하는가, 제어당하는가?
- 라이브러리는 필요할 때 불러서 쓸 수 있다
- 라이브러리를 사용하다가 마음에 들지 않으면 다른 라이브러리로 대체해도 된다
- 라이브러리를 교체한다고 해서 프로젝트의 모든 것이 무너지지 않는다
- 프레임워크는 라이브러리와 반대로 프레임워크가 우리를 제어한다
- 프레임워크를 사용해 코딩을 할 때는 규칙을 따라야 하고, 이 규칙을 바꿀 수 없다
에피소드 12: 제이쿼리는 반드시 배워야 하는 기술일까?
- 자바스크립트가 지금처럼 좋은 언어가 아니고 브라우저의 문제점이 많던 시절 제이쿼리는 브라우저의 호환성을 챙기면서도 코드를 깔끔하고 아름답게 만들어 줘서 유명해졌다
- 지금의 자바스크립트는 ES2015, ES2016, ES2017을 거치면서 매우 강력해져서 제이쿼리를 사용할 이유가 사라졌다
- 하지만 아직도 제이쿼리를 사용하는 웹 사이트, 회사가 많기 때문에 정말로 필요할 때에만 배우면 된다!
에피소드 13: 그놈의 API, 대체 뭐길래?
API는 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)의 줄임말이다.
- API는 프로그램끼리 소통하도록 도와준다
- API의 작동 방식의 특징은 사용하는 사람은 알 수 없다는 것이다
에피소드 14: 도메인은 왜 돈을 주고 사야 할까?
- 숫자에 불과한 IP 주소의 불편함을 해소하기 위해 도메인 시스템이 생겼다
- 도메인 시스템을 관리하는 것으로 레지스트리가 있다
- 레지스트리는 기업에서 운영한다
- 그런데 레지스트리를 관리하는 기업은 도메인을 만드는 역할을 할 뿐 도메인을 직접 판매하진 않는다
- 도메인을 사고 싶다면 리셀러에게서 사야하는데, 그 이유는 도메인을 레지스트리에 등록하는 과정이 매우 복잡하기 때문이다.
- 아이캔(ICANN)은 도메인을 관리하는 비영리 기구인데, 여기에 신청하면 새로운 레지스트리를 운영할 수 있다(비용이 엄청남)
에피소드 15: 플래시의 서비스 종료와 스티브 잡스
- 플래시는 애니메이션을 브라우저에 띄울 수 있게 해주는 프로그램이다
- 플래시는 웹사이트를 아름답게 만들어 주었다
- 하지만 스티브 잡스는 플래시 사용을 전면 금지해야 한다고 소비자와 임직원에게 공식 서신을 보냈다
- 첫 번째로 플래시는 오픈소스가 아니라 회사 소유라 모든 사람이 프로그램의 코드를 수정, 사용할 수 없었다. 두 번째로 플래시는 데스크톱을 위한 프로그램이므로 마우스를 활용해야 했는데, 손가락 터치를 활용하는 iOS로서는 이 점이 개발을 어렵게 만들었다5 이렇게 HTML5, CSS3에 플래시를 대체할 만한 기술이 도입되고, 플래시 없이도 아름다운 웹 사이트를 만들 수 있게 되자 어도비는 2020년 12월 31일에 플래시의 종료를 공식 발표했다
소감:
- 라이브러리와 프레임워크의 정확한 차이를 알게 되었고, 어딘가에서 많이 들어봤던 api, 도메인의 개념도 알게 되어서 좋았다.
2023.01.18
오늘 읽은 범위: 에피소드 16 ~ 에피소드 21
에피소드 16: 인터넷 익스플로러가 사라진 이유와 브라우저 엔진
1996년에 인터넷 익스플로러 3.0 버전이 발표되었다. 인터넷 익스플로러는 CSS를 최초로 적용한 웹 브라우저였다. 1999년, 인터넷 익스플로러 5.0 버전이 나왔을 때는 에이젝스(Ajax, Asynchronous JavaScript and XML) 기술을 최초로 지원했다.
- 인터넷 익스플로러는 시장을 독점했는데, 그 점유율이 무려 95%였다
- 그렇다 보니 업데이트를 게을리 해 보안 문제도 빨리 고쳐지지 않았고, 다른 웹 브라우저는 발전했다
- 결국 마이크로 소프트는 인터넷 익스플로러 지원을 중단했고, 마이크로소포트 엣지를 새롭게 발표했다
에피소드 17: 아, 쿠키가 먹는 게 아니라고요?
쿠키는 어떤 웹 사이트에 방문했을 때 브라우저를 통해 여러분의 컴퓨터에 보관하는 기록물을 말한다.
- 쿠키는 도메인 1개에만 한정한다
- 쿠키는 자동으로 보낸다
- 쿠키는 컴퓨터에 자동으로 저장된다
에피소드 18: 프런트엔드, 백엔드?
프런트엔드는 실제로 사용화는 화면을 담당하는 부분이고, 백엔드는 데이터베이스나 라우터와 같은 웹 사이트의 뒤쪽 부분을 담당한다.
- 프런트엔드는 기술의 변화 속도가 엄청 빠르다
- 프런트엔드는 내가 입력한 내용을 바로 볼 수 있다
- 백엔드는 개발 환경이 안정적이다
- 백엔드는 기술 선택지가 다양하다
- 백엔드는 사용자와 거리가 멀어서 흥미가 떨어진다
에피소드 19: 서버가 뭔지 아직도 모른다고?
서버는 모니터가 없고 365일 24시간 내내 인터넷에 연결되어 있는 컴퓨터이다. 서버는 크기, 저장소, 메모리가 모두 어마어마하다.
- 서버는 24시간 내내 주소 입력을 기다린다
- 주소가 입력되면 그 주소에 해당하는 데이터를 꺼내서 보여 준다
에피소드 20: 슈퍼 개발자만 할 수 있다., 풀스택?
풀스택은 프런트엔드, 백엔드, 데브옵스다
- 데브옵스란 소프트웨어의 개발(development)과 운영(operations)의 합성어이다. 소프트웨어 개발자와 정보 기술 전문가 사이에 소통, 협업, 통합을 강조하는 개발 환경이나 문화를 말한다
- 프런트엔드, 백엔드 개발을 다 마치면 이걸 서버에 올려야한다. 이를 위해선 서버를 고르고, 설정하고, 서버에 소프트웨어도 설치하고, 데이터베이스 설정도 하고, 보안도 신경써야하고.... 등등 엄청 많은데 이 모든 것을 데브옵스라 한다.
- 이런 일을 하는 사람을 데브옵스 개발자라고 한다
- 따라서 프런트엔드, 백엔드, 데브옵스를 모두 다 할 수 있는 사람이 풀스택 개발자이다
에피소드 21: 서버리스는 서버가 없다는 뜻?
서버리스는 우리가 직접 관리하지 않는 서버를 의미
- 서버는 예전에는 전부 수동으로 관리했다
- 이때 아마존이 등장해 EC2라는 서비스를 선보이는데, 이는 거실이나 사무실 한쪽 구석을 차지했던 서버를 아마존이 대신 운영해 준다는 목적으로 나온 서비스이다.
- 하지만 이런 서비스들은 하드웨어를 제공, 관리해 줄 뿐이고 서버의 소프트웨어 관리는 우리가 해야한다. 바로 이때 서버리스가 등장한다
- 서버리스 구조는 일단 우리들의 서버를 위한 소프트웨어(백엔드 코드)를 작은 함수 단위로 쪼갠다
- 이 함수를 서버에 올리는데 이 함수들은 서버에서 항상 깨어 있지 않다.
- 이러면 비용 면에서 큰 장점이 생기는데, 24시간 요청에 응답할 준비를 하는 서버는, 서버리스에선 함수들이 요청 할 때에만 깨어나고 그 외에는 잠을 잔다
- 하지만 두 가지 단점이 있는데, 첫 번째로는 서버리스의 함수는 잠에서 깰 때 시간이 필요하다(콜드 스타트). 두 번 째로는 서버 제공자에게 지나치게 의존한다. 그렇기 때문에 서버가 마음에 들지 않는다고 해서 쉽게 다른 회사의 서버리스 서비스로 옮기기는 쉽지 않다
소감:
- 풀스택이 단순히 프론트엔드, 백엔드인 줄 알았는데 데브옵스까지 해야 풀스택 개발자라고 하는 것을 알게 되었고, 이 때 데브옵스가 뭔지를 잘 몰랐는데 개념을 알게 되었다. 또한 서버, 서버리스, 쿠키의 대한 개념까지도 알게 되어서 유익했다!
2023.01.19
오늘 읽은 범위: 에피소드 22 ~ 에피소드 25
에피소드 22: 자료구조와 알고리즘은 필수라고?
효율적인 코드, 속도가 빠른 코드를 작성하기 위해선 자료구조와 알고리즘이 필요하다
- 알고리즘이란 컴퓨터에게 내리는 지시 사항을 나열한 것
- 컴퓨터 알고리즘에는 패스파인더 알고리즘, 압축 알고리즘 등 다양한 것이 있다
- 자료구조는 데이터를 효율적으로 보관하고 찾기 위한 것이다
에피소드 23: 배열이 뭐죠?
- 배열은 램에 줄줄이 이어진 형태로 공간을 차지한다
- 컴퓨터는 배열의 시작 주소와 길이를 알고 있다. 그래서 배열은 읽는 속도가 아주 빠르다
- 배열은 맨 앞부터 차곡차곡 채워져 있어야 한다. 그래서 배열은 삽입과 삭제가 느리다
에피소드 24: 알고리즘의 속도는 어떻게 표현할까?
알고리즘 속도는 시간 복잡도로 설명한다. 알고리즘으로 작업을 완료할 때까지 걸리는 절차 수 N을 이용해서 O(N), O(log N)과 같이 표현하는데, 이것을 빅오(Big-O)표기법이라고 한다.
- 코드의 실행문에 따라 O(1). O(n), (n) 등으로 표현할 수 있다
2
에피소드 25: 검색 알고리즘이 뭐죠?
- 선형 검색 알고리즘은 배열의 맨 처음붙터 순서대로 검색하는 알고리즘이다
- 이진 검색 알고리즘이란 정렬된 배열에서 중앙값을 기준으로 왼쪽, 오른쪽 값을 통해 값을 찾는 알고리즘이다
소감:
- 기본적인 알고리즘의 특성을 알게 되었다. 전공자이기 때문에 오늘 읽은 내용은 이미 알고 있던 내용이였다!
2023.01.21
오늘 읽은 범위: 에피소드 26 ~ 에피소드 29
에피소드 26: 정렬 알고리즘이 뭐죠?
시간 복잡도는 같으면서 성능은 다른 정렬 알고리즘 3가지: 버블 정렬, 선택 정렬, 삽입 정렬
- 버블 정렬:
- 썩 좋은 알고리즘이라고 할 수 없다.
- 실제로 많이 사용하지 않는다.
- 하지만 정렬 공부할 때는 가장 이해하기 쉽다.
- 사이클을 돌면서 왼쪽과 오른쪽 값을 비교하는 것이다.
- 시간 복잡도가 O(n)이다.
2
- 선택 정렬:
- 전체 데이터 중에서 가장 작은 데이터 또는 가장 큰 데이터의 위치를 따로 기억하는 방식으로 작업을 진행한다.
- 시간 복잡도는 O(n)이지만 자리를 바꾸는 연산은 사이클당 1번이므로 버블 정렬보다는 훨씬 효율적이다.
2
- 삽입 정렬:
- 삽입 정렬은 앞에 있는 데이터를 보면서 배치하는 특성이 있다.
- 시간 복잡도는 O(n)이다.
2
에피소드 27: 스택, 큐가 뭐죠?
스택, 큐는 문법이 따로 없고 기존 프로그래밍 언어의 문법으로 데이터를 저장할 때 어떤 규칙만 부여하기만 하면 된다.
- 스택:
- 위에서 데이터를 쌓는다.
- 위에서부터 데이터를 뺀다.
- 이런 방식을 LIFO(last in, first out)라고 한다.
- 큐:
- 위로 데이터를 쌓는다.
- 아래에서부터 데이터를 뺀다.
- 이런 방식을 FIFO(first in, first out)라고 한다.
에피소드 28: 해시 테이블이 뭐죠?
해시 테이블은 키와 값을 짝지어 모은 것이다
- 해시 테이블은 사전의 개념과 같다.
- 선형 검색의 시간 복잡도는 O(n)이지만 해시 테이블은 O(1)이다.
- 또한 데이터를 추가, 삭제할 때도 O(1)이므로 검색 외 다른 작업에서도 효율이 좋다.
에피소드 29: 개발자 필수 소양, 클린 코드!
클린 코드란 설명이 필요 없는 코드를 말한다. 코드를 읽기만 해도 이 코드가 무슨 일을 하는지, 어떤 것을 의미하는지 물어보지 않아도 이해되는 코드를 뜻한다.
- 의미 있는 변수, 함수의 이름을 적절히 사용하라
- 함수 이름은 가급적 동사로 지어라
- 매개변수는 너무 많이 쓰지 마라
- 불린값을 인자로 보내지 마라
- 축약어를 쓰지 마라
소감:
- 알고리즘 기본 지식인 정렬과, 자료구조의 기본 개념 스택과 큐를 다시 한번 복습할 수 있었다. 클린 코드를 작성하는 방법 중에 함수 이름을 가급적 동사로 지으라는 말씀을 하였는데, 생각해보니 나도 명사로 자주 짓는거 같다. 동사로 지어서 이름만으로 함수의 기능을 생각할 수 있도록 노력해야겠다.
2023.01.22
오늘 읽은 범위: 에피소드 30 ~ 에피소드 34
에피소드 30: 코로나가 준 레거시 시스템의 교훈
코볼은 1959년에 탄생한 정말 오래된 언어다. 하지만 2020년 코로나의 확산으로 실업자들은 정부 사이트에 들어가서 생계를 위한 지원을 신청해야 했는데 그 시스템이 코볼로 구현되어 있어 뉴저지 주지사는 코볼 개발자를 TV에 나와서 찾았따/
- 레거시(legacy)는 유산이란 뜻인데, 오래 전에 개발된 시스템을 레거시 시스템이라고 한다
- 예전의 코볼의 인기는 정말 많았다
- 하지만 오래 되었기 때문에 이미 훌륭한 대체 언어들이 많고, 개발자들은 다른 언어들을 배우기 때문에 코볼 커뮤니티가 적다
- 시스템은 한번 구축하면 끝이 아니라 꾸준히 관리해야 한다
에피소드 31: 데이터와 단짝 친구, SQL
SQL은 Structured Query Language의 줄임말인데 데이터베이스를 다루는 언어이다.
- 데이터베이스는 데이터를 보관하는 창고 역할만 하고 데이터를 직접 정리하거나 처리하는 일들은 DBMS(Database Management System)이 한다
- DBMS의 종류는 MySQL, PostgreSQL, SQLite, Oracle, MariaDB 등이 있다
- ORM(Object Relational Mapping)은 개발자에게 SQL 번역기 같은 도구인데 ORM을 한번 경험한 개발자는 SQL 공부를 자꾸 뒤로 미루게 된다. 하지만 ORM에 의존하면 ORM만으로 해결하기 어려운 상황에 대처하기 어렵다.
- 따라서 SQL의 기초 공부는 필수이다
에피소드 32: NoSQL이 뭐죠?
- NoSQL은 언어의 특징만 있는 것이 아니라 그들이 사용하는 데이터베이스 자체의 성질도 다르다.
- NoSQL의 데이터베이스 종류로는 도큐먼트 데이터베이스(document DB), 키값 데이터베이스(key-value DB), 그래프 데이터베이스(graph DB) 등이 있다
- 도큐먼트 데이터베이스:
- 데이터를 JSON 도큐먼트 형태로 저장한다.
- 따라서 데이터 형식이 매우 자유롭다.
- 키값 데이터베이스:
- 카산드라디비(CassandraDB), 다이나모디비(DynamoDB)가 대표적이다.
- 읽고 쓰는 속도가 엄청 빠르다.
- 그래프 데이터베이스:
- 노드로 관계를 표현한다.
에피소드 33: 깃 & 깃허브, 똑같은 거냐고?
- 깃:
- 파일 이력을 관리하는 프로그램이다.
- 협업과 버전관리에 유용하다.
- 깃허브:
- 깃으로 관리한 파일 이력을 모두 저장해서 공유할 수 있는 곳이다.
- 깃허브에 깃 이력을 업로드하는 것을 푸시, 내려받는 것을 풀이라고 한다.
- 깃랩(GitLab), 비트버킷(Bitbucket)이라는 깃 이력 보관소 서비스도 있지만 깃허브가 가장 유명하다.
에피소드 34: 버전을 표기하는 방법도 있어요?
숫자 3개를 사용하는 버전 표기 방식을 시맨틱 버저닝(Semantic Versioning Specification, SemVer)이라고 한다.
- 예를 들어 버전 4.0.5라면 첫 번째 숫자는 프로그램에 엄청나게 큰 변화가 있을 때 바뀐다
- 두 번째 숫자는 마이너한 업데이트를 의미한다
- 세 번째 숫자는 패치나 버그 수정을 의미한다. 예를 들어 4.0.25와 같이 표기되었다면 수정을 25번했다고 생각해도 좋다
소감:
- 버전을 표기하는 것도 표기 방식이 정해져있다는 것이 신기했고 알게되어서 유익했다.
- 지금 SQL을 배우고 있는데 NoSQL도 얼른 배우고 싶다!
- 코볼이라는 언어는 언어의 역사를 배울 때 듣던 언어인데 최근에 코볼 개발자를 구했었다는 사실을 알게 되어서 신기했다.
2023.01.24
오늘 읽은 범위: 에피소드 35~ 에피소드 38
에피소드 35: 비밀번호는 어떻게 저장될까?
- 비밀번호 시스템 구축의 괜찮은 방법으로는 해시 함수가 있다
- 해시 함수는 입력한 값을 무작위 값으로 둔갑시켜 준다
- 해시 함수는 동일한 입력값에 대해 동일한 출력값을 가진다
- 해시 함수는 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다
- 해시 함수는 반대로 입력한다고 해서 원래 값이 나오지 않는다
- 해시 함수도 완벽하지 않아서 레인보우 테이블이 있는데, 이는 해시 함수가 변경한 값을 원래의 값과 연결한 표이다. 그래서 레인보우 테이블이 털리면 위험해진다
- 최종적으로 솔트는 아주 조그마한 무작위 텍스트인데, 비밀번호를 솔트와 합쳐서 해시 함수에 통과시키면 레인보우 테이블이 있어도 원래 비밀번호를 찾을 수 없다
에피소드 36: 객체 지향 프로그래밍이 뭐죠? -1-
- 프로그래밍 패러다임으로 절차 지항 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍이 있다
- 클래스는 객체를 계속 생성할 수 있는 공장과 같다
에피소드 37: 객체 지향 프로그래밍이 뭐죠? -2-
- 상속을 하면 부모 속성은 다 가지면서도 자신만의 속성을 추가할 수 있다
에피소드 38: 함수형 프로그래밍이 뭐죠?
- 함수형 프로그래밍을 배워야 하는 이유는 '버그가 발생하기 어려운 구조'라서 개발자에게 매우 유용하기 때문이다
- 함수형 프로그래밍에는 선언형 프로그래밍과 명령형 프로그래밍이 있다
- 선언형 프로그래밍은 원하는 결괏값을 선언한다(ex. CSS)
- 명령형 프로그래밍은 원하는 결괏값에 어떻게 도달하는지 선언한다
소감:
- 해시 함수는 많이 들어봤지만, 레인보우 테이블과 솔트는 처음 듣는 개념인데 관심이 생겨서 더 알아봐야 겠다
- 객체 지향 프로그래밍은 알고 있었지만 함수형 프로그래밍이 또 있는지는 처음 알았다.
2023.01.25
오늘 읽은 범위: 에피소드 39~ 에피소드 45
에피소드 39: 인공지능, 머신러닝, 딥러닝, 아직도 구분하기 힘들다고?
- 인공지능은 좁은 인공지능과 일반 인공지능으로 나눌 수 있다
- 사람처럼 행동하는 일반 인공지능은 현재 기술로는 만들 수 없다
- 한 가지만 잘하는 좁은 인공지능은 딥러닝이나 머신러닝으로 만든다
- 머신러닝, 딥러닝은 인공지능이 학습하는 방식 또는 인공지능을 학습시키는 방식을 말한다
- 머신러닝은 인공지능을 학습시키는 방법이다. 직접 가르칠 수 있는 지도 학습 방식이 있고, 알아서 배우게 할 수 있는 비지도 학습 방식이 있다
- 딥러닝은 머신러닝을 달성하기 위한 방법이다
- 요즘 머신러닝을 배울 수 있는 가장 쉬운 방법은 파이썬을 이용하는 것이다. 텐서플로(Tensor Flow) 는 인공지능을 개발하는 도구로 가장 유명한 프레임워크이다
에피소드 40: REST API라니, 휴식 API인가? 이게 대체 뭐죠?
- RSET API는 RSET 방식으로 설계한 API를 말하고 그 이상 그 이하도 아니다
에피소드 41: 도커가 뭐지? 왜 필요할까?
- 도커는 어떤 컴퓨터에서도 같은 개발 환경을 준비할 수 있도록 해주는 도구이다
- 도커는 원하는 개발 환경을 도커 파일에 저장하여 준비해 준다
- 도커가 마련한 개발 환경은 컨테이너 형태로 존재하므로 개발에 필요한 도구를 따로 모아 준비할 수도 있고, 쉽게 복제할 수도 있다
에피소드 42: 암호화폐의 진실
- 암호화폐는 사용한 사람을 은행 자체로 만든다. 따라서 스스로 재산을 안전하게 관리 해야 한다
- 암호화폐 세상에는 모든 정보가 공개된다
- 암호화폐로 사기를 당하지 않으려면 공부도, 조사도 모두 혼자 해서 스스로 관리해야 한다
에피소드 43: 하이브리드...앱? 뭐라고요?
- 애플리케이션을 만드는 방법에는 하이브리드 방식, 크로스 플랫폼 방식, 네이티브 방식이 있다
- 하이브리드 앱은 웹 사이트를 보여주는 웹 뷰를 말한다
- 하이브리드 앱의 장점으로는 네이티브 앱 개발 지식이 필요없다. 단점으로는 UI를 한 땀 한 땀 짜야 해서 귀찮다
- 크로스 플랫폼 앱은 특정한 언어로 코딩하면 나중에 iOS, 안드로이드가 이해할 수 있는 코드로 변환해서 만든다
- 크로스 플랫폼 앱의 장점은 개발자가 익숙한 코드로 한 번만 작성해도 된다. 단점으로는 네이티브 앱의 성능은 아직 따라 갈 수 없다
- 네이티브 앱은 말 그대로 iOS 또는 안드로이드만을 위한 언어로 코드를 작성하여 개발했다.
- iOS는 스위프트, 안드로이드는 자바나 코틀린을 사용해서 만든다.
- 네이티브 앱의 장점으로는 스마트폰의 성능을 최대로 사용할 수 있다. 단점으로는 다른 앱에 비해 배우는 데 시간이 2배 걸린다
에피소드 44: NFT가 도대체 뭐길래?
- NFT는 non fungible token의 줄임말로 대체 불가능한 토큰을 말한다
- 토큰은 이더리움(Ethereum)과 같은 블록체인으로 발행한다
- 토큰에는 2가지 핵심기능, 즉 '돈을 받는 기능'과 '돈을 받고 토큰을 보내 주는 기능'이 반드시 있어야 하는데, 이를 합쳐서 스마트 계약(smart contract)이라고 한다
에피소드 45: 멀웨어, 바이러스, 웜 개념 몽땅 정리
- 멀웨어(malware)는 malicious(악의 있는)와 software(소프트웨어)의 합성어이다. 컴퓨터를 감시하거나 파괴하는 악성 소프트웨어이다
- 멀웨어 중에서도 바이러스(virus)와 웜(worm)이 가장 많이 알려졌다
- 바이러스는 숙주가 필요하고 웜은 숙주가 필요 없다
- 웜은 미사일(missile)과 페이로드(payload)가 필요하다. 웜은 미사일을 통해 컴퓨터 안에 침투하고, 그 순간 페이로드를 배포하는 방식으로 컴퓨터를 파괴시킨다
소감:
- 처음으로 챌린지를 끝까지 완료 했는데 뿌듯하다. 다음 챌린지도 완료하고 싶다.

댓글