Root

서문 저번 게시글에서는, 디스코드가 대량의 데이터를 저장하기 위해서 이전에 사용했던 방식을 살펴보았다. [Snack] 디스코드가 1조개의 메시지를 저장하는법 서문 작년 (2022), 디스코드는 기존의 사용하고 있는 데이터베이스인 Cassandra에서, 새로운 데이터베이스인 ScyllaDB로 모든 데이터를 옮겼다. (migrate) 이는, 디스코드가 서비스에서 중요하게 생각하 defineall.tistory.com 또, 그 방식에 따른 문제점과, 사용자와 개발자에게 미친영향을 알아보았다. 결국 그 문제점들 때문에 디스코드는 DB를 교체하기로 결정했다 ( 처음에 기술의 정확한 장단점을 최대한 인지하는것이 중요한 이유 ) 과정 1. 데이터 중복 저장하기 하지만, 대용량의 데이터를 저장하는 것과, 저장된 데이터..
서문 작년 (2022), 디스코드는 기존의 사용하고 있는 데이터베이스인 Cassandra에서, 새로운 데이터베이스인 ScyllaDB로 모든 데이터를 옮겼다. (migrate) 이는, 디스코드가 서비스에서 중요하게 생각하는 3가지 요소 때문이다. 커지고 작아지는게 자유로운지 (확장성 - Scalable) 오류가 있어도, 다시 복구 가능한지 (Fault-tolerant) 유지보수가 적은지 (maintanance) 디스코드는 2017년에도, MongoDB에서 Cassandra로 옮긴 전적이 있지만, 유지보수 측면에서 많은 어려움을 겪었다고 한다. 이 때문에 디스코드는, 더 편하고 (유지보수 극혐), 심지어 더 빠르기까지한 ScyllaDB를 선택했다. 여기서 말하는 "모든" 데이터는 상상할 수 없을 정도로 크다..
(1972) The Humble Programmer - Edsger W.Dijkstra 프로그램 테스트는, 우리가 작성한 코드에 버그가 있다는 것을 알려주는데 탁월하지만, 우리가 작성한 코드에 버가 없다는 것을 알려주는덴 절망적으로 부적절하다. Stream chat in Twitch - someone. 우리 회사에 내가 담당하던 개발자가 있었는데, Elixir 코드에 대한 José Valim의 PR(Pull Request)를 "자신의 스타일이 더 좋다"고 거부했다. (José Valim - Elixir 언어 창시자) 그는 오래 가지 못했다.
👉 namespace 란? 변수나, 함수의 이름을 저장해 모아놓은 공간 👉 필요성 (목적) 변수나, 함수의 이름이 같아서, 이를 구분하고 싶을때, 같은 이름이나, 다른 곳에 존재한다는 사실을 알려주어야 한다. 같은 이름이여도, 다른 namespace에 존재하므로, 컴퓨터가 이를 구분해 올바른 작업을 한다.
선행 지식 [Rust] 소유권 - 메모리 관리 이야기 (feat. Garbage Collector) 서문 Rust에는 소유권이라는 개념이 있는데, 이는 Rust에만 존재하는 고유한 특성이다. 이 글에서는 소유권이란 것이 무엇인지 뿐만아니라, 어떤 상황에서 사용하는지, 왜 등장하게 되었는지 등 defineall.tistory.com Borrowing 이란? 의미 : 소유권을 가지고 있는 변수의 데이터를 빌리는 것 실제 : 소유권을 가지고 있는 변수의 메모리주소를 저장하는 것 배경 Rust의 변수는, 스코프를 벗어난 이후에도 메모리 공간을 OS에게 돌려주지(drop) 않도록 하기 위해 자동으로 drop 되지 않도록, 매번 수동으로 소유권을 옮겨(move)주어야 한다. 이 때문에, 굳이 drop 할 필요가 없..
Svelte 그거 좋긴한데, 코드 생태계가 React보다 작아서 스벨트쓰긴 좀 이른 듯? 레딧, 트위터, 유튜브 댓글에 보면 이렇게 써진 글들을 볼 수 있다. 만약 여러 선택지를 주면, 사람들은 짜증 내고 혼란스러워 하고, 하는 소리라곤 "작은 생태계" 밖에 없다. 이게 진짠가? 대부분이 틀렸다. Svelte 생태계는 React 와 비교해도, 절대 작지 않다. Svelte는 UI component 라이브러리 개수가 적다는 말은 사실이지만, SkeletonUI, Flowbite Svelte, Svelte UI, DaisyUI등 충분한 라이브러리를 가지고 있다. 만약 더 많은 UI component 라이브러리를 원한다면, 바로 자신만의 라이브러리를 만들고 배포하면 된다. 그리고, 다른 사람들이 자신만의 라이..
서문 Rust에는 소유권이라는 개념이 있는데, 이는 Rust에만 존재하는 고유한 특성이다. 이 글에서는 소유권이란 것이 무엇인지 뿐만아니라, 어떤 상황에서 사용하는지, 왜 등장하게 되었는지 등 자세한 내용을 알아보겠다. 소유권이란? 메모리 공간을 OS에게 반납(drop)할 수 있는 권한 등장 배경 프로그램을 사용하다보면, 특정 메모리공간을 공유하는 일이 많다 => 왜? 엄청난 크기의 데이터를 복사하는 경우를 생각해보면, 데이터 자체를 통째로 복사하기 보다, ( deep copy 깊은 복사 ) 그 데이터가 저장된 주소를 대신 복사하는 방식이, ( shallow copy 얕은 복사 ) 메모리 공간을 절약하는데 도움이 된다. 또한, 메모리를 다 사용하고 나면 OS가 사용할 수 있도록 돌려주어야지 다른 프로그램..
attempt : 시도하다 arguments : 인수 (매개변수에 전달되는 값) abbreviate : 축약하다 address : 해결하다 (동사로 쓰는 경우) adjust : 조절하다 acquire : 얻다 absent : 존재하지 않는, 없는 annotation : 주석 aspect : 인공물, 기능 bind : 메모리 주소와 연결한다 boilerplate : 자주 사용하는 문장구 (상용구) concise : 간결한 concrete : 구체적인 corresponding : 일대일로 대응하는, 적합한, 맞는 conventional : 일반적인 ( ex : 코딩 컨벤션 ) comprehensive : 넓은의미의, 포괄적인 comprise : 구성하다 consider : 간주하다 contiguous : 가..
상수란? ( 프로그래밍에서 ) 컴파일 타임에 값이 정해지는 변수 상수의 특징, 활용 과정 1. 컴파일 시작 2. 상수 값을 계산하고, 이진수 (bytecode)로 바꿈 3. 값을 파일에 저장 4. 이후 절대 안변함 5. 실행 환경에서, 값을 가져다 씀 (read only) 상수를 사용하는 이유 개발자가 저장된 데이터를 쉽게 이해할 수 있도록 해준다. 유지보수를 편하게 해준다. ( ex => 1시간을 초단위로 표현 => 60 * 60 * 60 => 216,000 ) 실제로 216000이라는 숫자를 사용하고 싶지만, 코드에서는 60 * 60 * 60 이라고 작성하는 것이 이해하기 쉽고, 그렇다고 해서, 실제 프로그램이 실행될 때(runtime), 이 계산을 해버리면 불필요한 연산이 되어버리므로 컴파일 타임에..
MOONCO
'분류 전체보기' 카테고리의 글 목록 (2 Page)