본문 바로가기

비전공의 CS 지식

(9)
NFT? 그게 뭐죠? 먹는 건가요? 대체 불가능 토큰(NFT, Non-Fungible Token)은 디지털 자산의 고유성과 소유권을 입증해 주는 수단입니다. 디지털 아트, 게임 아이템, 공연 티켓 등 디지털 자산뿐만 아니라 심지어 현실에 존재하는 물리적 자산에 대한 소유권이 모두 여기에 포함됩니다. 대체 불가능 토큰이란? 대체 불가능 자산은 우리 주변에 있는 평범한 것입니다. 대체 가능한 자산이 오히려 특별한 것입니다. 대체 불가능 토큰을 소개하는 글은 대부분 대체 가능성(fungibility)이 무엇인지 정의하는 것으로 시작합니다. 대체 가능성은 "다른 동일한 것으로 대체하거나 대체할 수 있는 속성"이라며 말입니다. 하지만 이런 아리송한 정의가 NFT를 이해하기 어렵게 만든다고 생각합니다. 대체 불가한 자산이 무엇인지 이해하려면 여러분이..
수직적 규모 확장 vs 수평적 규모 확장 소위 '스케일 업(Scale Up)'이라고도 하는 수직적 규모 확장(vertical scaling) 프로세스는 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가하는 행위를 말합니다. 반면 '스케일 아웃(Scale Out)'이라고도 하는 수평적 규모 확장 프로세스는 더 많은 서버를 추가하여 성능을 개선하는 행위를 말합니다. 서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이며, 이 방법의 가장 큰 장점은 단순함입니다. 그러나 불행하게도 이 방법에는 몇 가지 심각한 단점이 있습니다. 수직적 규모 확장에는 한계가 있습니다. 한 대의 서버에 CPU나 메모리를 무한대로 증설할 방법은 없습니다. 수직적 규모 확장법은 장애에 대한 자동복구(failover) 방안이나 다중화(re-dun..
인수(arguments)와 인자(parameter) parameter argument 매개변수 전달 인자 변수 값 인자 인수 커뮤니티를 보면 위와 같은 용어들을 혼용해서 사용하는 경우를 종종 볼 수 있습니다. 심지어 블로그 글에서도 잘못 쓰인 경우도 본 적이 있습니다. 인수와 인자는 정확히 무엇일까요? 인수(arguments) 함수를 호출할 때 값을 전달한다고 해서 전달 인자라고도 부릅니다. 매개변수와 달리 전달 인자는 고정되어 있지 않고, 호출할 때마다 수시로 변하는 값(value)이기 때문에 변수가 아닌 값으로 정의합니다. // 함수에서 1,2에 해당합니다 add(1,2); 인자(parameter) 함수를 선언할 때 사용되는 변수(variable)입니다. function add(a,b) { return a+b; } // 매개변수 a, b 함수 내부에 ..
브라우저 주소창에 google.com을 입력한다면? 브라우저 주소창에 google.com을 입력한다면? 브라우저 주소창에 google.com을 입력하면 어떤 일이 일어날까? 1. 브라우저는 캐싱된 DNS 기록들을 통해 google.com과 대응되는 IP 주소가 있는지 확인합니다. DNS(Domain Name System) 는 URL들의 이름과 IP 주 j-ho.dev
소프트웨어 아키텍트 소프트웨어 아키텍트란? 소프트웨어 아키텍트는 프로그래밍 외에도 여러 책임을 집니다. 아키텍트는 엔지니어링 관점에서 문제를 정의합니다. 소프트웨어 시스템을 구현 가능한 작은 조각으로 나누는 동시에 전체 시스템이 일관성 있게 동작하도록 큰 그림을 그립니다. 아키텍트는 품질에 영향을 주는 다양한 품질 속성사이에서 균형을 잡아야 하며 어쩔 수 없이 늘어나는 기술 부채도 관리합니다. 무엇보다도 아키텍트는 팀원들의 설계 역량을 개발합니다. 소프트웨어 아키텍트가 하는 일 소프트웨어 아키텍트는 프로그램 매니저가 아닙니다. 아키텍트는 소프트웨어가 언제 어떻게 전달되는지 결정하는 사람입니다. 또한 소프트웨어가 비지니스 목표에 부합하도록 만드는 사람입니다. 코딩은 하지만 알고리즘이나 코드를 짜기보다는 더 크고 많은 것을 설..
모듈과 컴포넌트 모듈과 컴포넌트의 차이 소프트웨어 개발에서 모듈과 컴포넌트가 유사한 의미로 혼용되곤 합니다. 기술적으로 말하자면 모듈과 컴포넌트는 다릅니다. 모듈(module) 설계 시점에 의미 있는 요소 설계할 때 만들기 시작해서 주로 코딩할 때 다루게 됩니다. 모듈은 파일 시스템 상의 어떤 형태로 표현할 수 있으며 소프트웨어가 동작하지 않아도 상관없습니다. 컴포넌트(component) 런타임 시점에 의미 있는 요소 소프트웨어가 실제 동작할 때부터 의미 있습니다. 소프트웨어가 실행하기 시작하면 컴포넌트 간에 커넥션을 만들고 프로세스를 생성하거나 오브젝트를 초기화합니다. 모듈 타입과 다른 점이라면, 시스템이 동작하지 않으면 사라진다는 점입니다. 프로그램이 실제 실행하면서 만드는 로그파일이나 데이터베이스 기록만으로 파악할..
구글 검색 너란 녀석... 구글 검색 너란 녀석... 다들 한 번쯤은 구글을 써보았을 것입니다. 그런데 궁금하지 않으신가요? 구글은 어떻게 30조 개가 넘는 웹 페이지들 속에서 사용자가 입력한 검색어에 맞는 결과물을 10개로 추려서 보여줄까요? j-ho.dev
CI/CD란? CI/CD란? CI/CD 란 용어를 알고 계신가요? 요즘 같이 빠르게 진화하고 변화하는 시대에는 어떻게 하면 시장과 고객의 요구에 빠르게 반응해서 제품을 출시, 업데이트할 것인가가 큰 과제입니다. 이 같은 고 j-ho.dev