October 18, 2022
내 고민에 대한 고마운 분의 조언 # 이전에 작성한 코드가 읽기 힘들어서 고민이다. # 코드(를 포함한 모든 형식의 글)은 후에 읽어야 할 사람을 생각하며 써야 한다. 경력이 쌓일수록 이런 능력이 생겨야 하고, 생길 것이다. “프로그래머의 뇌"라는 책을 읽어보길 권하셨다. 코드를 잘 작성하는 능력보다 코드를 잘 읽는 능력이 상대적으로 과소평가 되어있다. 코드를 잘 읽는 연습을 해보자. 앞으로 어떤 기술 스택을 주로 공부해야 할지 잘 모르겠다. # 앞으로 웹베이스(브라우저와 Js런타임)의 에코 시스템이 더욱 커질 것이라고 생각한다.
...
October 18, 2022
원문
요약 # 서버는 마이크로 서비스로 python, c, c++, java, go로 작성되어 있다. DB는 Vitess 로 돌리는 MySql 사용. Memcache 는 Caching에 사용. Zookeeper 는 node co-ordination. node co-ordination이 뭐지?
데이터 흐름 # Figure 1: 유튜브 아키텍쳐
자주 요청되는 비디오는 CDN server에 두고 별로 인기 없는 비디오는 DB에서 직접 가져온다.
시작점 # 유튜브는 2005년 시작했고 2006년 11월 구글에 인수되었다. 구글에 인수되기 전에는 2명의 시스템 관리자, 2명의 소프트웨어 설계자, 2명의 기능 개발자, 2명의 네트워크 엔지니어, 1명의 DBA 로 구성되어 있었다.
...
October 18, 2022
멋있는 사람들이 다 모인 곳. # 1년이나 지났지만 그 장소, 그 사람들의 진지하고 열정적인 바이브가 그립다. 다들 스타트업을 하려고 모인 사람들이다 보니 모두 행동력이 좋았다. 나는 굉장히 사교적이지 못한 성격인데 운이 좋게도 좋은 사람들이 다가와줘서 많이 배울 수 있었다. 뭔가 나 자신이 상대적으로 너무 부족한 느낌이 들어 나를 더 크게 포장하곤 했었는데 지금 돌이켜보니 너무 부끄럽다. 겸손하고도 당당할 수 있어야 한다.
배운 점. # 멘탈과 관련해서 # 내가 느낀 것은 아이디어 자체는 정작 크게 중요하지 않다는 것이었다.
...
October 18, 2022
C가 왜 중요한지 느낄 수 있었다. # 자바스크립트로 처음 코드를 배웠기 때문에 동적이고, 유연한 프로토타입 기반의 언어를 기준으로 프로그램을 생각하고 있었다. 그냥 코드를 작성하면 언어가, 컴파일러가 알아서 다 해주니까, 따로 신경써본 적이 없었고, 그러다보니 그 블랙박스 내의 동작은 내가 상상해볼 수 없는 영역이었다.
“잘 작성되었고, 빠르고 인기가 많은” 라이브러리들을 찾아 거기서 제공해주는 API를 매뉴얼대로 작성하는 것이 전부였다. 뭔가 부족하다고 생각이 들었고 이대로 괜찮을지에 대한 불안감은 늘 있었지만 정작 나 스스로 블랙박스를 열어볼 용기와 인내는 없었던 것 같다.
...
October 18, 2022
패키지 매니저로 pandoc, wkhtmltopdf 를 설치한다.
yay pandoc yay wkhtmltopdf css 파일을 같은 디렉터리에 위치시킨다.
wget https://gist.githubusercontent.com/dashed/6714393/raw/ae966d9d0806eb1e24462d88082a0264438adc50/github-pandoc.css css를 적용한 html문서를 만들고, pdf로 출력한다.
pandoc -t html5 --metadata pagetitle="resume.md" --css=github-pandoc.css resume.md -o res.pdf 상세한 설명은 스택 오버플로우에…
October 18, 2022
스택은 자료를 쌓아올리는 방식으로 저장한다. 책을 쌓아둔 것과 같다. 5권의 책을 쌓아뒀을 때, 첫 번째 책을 꺼내보려면 그 책 위의 네 권을 먼저 들어올려야 한다. 이러한 특징을 FILO(First In Last Out), LIFO(Last In First Out). 처음 들어온 게 마지막에 나간다고 줄여 말한다.
스택은 추상적 자료 구조이고, 이를 구체적으로 어떻게 구현할지는 구현자 마음대로이다.
October 17, 2022
추상 자료형이 말 그대로 자료의 형식만을 정의하는 가장 높은 단계의 추상화라면,
추상적 자료구조는 해당 자료형을 구체적으로 구현하기 위한 조건들도 함께 정의한다.
“스택(stack)이라는 자료형(data type)의 입출력을 위한 방법에는 push와 pop이 있고, 이 연산들은 O(1)만에 이뤄져야 한다."
고 정의된 것이 있다면 이것을 추상적 자료구조라고 말하며, 이를 구현한 것을 구체적 자료구조라고 말한다.
이렇게 위키피디아 한글 문서에서는 설명하고 있으나 영문판에서는 ‘추상 자료구조’와 ‘추상 자료형’의 정의 간에 특별한 구분을 두고 있지는 않는 것 같다. 추상 자료형과 자료구조의 차이 정도만 인식하고 있으면 될 것 같다.
...
October 17, 2022
추상 자료형이란 # 추상 자료형은(Abstract Data Type, ADT)는 자료의 형태와 그와 관계된 연산을 수학적으로만 정의한 것이다. 해당 자료형이 내부적으로 어떤 방식으로 구현되는지는 관심이 없다. ‘형’과 ‘Type’, ‘자료’와 ‘Data’가 동일한 뜻인 것을 가끔 인지하지 못할 때가 있다.
정수는 추상 자료형(ADT)이다. …, -2, -1, 0, 1, 2, …의 값으로 정의되며, 연산은 더하기, 빼기, 곱하기, 나누기가 가능하고, 대소 비교 등도 가능하다.
추상적 자료형은 구현 방법을 명시하고 있지 않다는 점에서 자료 구조와 다르다. 비슷한 개념의 추상적 자료 구조는 각 연산의 시간 복잡도를 명기하고 있지만 추상적 자료형에서는 이것조차 명기하지 않는다.
...
October 17, 2022
배열은 연속적인 자료의 나열이다. 배열 내에는 동일한 형(type)의 자료가 나열되어야 한다. 보통의 프로그래밍 언어에서 인덱스는 0부터 시작한다. 루아는 특이하게 1부터 시작한다.
C에서는 선언 시에 배열로 사용될 메모리 주소의 범위를 정적으로 할당한다. 반면 Javascript에서의 배열은 동적으로 할당되며, 메모리 주소의 연속일 뿐인 C와 다르게 다양한 메서드를 포함하고 있는 객체로 구현되어 있다. 내부 작동은 브라우저의 엔진마다 다를 수 있다고 한다.
const arr = [1, 2, 3]; arr[1]; > 2 arr["1"]; > 2 인덱스는 특이하게 “1"로도 1로도 접근 가능한데 내부적으로 toString() 메소드를 호출하기 때문이라고 한다.
...
October 17, 2022
자료구조란 추상 자료형을 구현한 것. 자료(데이터)의 모임, 자료간의 관계, 자료의 입출력 방식.
왜 자료구조를 알아야 할까 # 주어진 문제를 해결할 때 자료구조를 선택하고 나면 어떤 알고리즘을 사용할지 명확해진다. 구현의 난이도, 결과물의 성능이 자료구조에 크게 의존한다.
자료구조의 5가지 필수 구성 요소 # 참조 링크
어떻게 접근 할 것인가. 어떻게 입력 할 것인가. 어떻게 삭제 할 것인가. 어떻게 탐색 할 것인가. 어떻게 정렬 할 것인가. 자료구조 선택 방법 # 자료구조의 분류 # 자료구조는 추상적인 구조인지, 자료간의 관계가 선형(1:1)적인지 비선형적인지 등으로 분류 되어진다.
...