비디오와 이미지를 압축하고 송출하는 원리
·
카테고리 없음
이미지와 비디오 인코딩의 원리이미지를 저장하는 가장 단순한 방법은 모든 픽셀의 색상을 순서대로 저장하는 것이다. 이 픽셀 배열을 RAW 이미지 또는 비트맵(bitmap)이라고 부른다. 디스플레이 장치들은 이 데이터로부터 각 픽셀에 어떤 색을 출력할지를 결정한다.그러나 이 방식은 비효율적이다. 예를 들어, 사람이 달리는 이미지를 살펴보자. 하늘을 표현하는 동일한 파란색이 픽셀 배열에 연이어 등장하는 일이 매우 잦다. 어떤 파란색이 200번 연속해서 픽셀에 등장한다면, 파란색을 배열에 200번 저장하는 것보다는, 파란색을 한 번만 저장하고 200번 반복된다는 정보를 저장하는 편이 경제적이다. 우리가 현실 속에서 다루는 이미지들은 픽셀들의 중복도(redundancy)가 충분히 높기 때문에, 이런 정보 저장 방..
엔드 간 네트워크 통신 한도(rate limit) 조절에 관련된 영어 표현 모음
·
개발이야기/토막글
클라이언트(프론트엔드) 관련 표현Debounce: 어떤 이벤트가 끝나자마자 다음 함수를 호출하지 않고 기다리다가, 같은 이벤트가 다시 반복되면 묶어서 처리하는 기법Throttle: 같은 함수를 다시 실행할 수 있는 최소 주기를 설정하는 것 = 짧은 주기 내에 같은 함수가 지나치게 많이 호출되는 것을 막는 기법Abort: 진행중인 요청을 취소한다는 의미. 서버와의 connection을 끊을 수도 있음. 웹에서는 보통 AbortController를 통해서 구현됨. 요청이 abort되면, 서버는 disconnection을 감지하여 처리를 멈추거나 클라이언트로 응답을 보내지 않는다.Cancel: 기술적인 용어라기보단, UX나 user-facing 관점의 의미. 서버/네트워크 관련 표현Drop: 네트워크 패킷을 ..
TCP의 혼잡제어(congestion control)
·
개발이야기
TCP 연결이 맺어진 두 호스트 사이에는 많은 라우터(router)들이 존재한다. 라우터의 저장공간(버퍼, buffer)은 한정되어 있다. 라우터가 다음 라우터로 패킷을 내보내는 속도보다, 라우터에 패킷이 들어오는 속도가 더 빠르면 버퍼는 점점 차오른다. 버퍼가 가득차있는데 들어온 새로운 버퍼는 모두 드랍(drop)된다. 이런 혼잡한 상황(congestion)에서도 TCP는 데이터를 유실없이 전송하면서도, 통신 채널을 최대한 효율적으로 활용해야 하는 목표가 있다.TCP는 전송 계층(transport layer)의 프로토콜인 한편, 라우터의 기능은 그 하위인 네트워크 계층(network layer)에 그친다. TCP가 혼잡 상황을 알 수 있는 방법은 두 가지가 있다. 네트워크 계층에서 직접 혼잡 상황을 알..
네이버지도에서 매장 정보 수집을 실패하기까지의 고군분투 이야기
·
개발이야기
개인 프로젝트 목적으로 네이버 지도에서 특정 매장의 정보를 수집하고 싶었다.2일정도 이 작업에 매진했는데, 결과적으로는 난관에 봉착했고 현재는 실패 상태로 멈췄다.그 이전까지의 고군분투 과정과 해결하지 못한 포인트를 소개한다.문제 1. 크롤링? 해도 될까?첫번째 문제는 크롤링을 해도 되는지 윤리적/법적/정책적 측면의 고민이 들었다.사이트의 크롤링 허용 여부는 robots.txt를 확인하면 된다. 네이버 지도 사이트의 robots.txt 내용은 아래와 같았다.User-agent: *Disallow: /Allow: /$Allow: /p/$위 내용은 누가 크롤링을 하던지, 정확히 지도의 루트 주소(map.naver.com/와 map.naver.com/p/)를 제외하고는 크롤링을 일체 금지한다는 내용이다. 주소..
파이썬 프로젝트 우아하게 시작하기: pyenv, poetry
·
개발이야기/토막글
여러분의 맥북에는 이미 파이썬(Python)이 깔려있다. 맥 OS의 여러 유틸리티들이 파이썬을 필요로 하기 때문이다.그럼 파이썬 프로젝트를 시작할 때, 파이썬을 별도로 설치하지 않아도 되는 것일까?그렇지 않다. 프로젝트마다 요구하는 파이썬의 버전이 다르기 때문이다.이 글은 파이썬 프로젝트를 우아하게 시작하려면, 반드시 이용해야 할 버전 관리 도구(version manager)와 의존성 관리 도구(dependency manager)의 필요성과 간단한 사용 방법을 소개한다.파이썬의 버전관리버전관리의 필요성프로젝트마다 파이썬 버전을 맞춰야하는 이유가 무엇일까? 무조건 최신의 파이썬을 쓰면 안되는 것일까?- 파이썬 버전을 올리면 지원하는 기본 라이브러리가 사라지거나, 코드의 기능이 달라질 수 있다. 내 컴퓨터에..
구직까지 6개월, 무엇을 해야 할까?
·
일상이야기
6개월 뒤 저는 IT 회사에 백엔드 엔지니어로 지원할겁니다.짧다면 짧고, 길다면 긴 이 6개월, 무엇을 해야 저는 원하는 회사에 합격함은 물론, 제가 만족할만한 성장을 이룰 수 있을까요?무엇을 할지 고민하기 전, 목표를 분명히 하기로 했습니다.설령 "오픈소스를 읽을거야!" 라고 하면 오픈소스를 읽어서 무슨 목표를 달성하려고 하는지 이해하고 싶은 것입니다.그래서 GPT와 함께 고민해 본 결과, 소프트웨어 엔지니어에게 필요한 역량을 3+1가지로 정리해봤습니다. SW 엔지니어에게 필요한 역량첫째, 기술적 역량.Background 지식을 통해 요구사항을 실제로 설계/구현하는 능력입니다.CS 기초(fundamental) 지식, 언어/프레임워크 숙련도, 요구사항 구현 능력, 디버깅/프로파일링(profiling) 능..
[오토마타] 5. 정규 언어의 성질(미완성)
·
개인 공부
이 글은 정규언어의 다양한 성질들에 대해 배운다. 첫째로, 다룰 것은 정규 언어라면 항상 성립하는 pumping lemma이다. 이 것을 통해, 우리는 어떤 언어가 정규언어인지 아닌지 쉽게 증명할 수 있다. 둘째는, 정규 언어의 닫힘성(closure)이다. 앞서, union, concatenation, Kleene star의 닫힘성을 보였듯이, 더 많은 연산자에 대한 닫힘성을 살펴본다. 셋째로, 두 오토마타의 동등성을 비교하는 방법에 대해 알아본다.Pumping Lemma어떤 정규언어 A에 대해, 항상 상수 p(pumping length라고 부름)가 존재하여:- 길이가 p 이상인 A의 모든 문자열 w는- w를 $w=xyz$ 세 부분으로 나눌 수 있고,- 다음 조건을 만족한다.1. $|y| \ge 1 $2..
[오토마타] 19. 모든 언어는 튜링-인식 가능한가?: 대각선 논법(작성중)
·
카테고리 없음
모든 언어는 튜링-인식(Turing-recognizalbe)한가? 답은 "아니다". 전체적인 증명 과정을 먼저 소개하고, 하나하나 관련 개념을 설명해보도록 하겠다.$\{0,1\}$의 알파벳에서1. $\{0,1\}^*$, 혹은 가능한 모든 튜링머신들의 집합은 $\mathbb{N}$과 같은 크기를 같는다.2. $\{0,1\}$으로 만들 수 있는 모든 문자열의 집합, 혹은 가능한 모든 언어들의 집합은 $2^\mathbb{N}$과 같은 크기를 같는다.3. $2^\mathbb{N}$은 불가산집합(uncountable set)이지만, $\mathbb{N}$은 가산집합(countable set)이다.4. 따라서, 가능한 모든 언어가 가능한 모든 튜링머신보다 그 종류가 많다.5. 따라서, 튜링-인식기(Turing-re..