회사에 입사하고 나서 처음으로 프로덕션 환경에서 데이터 파이프 라인을 구축하고 배포한 경험을 정리해보고자 한다. 사실 프로젝트 끝난지는 한달정도가 되어가는데.. 내일 새로운 빅데이터 플랫폼 구축 프로젝트가 시작되기 전에 나의 첫 프로젝트를 먼저 회고해보기로 했다. 나는 6개월짜리 Databricks 기반의 빅데이터 플랫폼을 구축하는 프로젝트에서 데이터 엔지니어링을 담당했다.실제로는 4개월 정도 참여했으나, 프로젝트가 특이하게도 1차 배포 - 2차 배포 + 운영 의 프로세스로 진행되어 운좋게도 인프라 구축부터 파이프라인 개발, 운영 모니터링 과정의 ETL 파이프라인 개발의 한 cycle을 경험할 수 있었다. 총 4개월 - 길면 길고 짧다면 짧지만 - 동안 택시도 타고 주말도 반납하면서 실전에서 부딪히며 느..
SQL 실행 순서 SQL 쿼리를 작성할 때 JOIN 절이나 GROUP BY 절의 위치가 종종 헷갈렸는데, 이는 결국 SQL 쿼리가 실행되는 순서와 관련이 있다. FROM : 테이블 선택 JOIN : 테이블 간 결합하기 WHERE : 조건에 따라서 행을 필터링하기 GROUP BY : 필터링된 데이터를 그룹화하기 HAVING : 그룹화 된 데이터에 대해서 필터링하기 SELECT : 필요한 열을 선택하기 ORDER BY : 결과에 대해 정렬하기SELECT column_name, SUM(another_column)FROM table1JOIN table2 ON table1.id = table2.idWHERE conditionGROUP BY column_nameORDER BY column_name; JOIN 이 G..
참고 : Ubuntu 22.04 LTS 환경에서 작업했습니다. 사이드 프로젝트 서비스 배포 준비를 하며 Dockerfile 빌드를 하던 중, No space left on device 에러가 발생했다. 원래 EC2에 연결되어 있던 EBS 볼륨의 크기는 8GB였다. 도커 파일 빌드 시에 ML 관련 패키지들이 무거운 것들이 있어서인지 df -h 명령어로 파일시스템을 확인하면 빌드가 진행되면서 사용률이 늘어나는 것을 확인할 수 있었다. EC2 인스턴스 > 스토리지 > 블록 디바이스를 선택한다. 수정할 EBS 를 선택하고 볼륨 수정을 선택한다. 나의 경우 16GB로 늘려주었다. 아직 xvda 1 는 7.9G 가 할당된것을 볼 수 있다. 루트 파티션 xvda1 이 전체 공간을 사용할 수 있도록 확장하는 작업이 필..
1. entities.pyfrom uuid import UUIDfrom advanced_alchemy.base import UUIDAuditBasefrom sqlalchemy.orm import Mapped, mapped_columnfrom sqlalchemy.dialects.postgresql import UUID as psql_UUID # postgresql 에서도 string type 이 아닌 UUID type으로 관리하기 위해 importclass IdempotencyKey(UUIDAuditBase): idempotency_key: Mapped[UUID] = mapped_column(psql_UUID(as_uuid=True), unique=True, nullable=False) 2. auto..
https://leetcode.com/problems/median-of-two-sorted-arrays/두 개의 정렬된 List 합쳤을 때 중앙값을 구하는 문제이다. 단, 문제에서 O(log(m+n)) 시간 내에 풀이하라고 주어졌다. 1. Merge Sort 알고리즘처럼 하나씩 대소비교를 하여 정렬하는 풀이 시간복잡도 : O(m+n)Runtime : 90 msMemory : 16.8MBclass Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: n = len(nums1) m = len(nums2) t = (n+m) # length of the merge..
Chapter 1. Apache Airflow 살펴보기1.1 데이터 파이프라인Task 간의 의존성을 확인하는 방법 중 하나가 pipeline 을 Graph 자료구조로 그리는 것.DAG (Directed Acyclic Graph) : 방향성 비순환 그래프. 반복 및 순환 (cycle)을 허용하지 않음.1.1.2 파이프라인 그래프 실행DAG 구성을 이용하여 정해진 순서로 Task 를 실행함.1.1.3 그래프 파이프라인과 절차적 스크립트 파이프라인 비교각 Task 를 Node 로 생성하고, Task 간의 데이터 의존성을 화살표 끝점으로 연결하여 표현함.1.1.2 예시와 다른 점은 파이프라인 첫번째 단계가 독립적인 두개의 태스크로 구성되어 있으며, 병렬로 실행할 수 있다는 점이다.Task를 순차적으로 실행하는 ..
https://leetcode.com/problems/sort-list 말그대로 배열을 정렬하는 문제이다. 그런데 이제 배열이 링크드 리스트 자료구조로 만들어 져 있는 상태인 ! 버블 소트같은거 밖에 생각못하다가 mergesort 로 풀어야 문제에서 조건으로 준 O(1) 공간 복잡도에 O(nlogn) 시간복잡도로 풀 수 있다. 기본 merge sort 라면 공간 복잡도가 2n 이 되었겠지만, 여기서는 링크드리스트의 특성을 이용하여 O(1) 으로 풀 수 있다. (대박..) LinkedList에서 중간 값(node) 를 구하는 로직이다. 낮은 값은 항상 한칸, 하나 더 큰 값은 항상 두칸씩 이동하다가 null 값을 만나면 순회를 멈추게 된다. 이렇게 하면서 중간값을 구하게 된다. LinkedList 문제에서..
https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 (1차 시도)from collections import deque def solution(bridge_length, weight, truck_weights): answer = 0 queue = deque([0] * bridge_length) while queue and truck_weights: # popleft 시도 queue..