엄청 오랜만에 글을 포스팅하는 느낌인데.. 거의 1달만인 것 같습니다.
최근까지도 회사에서 하는 프로젝트며, 대학원 준비 같은 업무들로 바쁜 시간을 보내느라 글 포스팅하는 것이 후순위가 되어버렸습니다.
이번에도 회고록이기 때문에, 생각나는대로 한 해를 정리하면서 생각한 것들에 대해서 포스팅하겠습니다.
1. 생각나는 것들
1) 경조사
이번년도는 유독 경조사가 많았던 한 해였던 것 같습니다.
올해로 3년차, 이제 내년에 4년차가 되는데 이 시기쯤 되니 친구들 무리에서도 처음 결혼하는 친구가 나오고,
여기저기서 소식들이 많이 들려왔던 것 같습니다.
2024년도 예정된 결혼소식들이 많이 들려옵니다. 제 주변에 행복한 일들이 더 많이 생겼으면 좋겠습니다.
그러면서 생각되는게 역시 건강을 최우선 목표로 두어야 행복한 삶이 가능하지 않을까 생각이 든 것 같습니다.
2) 헬스장
원래는 야외에서 조깅과 간단한 운동기구들로만 운동을 했었는데, 겨울이 되니 이제 야외활동은 어려웠기 때문에 겨울동안만이라도 헬스장을 등록하려고 했습니다.
근데 다녀보니 생각보다 꾸준히 나가기도 하고 괜찮아서 일종의 루틴이 된 것 같습니다.
지금와서 봐도 등록하길 잘한것 같고 제 최우선목표인 건강을 챙기게 된 것 같습니다.
3) 안정기와 취미
이제 4년차가 곧 되고 신입의 탈은 벗어날 정도의 연차는 됐다고 생각합니다. 그래서 어느정도 심적으로도 안정기가 찾아왔는데, 대부분의 직장인의 딜레마 이듯 취미로 할만한 게 딱히 없는 것 같습니다.
친구들한테 "뭐 할만한 것좀 추천해줘봐" 해도 '모바일 게임', '헬스', '스포츠' 등등 돌아오는 대답은 많은데 나 자신이 뭔가 만족할만한 대답은 없었습니다.
각 대답에 대해서 뭔가 마음에 안드는게 있었나 봅니다.
'모바일 게임은 너무 패턴이 비슷하고 스케일이 작고'
'헬스는... 살려고하는거잖아? 어떻게 그게 취미야..'
'스포츠는... 수영 좋아하는데 겨울엔 너무 추워'
이러한 이유들로 아직까지도 뭘해야 행복하게 시간을 보낼 수 있을지 잘 모르겠습니다.
예전에 프로게이머를 준비하려고 게임을 엄청 많이했던 시절이 있는데, 게임으로부터 나오는 순간적인 도파민에 이미 중독돼서 다른것들에 재미를 느끼지 못하나 생각이 들기도 합니다.
너무 많은 자극을 쫓아가며 살지 않고, 책을 읽으며 여유롭게 사는 슬로우 라이프를 꿈꾸지만 한편으론, 막상 그런 상황이 주어져도 진심으로 즐기질 못하는 상황이 나오게 되는 것 같습니다.
4) 커리어
여러 의미로 예전에 못다한 학업을 위해 대학원 진학을 결심했음에도 불구하고 역시 쉬운 것 하나 없는 세상 인 것 같습니다.
올해에 지원한 대학원에는 합격통보를 받지 못했고, 시간적으로 여유가 없지는 않지만 시간이 있을 때 빨리하고 싶은 그런 마음들이 생겨서 아쉽다? 정도의 감정이 들었습니다.
그리고 요번년도에 이직을 하게 됐는데, 정말 하기를 잘했다는 생각이 들고 원하는 일을 하게 됐을 때의 참여할 때의 진심이라던가 집중력의 차이가 확실히 달라지는 것 같습니다. 사장이 돼서 남의 일이 아닌 본인의 일에는 진심이 되는 것과 비슷한 경우로, 하고 싶었던 경력을 쌓고 실무에 적용해보는 환경에 주어진 것에 대해서 감사함을 느낍니다.
2. 해온 것들
많은 것들을 했고, 해야 할게 아직도 많이 남았지만 그래도 흔히말하는 찍먹이라도 해본 것들이 정말 많은 해였습니다.
1) Spark Tuning
제일 관심이 많은 기술 스택중 하나라 항상 하고싶었고, 앞으로도 알아야 될 지식과 경험치가 많지만 어느정도 기록으로 남길만한 업무가 하나 있었습니다.
emr 5.x버전을 사용하면 spark 2.x버전을 사용할 수 밖에 없는데, emr5.x → emr6.x로 업그레이드를 하면서 AQE를 활용한 spark partition tuning을 해볼 기회가 생겼습니다.
[데이터, job 크기]
- 총 데이터: 3년치 데이터
- job의 크기: 1개월씩 나누어 처리
[EMR 5.x, Spark 2.x]
- 소요시간: 평균 35~40분
- spill: disk와 memory spill
[EMR 6.x. Spark 3.x]
- 소요시간: 평균 10분
- spill: 거의 없는 spill
위와 같이 파티션 조정이 얼마나 중요한지를 체감할 수 있는 의미있던 작업이였습니다.
2) Airflow on k8s
항상 k8s공부해야지, airflow도 k8s위에 올려봐야지 생각만 했던 것이 해볼 수 있는 기회가 생겼습니다.
AI디지털교과서 프로젝트를 하게되면서 Airflow도 새로 구축할 일이 생겼는데, 마침 MSA환경으로 구성해야 하는 플랫폼이다 보니 Airflow 또한 k8s위에 올리는 것으로 결정했습니다.
k8s스러운? executor인 KubernetesExecutor로 구축을 하는 과정에서 정말 많은 개념과 지식들을 배운 것 같습니다.
[배우게 된 지식들]
- k8s obejcts, commands
- argocd
- jenkins
- Dockerfile과 빌드, 이미지 푸쉬
- NCP(Naver Cloud Platform) product 사용법
- Networking
- ACG(AWS의 SG같은 것)
- pod ip, host등 서비스를 띄우거나 연결할 때 참조해야되는 ip:port정보
- ingress, loadbalancer, subdomain
- logging
- object storage
- pv,pvc,storageclass
- elasticsearch
- gitsync
- airflow 구성하는 pod 구조
이외에도 많은 것들을 기록해두었으나, 세상밖으로 나오지는 못했습니다.ㅎㅎ
3) kafka
LRS를 구축하면서 collector서버로부터 받는 데이터의 종착지가 kafka였습니다.
topic에 쌓인 데이터를 spark streaming을 통해 produce하고, MongoDB로 보내기 위한 큐의 역할을 하는데 사용하였습니다.
아직은 운영 및 심도있게 다뤄보지는 못했으나, 운영 및 스터디와 함께 이슈사항과 함께 정리해나갈 생각입니다.
[배우게 된 지식들]
- kafka 구조
- producer
- consumer 및 consumer group
- spark streaming
- mongodb와 연동
- broker
- partition
- zookeeper 역할
- config들
- ack
- retention 정책
- kafka streaming
- lag monitoring 및 metric 수집
- pod에 띄운 kafka-exporter를 통한 prometheus & grafana 연동
4) MongoDB
kafka로부터 sparkstreaming을 이용해 데이터를 전달받는 DB이며, 모든 데이터를 xAPI의 형태로 받게 될 저장소입니다.
MongoDB같은 경우엔 예전에도 NoSQL을 공부하면서 잠깐 다뤘었는데, 내부 구조 및 운영을 하면서 생긴 이슈는 아직 겪어보지 못했기 때문에 아주 좋은 기회라 생각됩니다.
이 부분 또한 운영 및 이슈를 하면서 블로그에 정리하겠습니다.
[배우게 된 지식들]
- MongoDB production cluster 구성
- shard cluster
- replica set
- single node clsuter
- MongoDB 명령어
- DB, collection, index 생성
- spark x MongoDB 연동
- Spark를 통해 MongoDB에 붙어서 ETL하는 작업
5) k8s
아직도 알아야 할게 산더미고.. 스터디를 하면서 제대로 공부해야지 생각도 아직도 들게되는 k8s.. 그래도 매번 이론으로만 접하다가 실제로 다뤄보면서 커맨드도 날려보고, 운영 및 개발도 해보니 조~~금은 감이 온 것 같습니다.
가장 많이 공부해야 된다 생각되고 공부할 1순위 목록입니다. 블로그에도 꾸준히 정리해나가겠습니다.
[배우게 된 지식들]
- Airflow on k8s
- 사실 k8s전체를 제가 다룬다기보다는 k8s위에서 늘 언젠가는 구성해봐야지 생각했던 Airflow를 구축해봤는데, k8s에 대한 제 전반적인 지식들을 이 경험으로 부터 얻었기 때문에 정말 운도 좋았고, 감사한 일이라고 생각됩니다.
- pod networking
- NCP의 각 제품 및 k8s 내의 pod끼리 통신이 필요할 때 어느 ip와 port를 참조해야되고 ACG(SG)는 어떤식으로 설정해야 되는지를 배웠습니다.
- airflow webserver를 노출하기 위해 ingress 및 LB설정에 대해서 배웠습니다.
- helm chart
- helm chart를 어떤식으로 구성해서 provisioning해야 되고 Airflow를 구성하는데 필수적인 설정들은 어떤것들이 있는지 배우게 됐습니다.
- prometheus & grafana 연동
- Airflow StatsD를 통해 k8s위에 띄운 모니터링 도구로 metric을 전송하고 Airflow 관련된 지표들을 모니터링할 수 있게 구성했습니다.
- 관련해서 Fluentbit 등 k8s에서 어떤식으로 관련된 pod의 log며 지표를 전송하는지 더욱 학습이 필요하다 생각됩니다.
- Object 및 자원 다루기(아래의 파일들로 관리하고 다뤘습니다.)
- application.yaml
- namespace.yaml
- Kustomization.yaml
- values.yaml
- kubectl
- k8s위에서 구축 업무를 하면서 만났던 수 많은 에러에 대해서 kubectl를 통해 log를 확인하고, namespace관리 및 secret 확인에 대해서 command를 날리면서 손에 익게 된 것 같습니다.
- ArgoCD & Argo Rollouts
- k8s의 CI & CD 프로세스
- terraform
- 사실 프로젝트와는 관련이 없지만 IaC를 통한 k8s관리하는 것을 직접 경험해보고 싶어, terraform을 통해 간단하게 EKS를 구성하는 작업을 해봤습니다.
아직도 Istio, Service Mesh, 직접 ArgoCD, Prometheus, Grafana 구성 등등 알아야 할게 산더미라고 생각됩니다.
차차 정리 해 나가겠습니다.
6) 요구사항에 맞는 개발
대부분 ETL 프로세스를 개선한 일이 많습니다.
- 몇몇 수동으로 이뤄지던 ETL 작업들을 Airflow DAG로 묶어 자동화
- Airflow TaskGroup를 통해 자동화 시킨 작업 중에 중복되는 작업을 단 한번만 실행되게끔 구성하여 비용 및 시간 감소
- 병렬처리가 가능한 부분 병렬처리로 하여 시간 단축
- 이외에도 여러 부서로 부터 받은 추출 및 변환 작업들(spark를 이용한)
7) AWS 비용 절감
비용을 절감하는데는 크게 2가지 요인에 의해서 이루어졌습니다.
- 매달 체크하는 AWS비용 회의 및 KPI 달성
- 요구사항에 따른 개발과 변경
KPI라하면 대부분의 데이터 엔지니어들은 사용하고 있는 AWS제품의 비용 절감일 거라 생각되는데, 저희 기업또한 마찬가지였습니다. EMR 비용감소 EC2비용감소, 중복 작업, 중복 데이터 제거를 함으로써 비용을 절감시켰습니다.
[비용 절감에 기여한 작업들]
- EMR on EC2 배치 작업 → EMR Serverless (비교적 작은 Workload들 한정)
- Batch Scheduling 중 EC2 start 이후 scipt 작업 및 중간 단계가 실패해도 반드시 EC2 Stop작업 실행(Airflow trigger rule all done 적용 및 병렬 실행으로 반드시 실행되게끔 구성) (GPU 장비가 탑재된 서버는 특히 비싸기 때문에)
→ 참조 링크 - ETL 작업 시 중복으로 실행되던 Glue crawler 작업 단 한번만 실행 되게 수정
- EMR 5.x → EMR 6.x로 버전업과 동시에 Partition 조정, AQE 적용으로 자원 효율화에 따른 시간단축과 비용절감
앞으로도 꾸준히 해온 일들과 겪은 일들 뿐만 아니라, 공부해나가는 내용도 정리하겠습니다.
회고록은 2024년 말에 다시 한번 쓰는 것으로 돌아오겠습니다.
2024년도 화이팅입니다!
감사합니다.
'끄적끄적' 카테고리의 다른 글
퇴사, 가치관 그리고 회고록 (0) | 2024.12.14 |
---|---|
첫 번째 이직, 그리고 데이터 엔지니어 (7) | 2023.05.07 |
[회고] 2022년을 마무리하며 회고 (0) | 2022.11.24 |
[AmazingTalker] 직장인 자기 계발 영어 회화, 영어 화상 수업 체험 후기 (2) | 2022.06.11 |
직장생활에 대한 회고 + 일상생활 (5) | 2022.05.14 |
댓글