[회고] 2022년을 마무리하며 회고
아직 한달가량 남았지만, 매년 말 쯔음 한 해를 마무리하며 해온 것과 드는 생각들, 내년의 계획 같은 것을 적어보려고 합니다.
작녀에는 회고글을 못적었기 때문에 작년의 기억을 더듬어 정리하는 시간도 갖기로 했습니다.
회고성 글이기 때문에 잘 정리된 글이 아닌 생각나는 대로 두서없이 쓰는 글의 형태로 포스팅 하려고 합니다.
1. 해온 것들
1) 2021년
첫 직장생활을 하며 어떤 방향으로 나아갈지 정하게 된 한 해였던 것 같습니다.
운이 좋게도 첫 프로젝트를 Cloud + Big data를 다룰 수 있는 프로젝트로 투입돼서 정말 다양한 경험을 해볼 수 있었는데,
그래서 데이터엔지니어링 이라는 분야에 더 흥미를 느끼고 확실한 진로를 정할 수 있게 되었습니다.
AWS
정말 많은 AWS 온라인 강의, Hands on 강의를 들었고, 관련된 개념들을 정리했습니다.
S3 부터 EC2, VPC, SG, IAM, EMR, MWAA, MSK, Athena, Glue, Redshift를 프로젝트에서 사용했기 때문에 이 제품들 위주로 공부를 많이 했었습니다.
AWS를 공부하면서 들었던 생각은 AWS의 제품은 on-premise에 있는 시중의 제품들과 굉장히 비슷하다는 점이였습니다.
그래서 On-premise에서 사용하는 기술들을 알면, Cloud의 제품들도 어렵지 않게 사용할 수 있다고 생각이 들었습니다.
실제로도 기존의 기술을 관리하게 편하게 managed라는 이름을 붙여 cloud 제품으로 만든 경우가 많습니다.
예를 들면 아래와 같은 것들이 있습니다.
On-premise | AWS Cloud |
hadoop | EMR,Hive,Spark |
RDBMS(mysql, MariaDB, Oracle, Postgresql) | Aurora |
MongoDB, HBase | DynamoDB |
Apache airflow | MWAA |
Apahce Kafka | MSK |
Cloud는 engineering에 있어서 정말 결과를 내기 좋은 방법이라고 생각합니다.
무슨 뜻이냐면, Cloud는 모든게 돈이기 때문에 사용하는 시간 및 자원을 최적화시키는게 정말 중요하고 그게 곧 돈이랑 직결됩니다.
자원을 최적화 시킬 수 있는 방법은 여러개가 있는데, 예를들면 EMR의 Spark Job을 Spark code, Partition를 개선해 최적화된 자원과 시간으로 비용을 줄일 수 있습니다.
On-premise는 인프라 구입비용 때문에 초기비용이 많이 들고, Cloud의 경우 사용한 만큼만 내게 되니 Cloud 사용 시 최적화가 더욱 부각되고 있습니다.
SQL
아마 대부분이 그렇겠지만, SQL의 깊이가 어느정도 있는지를 모른채 '나 정도면 SQL 좀 짜는거 아닐까?' 싶은 생각을 많이 했을 것 같습니다.
저 또한 대부분의 사람처럼 자신의 실력이 어느정도의 위치인지 모르는 SQL초보였습니다.
나름 SQLD도 따고 그래도 초보치고는 괜찮지않나? 라는 생각을 했던 오만한 시절이였던 것 같습니다.
프로젝트 리더 분께서는 SQL은 데이터를 다루는 업계에 있으면 앞으로도 계속 사용될 개념이니 SQL 실력은 필수적이라고 하셨습니다.
그래서 PySpark 코드를 짜기 전에 SQL조차도 이해못하고 짜지 못했던 저에게 생긴 미션은 pyspark 공부 이전에 SQL부터 마스터 해두라는 것 이였습니다.
약 4개월간의 SQL 훈련은 다음과 같이 진행됐습니다.
- 변동구 저자의 SQL의 컨셉 for ORACLE책을 참조해서 기본기를 늘림
- window function 활용 문제
- inner, outer, join, 비동등 조인 활용 문제
- scan 최소화
- case when을 이용한 pivot 문제
- 분석을 위한 SQL 문제(사원별 총 임금 1등 조회, 특정월에 휴가 간 인원, 월별 퇴사자수 등등)
- null 처리 관련한 문제
위와 같은 과정을 겪으며 실력이 비약적으로 성장함을 몸소 느낄 수 있었던 시간이었습니다.
물론 지금도 SQL을 짜고 배우고 있으며, 배워야 할 점이 많다고 매번 느끼고 있습니다.
특히나 잘 안쓰게되는 환경에 있다보면 SQL도 그 개념을 까먹고, 어색해질 때가 있는데 공부를 하는 것과 마찬가지로 주기적인 복습이 중요한 것 같습니다.(수학 문제를 풀듯 어려웠던 문제가 있으면 자주보고 또 풀어줘야 합니다.)
http://www.yes24.com/Product/Goods/6357997
Hadoop
하둡은 하이브와 스파크의 근간이면서, 빅데이터의 꽃이라고 생각합니다. MR의 시초이며 빅데이터 프레임워크가 생겨난 처음에는 하둡이 있었습니다. 대부분의 대기업에는 on-premise에 하둡을 사용하여 데이터를 저장하고 있는데, 투입된 프로젝트에서도 마찬가지였습니다.
하둡(HDFS) + HQL환경으로 ETL을 처리하고 있었으며 tez엔진 + oozie로 daily batch ETL을 하고 있었습니다.
프로젝트내에서는 HDFS대신에 S3로 migration하는 작업이였기 때문에 하둡을 직접적으로 다룰 일은 없었지만, AWS EMR의 리소스 관리자역할로 yarn과 k8s를 비교해볼 수 있었으며, 하둡에 근간한 data file(partition)크기 산정, tez와 spark engine의 속도차이, 안정성 차이를 확인해볼 수 있었습니다.
마찬가지로 프로젝트가 끝나고 나서는 하둡환경을 경험해볼 일이 없었기 때문에 직접 하둡 환경을 구축해서 HDFS 및 YARN을 공부하고, 그 위에 hive 와 spark를 올리면서 많은 에러도 접하고... 인프라를 다루는 부분과 빅데이터를 이해하는 2가지면에서 큰 실력적인 향상이 있었습니다.
2021.08.08 - [BigData/Hadoop] - [BigData] 완전 분산 하둡 클러스터(hadoop cluster)구축하기(4개 노드) 1. 4개의 가상 노드 띄우기
Hive
들어간 프로젝트에서는 hadoop 위의 Hive로 daily ETL을 할 만큼 Hive에 대한 비중에 컸었습니다.
프로젝트의 주된 내용이 On-premise의 hive와 cloud의 spark를 비교하는 것이였던 것 만큼 Hive에 대해서 아는것도 매우 중요했습니다.
뿐만 아니라 Hive의 Metastore와 externaltable, partition 및 location은 AWS에서도 적용되는 개념이였으므로, 따로 블로그에 정리할 만큼 중요한 내용이였습니다.
2021.06.26 - [BigData/Hive] - [Hive] Hive MetaStore(하이브 메타스토어)란? hive metastore 유형, metastore 파라미터
2021.06.27 - [BigData/Hive] - [Hive] (2) Hive MetaStore, Partition, msck, DDL문,location 정리
Spark
프로젝트 들어갈 때 까지만해도 한국에서의 spark에 대한 관심은 크지 않았던 걸로 기억합니다.
(현재는 많은 곳에서 사용되는 것으로 보입니다.)
대부분의 데이터는 pandas로 처리해도 문제없을 양의 크기이기 때문일 것이고, spark가 분산처리를 할 만큼의 충분한 인프라가 갖춰져있는 곳도 없을 것이기 때문입니다.
그래서 AWS의 scale up-down, in-out은 spark를 쓰기 최적의 환경입니다.
spark는 scala와 python두가지 언어로 사용을 많이하는데, python이 비교적 배우기도 쉽고, 이미 익숙했으므로 pyspark를 프로젝트 내에서 사용했습니다.
spark는 성능 최적화가 곧 AWS(클라우드) 내에서 돈으로 직결되기 때문에 spark의 성능을 최적화시키는게 중요 과업중 하나였습니다.
[spark 배운 것]
- spark coding convention
- filter,where 사용
- select, selectexpr 사용
- select 의 4가지 방법
- alias 와 조회 관계
- RDD, Dataframe, Dataset
- RDD to DF
- DF to RDD
- RDD, Dataframe의 장점과 성능
- SparkSQL
- partition 최적화
- core,memory 설정
- spark (jupyter notebook) 환경 구성)
- spark on hadoop cluster 환경 구성
- schema 생성(부여)
- dummy data 생성
Airflow
airflow는 프로젝트에서 oozie와 airflow를 비교하면서 처음 써봤습니다.
둘 다 ETL을 위한 data pipeline tool로써 batch scheduling을 위한 용도로 사용했으며, 프로젝트에서 내가 담당하는 부분은 아니였기에 프로젝트 dags 생성 템플릿에 맞춰 사용해본것이 전부였습니다.
그러면서 dags에 들어가는 속성들에 대한 공부를 했습니다.
- default_args
- start_date, execution_date
- time 조작(pendulum, datetime)
- dag객체 생성
- schedule_interval 및 cron expression
- task 생성
- bash operator
- python operator
- Shift 연산자에 의한 Task 의존성 표현
프로젝트가 끝난 이후에는 ec2및 가상 서버에 airflow를 직접 설치해보며 개인 프로젝트에 사용해봤지만, 아직까지도 부족하고 알아야 할 것이 너무 많다고 생각합니다.
[공부해볼 목록]
- celery 및 kubernetes 위에서 kubernetes executor를 적용한 airflow를 구성
- docker로 간단한 airflow 구성
- 여러 operator 사용(bigquery, mysql, postgresql, email, etc...)
- 여러 기업 운영에서 사용하는 dag .py 파일의 template 적용
- 다른 서버와의 네트워킹
2) 2022년
AWS
- 자격증
언젠가는 취득해야겠다고 생각했던 AWS SAA(Solution Architect Association) 자격증을 계속 미뤄오다가, 회사 KPI로 설정을 하게 됨으로써 더 이상 미룰 수 없게 되었습니다.
약 1달가량 www.oacle.net 사이트에서 관련 문제들을 풀으며 준비를 했습니다.
결과는 무난하게 합격을 했고, 개인적인 목표 및 회사의 KPI까지 달성하게 됐습니다.
지금와서 돌이켜보면, 문제 은행식의 자격증 취득이 무슨 의미가 있을까 싶기도 하지만, 자격증 공부를 하면서 다양한 AWS 서비스들에 대해 직접 찾아보고 notion에 정리할 수 있는 시간을 갖은 것, 그리고 기업들은 AWS 서비스를 어떤식으로 조합해서 사용하는 지에 대한 지식을 얻을 수 있었던 것 같습니다.
- 프로젝트
프로젝트에서 on-premise의 데이터를 cloud에 올리면서 데이터 레이크를 구축하고, 회사의 솔루션과 연동하는 테스크가 있었습니다.
레이크를 대상으로 athena엔진을 빌려 데이터를 조회해야 하는 상황이였는데, 솔루션과 연동하면서 아래와 같은 세부 작업들을 처리했습니다.
IAM USER 발급(access key, secret key 발급) → IAM 정책 athena:GetQueryResultsStream 받기(Athena full access 권한 받음) → 솔루션 서버 에서 AWS 서울리전 444Port Open → 랜딩존 구조에 맞게 네트워크 설정(다시쓰기) → database 및 테이블 조회가 하나도 안돼 확인(aws cli에서 aws athena list-databases --catalog-name AwsDataCatalog)했으나, return값이 공백으로 나옴 → Lake Formation에서 관리하는 DB 및 테이블에 대한 Select, Describe 권한 받기
실제로 데이터레이크에 대한 사용자 및 권한 관리와 기업의 네트워크에 따른 필요한 작업들이 어떤 것인지 알 수 있는 귀중한 경험이였던 것 같습니다.
DA(Data Architect)
이번년도의 회사에서의 업무는 데이터 엔지니어링 보다는 데이터 거버넌스 및 DA업무에 가까운 업무가 많았습니다.
상반기에 했던 프로젝트는 통합DA(데이터 모델링 검토 및 모델링,오브젝트 명명규칙 표준 잡기 등) 및 데이터거버넌스,데이터 표준,품질 관리의 업무를 맡았습니다. 관련해서 PK의 진정한 의미와 실제 업무에서 어떤 정규화 법칙들이 지켜지지 않고 있고, 정규화 법칙대로 지켜지지 않는 현실과의 타협에 대해서도 이해를 하는 정말 도움이 많이 되는 프로젝트였습니다. 또한 그동안 애매했던 코드관련 개념을 정확히 알게됐는데, 공통코드와 개별코드 그리고 코드관리는 어떻게 해야되는지에 관한 것들을 중점적으로 배울 수 있었던 시간이었습니다.
또한 데이터엔지니어링의 입장에서 데이터거버넌스 및 DA의 역할을 연관지어 생각해본다면 데이터엔지니어로써 모델링,거버넌스 지식은 필수라고 생각이 됩니다.
데이터 엔지니어의 역할을 생각해보면 '내-외부 원천 데이터를 수집, 가공, 적재하여 데이터가 흐르는 파이프라인을 설계 및 구축하는 역할' 즉, 잘 정제된 데이터가 있어야 할 위치에 잘 있도록 서빙하는 역할에 가깝습니다. 데이터가 아무리 많고 빠르더라도 활용하는 입장에서 품질이 낮고, 오류인 데이터가 서빙된다면 데이터로써의 의미가 없는 흔히 말하는 쓰레기 데이터가 서빙된 것입니다. 그런 의미에서 모델링의 최종 목표인 '데이터 품질을 높이는 행위'는 데이터 엔지니어와 밀접한 관련이 있다고 생각합니다.
뿐만 아니라 RDBMS의 SQL개념은 어디에도 사용되는데, 데이터 모델링은 SQL과도 밀접한 관련이 있어서 SQL을 이해하는데 도움이 된다고 생각합니다.
SQL
작년에는 기본기가 부족하지만 정말 다양한 경험과 어떠한 기술들이 있고, 데이터는 어떻게 흐르고, 비지니스는 어떻게 흐르는지에 대한 것들을 탐색하는 것이 주된 연도였다면, 올해는 기본기를 다지는 것이 좀 더 주된 연도였습니다.
- SQL 문제
사내에서 문제낸 SQL문제에 대해서 확실한 답이 나올 때 까지 다시풀어보고, Hackerrank, leetcode와 같은 문제 풀이 사이트에서 문제들을 풀었습니다.
- SQL 도서
또한 데이터파이프라인 핵심가이드, 데이터 분석을 위한 SQL 레시피 도서를 통해 NULL 처리, 중복값 처리, 분석을위한 SQL과 같은 한층 심도 있는 SQL에 대해서도 공부했습니다.
- 프로젝트
프로젝트에서는 중복값을 찾아내는, 품질진단을 위한 SQL쿼리를 짜야 할 일이 있었는데, 위에서 배운 지식들이 도움이 많이 되었습니다.
NULL값을 신경쓰면서, 각 row가 비지니스적인 요건에 맞게 중복된 데이터를 뽑아내는 쿼리를 짰었습니다.
하나의 컬럼 값을 기준으로 count(*) over(partition by 컬럼) 윈도우함수를 사용하여 2개이상인 데이터를 출력하는 쿼리 짜는게 주된 내용이였습니다.
Docker + K8S
데이터 엔지니어는 인프라적인 지식도 함양되어야 하기 때문에, docker와 k8s에 대해서 공부를 했습니다.
도커와 도커컴포즈, 도커파일 그리고 도커의 네트워크, k8s는 도서와 구글링을 하며 공부했는데, 올해보다 내년에 더 많은 시간을 투자해서 얕은 지식이 아닌 전문적인 지식으로 만들려고 합니다.
Python
항상 언어에 관해서는 부족하다고 느낍니다. 작년부터 airflow DAGs, PySpark script 뿐만 아니라 데이터 스크래이핑, Pandas, 날짜 다루기 관련 내용이 소규모 프로젝트에 들어가거나 회사업무에서 사용 될 일이 많았는데, 더 나은 code convention 부터 시작해서, 객체지향적이고 모듈적인 코드짜기, 더 나은 성능의 코드 짜기와 같은 요소들이 중요하다고 생각이 들었습니다.
그래서 이번년도에는 파이썬에 관련된 라이브러리며, 파이써닉한 코드를 짜는 방법이며, 코드 컨벤션까지 전부 공부해서 작년보다는 더 나은 프로그래밍 실력을 갖는 것이 목표였습니다.
올해 포스팅+공부한 리스트를 보면 아래와 같은데, 생각보다 많은 걸 공부했었네요. 이 중에 까먹은 것도 있지만 이미했던 것을 글을 보며 복습하는것은 어렵지 않다고 생각합니다. 한 번이 어렵지 두 번은 쉽거든요.
물론 깊게 공부한 것도 있고 얕게 공부한 것도 있지만, 일단 뭐가 있는지 파악하는 의미에서는 아주 성공한 일 년이였던 것 같습니다. 심화적인 학습은 앞으로도 쭈욱 해야 될 과제입니다.
[이번 년도에 Python 관련하여 공부한 list]
- 객체지향 개념과 Class,Method
- mysql DB 연결 library 사용법
- list, dictionary, tuple과 같은 sequence와 collection 타입 + zip 다루기
- map함수와 콜백함수
- *args, **kwargs 의미와 사용법
- lambda
- closure, decorator, logging
- iterable, iterator, generator
- list ,set, dictionary comprehension
- formatting
- argparse
- OS,SYS,Glob
- datetime, pendulum
- re(정규식)
- 동시성, 병렬성, multiprocessing, multithreading
- coding convevntion
- bs4, urllib, requests
- 간단한 pandas(pandas와 pyspark code 같은 동작하게 코드짜보기)
- megic method
- input() vs sys.stdin.readline
- 함수와 return의 사용
Algorithm
알고리즘은 문제를 해결하는 능력을 키워줌과 동시에, 자료구조에 대해서도 이해하고 구현할 수 있는 여러가지 의미로 도움이 되는 항목(?) 분야라고 생각합니다.
이번년도에는 생각보다 많은 시간을 쏟지는 못했는데, 회사에서 백준사이트에서 알고리즘을 다 같이 푸는 것부터 시작해서, '이것이 취업을 위한 코딩 테스트다 with 파이썬' 도서도 구매해서 꾸준히 문제를 풀고 감을 잡아가는 단계이고, 그것에 의의를 두기로 했습니다.
2. 요즈음 드는 생각
건강
우선, 건강(운동)이 이번년도에는 제법 한다고 깔짝거리면서 했던 것 같은데, 생각보다 유지하는 것 그 이상의 뭔가는 없었던 것 같습니다.
이만하면 됐다 이상의 노력이 필요할 것 같습니다.
독서
기술서적을 사두고 못읽은 시간이 너무 많습니다.
한창 읽다가 바쁘거나 개인적인 일상생활을 보내다보면 읽었던 부분도 까먹어서 다시 읽어야 되는 경우가 너무 많았습니다. 도서 한편을 빠른시일내에 다읽고 정리해두는 습관을 가져야겠습니다.
커리어
현재 하고있는 업무가 내가 원하던(?) 경험해보고 싶은 업무와는 달리 그저 수요가 있는 곳에서 일하는 것이다보니, 불만아닌 불만이 있습니다. 물론 대부분의 사람이 자기가 원하는 업무를 볼 수 없다는 건 알지만, 쟁취를 해보려는 저의 어필이나 노력이 부족했던 것 같습니다. 현실에 안주하지않고 다양한 도전을 해봐야겠습니다.
글 쓰기
블로그 글이며, 업무에서 쓰는 문서들이며 제 각기 다른 형식으로 글을 쓰고 있는 나를 발견했습니다.
글을 표현하는 나만의 규칙들이 필요하다고 생각이 듭니다. 물론 책도많이 읽고 잘 쓴 글들을 보며 참고해야 할 것 같습니다.
새롭고 다양한 경험과 도전
사회생활도 중요하고, 일에 관한 경험도 중요하지만 아직 젊다고 생각되는 나이에 해외 근무 혹은 세계 각지 여행 다양한 직종선택을 경험해보지 않고 너무 한쪽 길만 바라보는 것이 아닌가 하는 생각이 자주 듭니다. 헛되이만 보내지 않는 세월이라면 귀중한 경험에 시간을 쏟고 싶은 생각에 고민이 많이 되는 요즘입니다.
3. 내년의 계획
건강
내 삶의 목표 1순위는 건강입니다. '무슨 벌써부터 건강을 챙기냐' 라고 하시는 분들이 가끔 있습니다. 하지만, 열심히 살고 원하는 것을 이뤘지만 건강을 잃고 이룬 것 전부가 무용지물이 된 사람들도 많이 봤고, 그저 열심히 살아간다는 이유로 자신의 몸(체형)이 망가진 사람을 많이 봤습니다. 저 또한 사회생활을 해보고 살아가면서 나태해지고 관리를 게으르게 되면서 체형이 예전 같지가 않은데, 운동에 강제로라도 시간을 할애하면서 더 활력있는 삶을 가지는게 내년에도 제 1순위 목표입니다.
기술 공부
내년에는 데이터 엔지니어링과 관련된, 올해는 못다한 공부들을 해보고 싶습니다.
AWS를 활용하여 개인프로젝트도 만들어보고, 실제 업무에서도 클라우드 서비스를 다뤘으면 좋겠습니다.
더 자세히 말하면, 기술 스택으로는 docker와 k8s, airflow, hadoop,hive,spark,kafka를 공부하고 다루고 싶습니다.
아직까지는 모르는 지식이 너무 많아서 하나하나씩 목표를 세워서 늘 발전하는 사람이 되게끔 살아야겠습니다.
새로운 경험
새로운 경험이라하면 그저 일상에서 벗어난 경험을 해보고 싶은건가? 라는 생각도 많이 합니다.
'나는 정말 IT업계에서 일하는게 잘맞는걸까?'라는 고민부터 시작해서 '내가 경험해보지 못한 다양한 것들이 있지 않을까?' 라는 고민이 들기 시작하는 연차인 것 같습니다.
안봐도 비디오다 라는것은 반은 동의하고 반은 동의하지 않습니다.
세계 여행
나는 여행을 좋아하고 자주 갔었는데 국내여행에 비해 해외여행은 자주 못가봤습니다.
내년 부터는 시간을 꼭 비워서 해외여행을 가는 일정을 만드려고 합니다.
다들 새해복 많이 받으시고 건강하세요~!