- GCP VM Instance 저스펙으로 Airflow 서버 구축하고 안정적으로 크롤링하기31514첫 번째 문제 - Small Instance에 Airflow 서버 구축개인 프로젝트를 하면서 5분 단위로 크롤링하여 데이터를 수집하고 싶었다.이를 위해 Lambda + EventBridge와 EC2 + Airflow를 고민하다가 비용적인 측면에서 후자가 유리할 거 같았다.이 링크를 참고하여 최대한 스펙이 낮은 EC2에 Airflow 서버를 구축했다. 처음에는 1GB RAM을 가진 인스턴스에서 Airflow 서버 구축을 시도했지만 메모리 부족 한계에 부딪혔다.이에 따라 아래와 같이 스왑 메모리도 설정해봤지만 역부족이었다.sudo fallocate -l 3G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfileecho '/sw..
- 2024-11-14 17:13:42
- 4장 - 데이터 엔지니어링 수명 주기 전체에 걸친 기술 선택31514데이터 엔지니어는 데이터 애플리케이션과 사용자에게 서비스를 제공하기 위해 수명 주기 전체에 걸쳐 데이터를 관리하는 적절한 기술을 선택해야 한다.많은 사람이 아키텍처와 도구를 혼동하는데, 아키텍처는 무엇을, 왜, 언제 구축해야 하는지 결정하고, 도구는 어떻게 구축할지를 결정한다.따라서 아키텍처를 올바르게 구축하기 전까지는 기술을 먼저 선택하는 일이 없도록 유의해야 한다. 이제 데이터 기술을 선택할 때 고려할 사항에 대해 알아보자. 팀의 규모와 능력cargo-cult engineering는 소규모 데이터 팀이 대기업의 기술과 사례를 모방하려다 실패하는 실수를 말한다.소규모 팀이나 기술력이 약한 팀이라면, 가능한 많은 관리형 도구와 SaaS 도구를 사용해서 비즈니스에 직접적으로 가치를 부여하는 것이 좋다.새로..
- 2024-11-13 11:39:43
- [BW 37] 내장 타입을 여러 단계로 내포시키기보다는 클래스를 합성하라31514클래스와 상속을 사용하는 방법을 잘 알아두면 유지 보수하기 쉬운 코드를 작성할 수 있다. 파이썬 내장 딕셔너리 타입을 사용하면 객체의 생명 주기 동안 동적인 내부 상태를 잘 유지할 수 있다.동적이라는 말은 어떤 값이 들어올지 미리 알 수 없는 식별자들을 유지해야 한다는 뜻이다.예를 들어 학생들의 점수를 기록해야 하는데, 이름은 미리 알 수 없는 상황이라고 하자.class SimpleGradeBook: def __init__(self): self._grades = {} def add_student(self, name): self._grades[name] = [] def report_grade(self, name, score): self._..
- 2024-11-11 11:20:24
- 3장 - 우수한 데이터 아키텍처 설계31514데이터 아키텍처가역적 의사결정은 세상의 변화와 새로운 정보 수집에 따라서 프로세스를 조정할 수 있게 해준다.조직이 성장함에 따라 자연스럽게 기업의 경직화가 발생하는 경향이 있는데, 이때 되돌릴 수 있는 결정 문화를 채택하면 각종 의사결정에 수반되는 위험을 줄임으로써 이러한 경직화를 극복하는 데 도움이 된다. 데이터 엔지니어가 최적의 시스템을 설계하려면 모든 단계에서 트레이드오프를 고려해야 하며, 동시에 값비싼 기술 부채를 최소화해야 한다. 데이터 아키텍처는 기업의 진화하는 요구 사항을 지원하는 시스템 설계로, 트레이드오프에 대한 신중한 평가를 통해 유연하고 되돌릴 수 있는 결정을 내림으로써 실현된다. 우수한 데이터 아키텍처의 원칙공통 컴포넌트를 현명하게 선택하라데이터 엔지니어의 주요 업무 중 하나는 조직..
- 2024-11-08 15:15:02
- [BW 33] yield from을 사용해 여러 제너레이터를 합성하라31514다음은 제너레이터를 사용해 화면의 이미지를 움직이게 하는 그래픽 프로그램 예제이다.처음에는 이미지가 빠르게 이동하고, 잠시 멈춘 다음, 다시 이미지가 느리게 이동한다.def move(period, speed): for _ in range(period): yield speeddef pause(delay): for _ in range(delay): yield 0def animate(): for delta in move(4, 5.0): yield delta for delta in pause(3): yield delta for delta in move(2, 3.0): yield deltadef render(delta): ..
- 2024-11-08 10:52:39
- 홈 서버 구축기인데 LG U+를 곁들인..31514새로운 팀 프로젝트를 진행하면서, 실제 배포 및 운영까지 계획하게 되었다.이에 따라 팀원들이 공통으로 사용할 서버가 필요했는데, 마침 집에 남는 컴퓨터 한 대가 있어서 홈서버를 구축하기로 결정했다. 컴퓨터는 아래와 같이 생겼고, 10년 가까이 방치되다 보니 먼지도 많았다... 컴퓨터 스펙은 다음과 같다. 메모리가 2GB, SSD가 아닌 HDD로 인해 충격을 조금 받았지만 개발 단계에서 공통으로 사용할 DB 서버로는 문제 없을 거 같았다. OS는 우분투 20.04LTS를 선택했고, 서버를 구축하는 방법은 구글링하면 금방 나온다.이를 위해 USB와 랜선이 필요해서 직접 구매했다. 일단 내 노트북과 SSH 통신을 하기 위해 다음과 같은 명령어로 SSH 설정을 해줬다.sudo apt-get update && s..
- 2024-11-01 17:48:16
- [BW 32] 긴 리스트 컴프리헨션보다는 제네레이터 식을 사용하라31514리스트 컴프리헨션의 입력이 커지면 메모리를 상당히 많이 사용하고, 그로 인해 프로그램이 중단될 수 있다. 이 문제를 해결하기 위해 파이썬은 제네레이터 식을 제공한다.제네레이터 식을 실행해도 출력 시퀀스 전체가 실체화되지 않고, 이터레이터가 생성된다.it = (len(x) for x in open('my_file.txt')) 두 제네레이터 식을 합성할 수도 있다.roots = ((x, x ** 0.5) for x in it) 다만 제네레이터가 반환하는 이터레이터에는 상태가 있기 때문에 한 번만 사용해야 한다.
- 2024-11-01 16:10:28
- 2장 - 데이터 엔지니어링 수명 주기31514개요1장에서 봤던 데이터 엔지니어링 수명 주기 그림을 다시 보자.데이터 엔지니어링 수명 주기는 원천 시스템에서 데이터를 가져와 저장하는 것에서 시작한다.다음으로 데이터를 변환한 뒤 분석가, 데이터 과학자, ML 엔지니어 등에게 데이터를 제공한다.데이터 저장은 데이터가 처음부터 끝까지 흐르면서 수명 주기 전체에 걸쳐 발생한다.다시 한 번 말하지만, 기반이 되는 것은 드러나지 않는 요소다. 데이터 생성데이터 엔지니어는 원천 시스템의 작동 방식, 데이터 생성 방식, 데이터의 빈도 및 속도, 생성되는 데이터의 다양성을 이해해야 한다.또한 데이터 파이프라인과 분석을 중단할 수 있는 변경 사항에 대해 원천 시스템 소유자와 소통 라인을 유지해야 한다. 원천 시스템의 까다로운 점 중 하나는 스키마의 진화다.원천 시스템..
- 2024-11-01 15:55:51
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)