현재 활동하고 있는 글또에서 코드트리와 협업하여 코드트리를 1달 동안 사용해 볼 수 있었습니다. 개인적으로 코딩테스트를 준비하는 데 있어서, 일정 수준까지는 올렸는데 그 이상을 올리는게 어려웠던 지라 코드트리를 사용해 보고 싶었습니다. 그러던 참에 좋은 기회에 코드트리로 코딩 테스트 공부를 해볼 수 있었습니다. 단계별 커리큘럼 제공 코드트리에서 가장 좋았던 점은 단계별 학습 가이드입니다. 기초 - 연습 - 자료구조,알고리즘 - 알고리즘 입문 - 알고리즘 기본 - 알고리즘 실전 단계로 나뉘어집니다. 저의 경우, 기존에 알고리즘/자료구조 수업을 학부생 때 들은 경험이 있으며 백준이나 프로그래머스같은 플랫폼에서 코딩테스트를 공부해 온 상태였습니다. 그런데 목표하는 기업에서 주로 구현을 까다롭게 내는 편이어서 ..
전체 글
Data Engineering과 Cloud Native 기술에 대해 Dive Deep 하는 만능 플랫폼 엔지니어가 되는 것을 목표로 하고 있습니다. 경험했던 내용과 공부했던 내용을 기록합니다. 🐻❄️☁️데이터 엔지니어 분들의 이야기를 보면 회사마다 각기 다른 엔진, 서비스로 플랫폼을 구축하여 운영하고 어떤 제품이 가장 적합한지 PoC를 통해 도입하는 것 같다. 예전에 스타트업에서 인턴을 했을 때에도 Avo라는 로깅 + 모니터링 툴에 대해 데이터 엔지니어링 팀원분들과 PoC를 진행하고 실제로 도입했던 경험이 있다. 여러가지 데이터 인프라 구성요소 중에서 가장 흔하게 사용되고, 내가 현재 회사에서 사용하는 Databricks 플랫폼과 관련된 엔진들에 대해 정리해보았다. Spark vs Hadoop 먼저 빅데이터를 관리하고 처리하는데 사용되는 오픈소스 프레임워크로 Spark와 Hadoop이 있다. 현재는 주로 Hadoop에서 Spark로 넘어온 패러다임이라고 한다. Hadoop Map Reduce 연산 Ha..
https://docs.databricks.com/en/delta/merge.html#language-python Databricks documentation docs.databricks.com 데이터를 증분적재해야 하는 경우 merge() 혹은 MERGE INTO sql 문을 사용할 수 있다. [Python Code Snippet] (targetDF.alias("t") # DeltaTable 이 Target이 되어야 한다. .merge(sourceDF.alias("s"), "s.key = t.key") # merge 조건을 정한다. Source는 DataFrame이다. .whenMatchedUpdateAll() # key값이 동일한 경우 모두 변경 반영 .whenNotMatchedInsertAll() ..
Q. Array와 LinkedList의 장점과 단점에 대해 시간 복잡도를 가지고 설명해주세요. 더보기 Array의 장점은 순차적으로 데이터를 저장할 수 있다는 것입니다. 데이터에 순서가 있으므로 index를 갖게 되며, index를 이용하여 자료의 탐색을 O(1)의 시간복잡도로 할 수 있습니다. 반면 데이터가 순차적으로 존재하기 때문에 새로운 데이터를 삽입하거나 삭제하는 경우 그 뒤의 모든 데이터들을 한칸씩 움직여주어야 한다는 단점이 있습니다. 이 경우 O(N) 의 시간 복잡도를 가집니다. LinkedList의 경우 삽입과 삭제 연산에 O(1)의 시간복잡도를 가집니다. 반면, 탐색을 하는 경우 array 처럼 index를 이용하여 바로 접근할 수 없으며 선형 탐색을 해야 하므로 O(N)의 시간복잡도를 가..
1. 문제 n명의 권투선수가 권투 대회에 참여했고 각각 1번부터 n번까지 번호를 받았습니다. 권투 경기는 1대1 방식으로 진행이 되고, 만약 A 선수가 B 선수보다 실력이 좋다면 A 선수는 B 선수를 항상 이깁니다. 심판은 주어진 경기 결과를 가지고 선수들의 순위를 매기려 합니다. 하지만 몇몇 경기 결과를 분실하여 정확하게 순위를 매길 수 없습니다. 선수의 수 n, 경기 결과를 담은 2차원 배열 results가 매개변수로 주어질 때 정확하게 순위를 매길 수 있는 선수의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 선수의 수는 1명 이상 100명 이하입니다. 경기 결과는 1개 이상 4,500개 이하입니다. results 배열 각 행 [A, B]는 A 선수가 B 선수를 이겼다는 의..
CPU 스케줄링 데드락(DeadLock) Race Condition 세마포어(Semaphore) & 뮤텍스(Mutex) 페이징 & 세그먼테이션 페이지 교체 알고리즘 메모리(Memory) 파일 시스템 Q. CPU 스케줄링 알고리즘 중에서 비선점형 스케줄링에 대해 설명해주세요 더보기 CPU 의 이용률을 극대화하기 위해서 멀티 프로그래밍을 해야 한다. 언제 어떤 프로세스에 CPU 자원을 할당할지 결정하는 것이 CPU 스케줄링이다. 비선점형 스케줄링이란 한 프로세스가 CPU 를 점유하고 있다면 다른 프로세스가 CPU 자원을 빼앗을 수 없는 방식이다. 따라서 필요한 문맥 교환만 발생하여 오버헤드가 상대적으로 적지만 프로세스가 어떻게 배치되는 지에 따라서 효율성이 많이 차이날 수 있다. 비선점형 스케줄링의 종류 F..
Python 의 GIL (Global Interpreter Lock) Python은 멀티 스레딩 환경에서 두 개이상의 스레드가 동시에 동일한 자원에 접근하는 것을 방지하기 위해 GIL 매커니즘을 사용한다. GIL에 의해 CPU bound 작업을 처리하는 경우 한번에 하나의 스레드만 실행하도록 동작한다. 반면 I/O bound 작업의 경우에는 I/O 작업 중에 GIL가 해제되기 때문에 GIL의 영향이 상대적으로 적다. 이렇게 하나의 스레드만 사용하게 되는 GIL의 제약사항을 극복하기 위해서 Python에서 threading 과 multiprocessing 을 사용했다. 각 Python 의 프로세스가 자체적인 메모리 공간과 GIL 를 가지므로 여러 CPU 코어를 사용한 병렬처리가 가능하다. 그리고 Pytho..
알고리즘 스터디를 시작하게 되었는데 내가 스터디장이 되었다. 인증을 어떻게 하면 좀 더 덜 귀찮게 (...) 자동화 할지 알아보다가 webhook 이란걸 발견했다. 디스코드 채널 > 우클릭 > 서버 설정 > 연동을 클린한다. 연동에서 웹후크를 선택한 후 새 웹후크를 클릭하면 만들 수 있다. 웹후크 URL 을 복사한 후, GitHub 레포지토리로의 Settings로 넘어가자 Add Webhook 을 선택한 후, URL 을 붙여넣는다. 여기서 URL의 마지막에 /github 을 반드시 붙여주어야 한다. 또한 Content Type 은 application/json으로 설정해주어야 한다. 모든 event 를 받겠다고 선택했더니 main 브랜치 이외에 commit 을 한 내용도 바로 디스코드 채널로 event ..