본문 바로가기

엔지니어링13

MySQL [Stored Procedure & EVENT Scheduler] "데이터베이스 내부에 여러 테이블 생성과 트랜잭션 실행 등 작업을 매일 배치성으로 진행할 수 없을까?" 라는 고민에서 해당 작업을 시작하였다. 1. Cron과 Airflow 를 통해 SQL 을 배치성으로 수행하기 2. 데이터베이스가 제공하는 배치 기능을 통해 배치성으로 수행하기 여기서 2번을 선택하였다. 이유는 데이터베이스 내부의 테이블 생성, 변경, 삭제 등의 작업은 데이터베이스 자체적으로 관리하려했기 때문이다. 1번처럼 다른 도구의 스케줄링과 SQL 을 연결할 수 있지만 관리가 점점 어려워지고 있음을 느꼈다. 그래서 여러 스케줄링 작업이 있다고 해도, 각 목적에 맞는 프로그램을 사용하는게 관리하기 더 용이하다고 생각한다. - 젠킨스 : CI/CD 등 인프라 작업 - AIrflow : 데이터 E,T,L.. 2022. 12. 29.
[Python] requests text 와 content 차이 Python 에서 크롤링을 진행할 때는 requests 라는 라이브러리를 줄곳 이용하곤 한다. http API 가 표현해야하는 url, param, header 등 관련 속성을 다양하게 표현할 수 있기 때문에 편리하다. HTML 언어로 작성되어 있는 웹 페이지 혹은 API 의 결과값을 받을 때 requests 객체 안에 text 와 content 를 사용합니다. 두 반환 값을 언제 다르게 사용하는지 궁금하여 찾아보았습니다. https://requests.readthedocs.io/en/latest/user/quickstart/#response-content text : 문자열 인코딩이 적용된 문자열이다. 이는 http 헤더를 기반으로 응답한 객체의 인코딩 정보를 추측(guesses)해서 인코딩합니다. -.. 2022. 12. 28.
AWS CloudWatch 를 통한 서버 메트릭, 로그 관리 하기 (기초) AWS 에는 다양한 서비스들이 제공되고 있습니다. EC2, ECB, Lambda 처럼 컴퓨팅 서비스가 있고, SQS, S3 처럼 저장소와 관련된 서비스가 있습니다. 서비스가 정상적으로 작동하고 있는지, 어느 정도의 성능을 내고 있는지를 확인하기 위해서 각 서비스가 제공하고 있는 모니터링 기능을 이용할 수 있지만 AWS 의 CloudWatch 를 이용하면 간단하게 여러 서비스들을 하나의 로그가 나오도록 묶을 수도 있습니다. 우선 모니터링을 할땐 어떤 요소들을 고려해야할까요? 단순히 모니터링을 진행하려고한다면 갑자기 헷갈릴 수 있습니다. 서비스에서 제공하는 로그들을 보는건지, 아니면 시스템의 메모리 혹은 CPU 사용량을 봐야하는지 헷갈릴 수 있습니다. 모니터링을 시작할 때 아래의 4 가지를 기준으로 어떤 부.. 2022. 11. 23.
AWS 와 GCP 에서 Docker 기반 인스턴스의 네트워크 차이(Compute Engine / EC2 ) - 포트포워딩 클라우드에서 제공하는 다양한 컴퓨팅 서비스들 중 가장 기본적인 서비스를 고르자면 GCP 의 VM 과 AWS EC2 가 있습니다. 두 서비스 모두 Docker 기반으로 인스턴스를 생성하는 서비스를 제공하고 있는데, 외부에서 접근하려고 할 때 포트를 어떻게 개방해야하는지 알아보았습니다. GCP Compute Engine / VM 참고 : https://cloud.google.com/compute/docs/containers/configuring-options-to-run-containers?hl=ko#publishing_container_ports GCP 간단합니다. Docker Container 에서 사용하는 네트워크 스택이 Host VM 의 네트워크 스택을 그대로 이용합니다. Docker Network .. 2022. 11. 8.
DataFrame을 압축하는 형태({‘snappy’, ‘gzip’, ‘brotli’ ) 알아보기 - Parquet 와는 어떻게 다를까? 틀린점이 있을 수 있습니다. 배경 ETL 작업을 진행하고 있었다. Raw 데이터는 Parquet 로 변환하는 작업을 진행 중이고, 사용하는 파이썬 라이브러리는 Pandas 이다. Pandas 에서는 DataFrame 을 Parquet 로 변환하는 to_parquet 함수를 제공한다. to_parquet 는 3가지 Compression 방식을 옵션으로 제공한다. ... Parquet 는 압축이 아닌걸까? 우선 첫 번째로 헷갈렸던 내용은 “Parquet 도 압축 방식이 아닌건가?” 였다. Parquet 에 대해서 인터넷의 글들을 읽어보면서 Parquet 가 압축방식인지 헷갈렸었다. 왜냐하면, 아래의 그림처럼 Parquet 가 CSV 보다 파일 사이즈를 많이 줄인다라는 글들이 너무 많았다. 그래서 Parque.. 2022. 6. 6.
같은 스키마를 가진 파일들 안에서 여러개의 Athena 테이블이 만들어질 때 문제의 배경 테이블을 만드는 방식은 Glue Crawler를 이용하였는데, Glue Cralwer 를 통해서 테이블을 생성했을 때 하나의 스키마로 인지할 줄 알았던 폴더구조가 두 개로 인지했다. 예를 들어, A라는 버켓에 아래 두개의 Parquet 파일이 있고 두개의 Parquet 파일이 동일한 스키마를 지니고 있다고 했을 때, A/2022/01/10/a.parquet A/2021/01/10/b.parquet 예상 결과 : Glue Cralwer 가 크롤링 한 후 A 라는 테이블이 생성되고, 두개의 파일이 투영되는 것을 예상하였다. 실제 결과 : 2022,2021 라는 이름의 두 개의 테이블이 계속생성되었다 문제 해결 방식(테이블 임시 생성 후 파일 이동) 1. A/2021/01/10/b.parquet .. 2022. 5. 17.
리눅스 grep 명령어 보통 두 가지 상황에서 grep 을 사용합니다. 파일 내 특정 단어를 포함한 행을 찾으려고 할 때 표준 출력에서 특정 단어를 포함한 행을 찾으려고 할때 특정 단어와 일치하는 행을 찾을 수도 있고, 정규식과 일치하는 행을 찾을 수도 있습니다. 🔔 grep 의 결과는 행을 찾는 것입니다. 예를 들어, 스트림 형태의 json은 한줄로 이루어진 형태이기 때문에 grep 으로 원하는 결과를 찾기 어려울 수 있습니다. grep 의 사용법은 다음과 같습니다. $ grep [옵션] [패턴] [파일 혹은 표준출력] 문자열과 일치하는 행을 찾는 방법 $ grep hello 파일명 는 파일에 hello 라고 표현되는 행을 찾습니다. $ grep hello 파일명1 파일명2 이렇게 두개의 파일을 대상으로 사용할 수 있습니다... 2022. 5. 4.
리눅스 SED 명령어 데이터 엔지니어링을 하다보면, 문자열 파싱을 이용해야할 때가 많다. Java 나 Python 을 이용할 수도 있지만 해당 언어가 설치되지 않은 인스턴스일 수 있다. 리눅스 기반의 인스턴스를 많이 이용하다보니 쉘 명령어로 작동하는 sed 라는 프로그램을 이용하면 텍스트 파일의 문자를 변경하는데 많은 도움을 준다. SED 란? (Streamlined EDitor) sed 도 프로그램이다. 문자열을 다루는 프로그램이다. 문자열을 찾거나, 치환하기 위해 사용한다. 텍스트 에디터를 사용해도 되지만 sed 도구를 통해 쉘 스크립트나 명령을 통해 문자열 작업을 진행할 수 있다. SED 작동방식 (1) input 파일을 한 라인당 한번에 읽습니다. (2) 각 라인은 패턴 스페이스(Pattern Space)라는 버퍼에 .. 2022. 5. 4.
아테나(Athena)의 데이터베이스와 Glue Data Catalog 데이터베이스의 차이 AWS 기반 데이터 파이프라인을 진행한다면 제일 많이 보는 것이 S3 에 데이터를 저장하고 Ahtena 로 검색을 진행하는 것이다. 그 중에서도 이 글은 Glue Data Catalog 와 Athena 데이터베이스의 차이에 대해 설명하고자 작성하는 글이다. 왜냐하면 나도 헷갈렸기 때문이다... 좀 더 자세하게 말하자면 아래의 의문에서 해당 포스팅을 시작하였다. “Glue 에도 Data Catalog 가 있고, Data Catalog 에 Database 가 있는데 Ahtena 에서 선택하는 Database 와 같은건가..? 이 의문을 해결하기 위해 아래의 순서로 공부하였다. 1. Ahtena 는 무엇인가? 1.1 Ahtena 는 언제 필요할까 2. AWS Glue 에서 하는 일은 무엇일까 2.1 AWS G.. 2022. 5. 4.
파일 시스템 알아보기 파일 시스템을 왜 알아보려고 했을까요? MySQL 아키텍처를 보면 하단에 File system(파일 시스템) 으로 표현된 부분이 있습니다. 옆에 있는 Files & Logs 와 연결해서 생각해보면, 아래와 같이 해석이 가능합니다. 데이터베이스를 사용할 때 저장되는 데이터는 파일과 로그(Files & Logs) 가 있다. 파일을 저장할 때 사용하는 파일 시스템은 NTFS, ufs, ext12/3, NFS, SAN, NAS 등을 사용할 수 있다. 여기서 파일 시스템은 무엇일까요? 단순하게 "파일을 저장하는 방식이 나누어져 있다."로만 생각했었는데 이 포스팅을 통해서 조금만 더 자세하게 생각해보려합니다. 해당 포스팅은 "파일시스템1 파일시스템의 이해" 라는 글과 위키 백과의 파일 시스템을 읽으면서 작성하였습니.. 2022. 4. 15.
Python class 변수 , 인스턴스 변수 class 변수 , 인스턴스 변수 참고 : http://pythonstudy.xyz/python/article/19-%ED%81%B4%EB%9E%98%EC%8A%A4 class Rectangle: count = 0 # 클래스 변수 # 초기자(initializer) def __init__(self, width, height): # self.* : 인스턴스변수 self.width = width self.height = height Rectangle.count += 1 # 메서드 def calcArea(self): area = self.width * self.height return area 클래스 변수 : 클래스 하나가 공통으로 사용하는 변수 인스턴스 변수 : 각 인스턴스가 개별적으로 생성해서 사용하는 변수 2022. 4. 5.
ORM 간단하게 알아보기 ORM (Object_Relational Mapper) 장점 현재 사용하고 있는 언어만 사용해도 됨 데이터베이스 시스템으로부터 분리가 됨 직접 작성하는 SQL 쿼리문이 없고 더 높은 성능의 SQL 쿼리문을 작성할 수 있습니다. 단점 데이터베이스와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해질 수 있습니다. 내부 작동에 대한 충분한 이해가 없는 경우 해결이 힘들 수 있습니다. 데이터베이스에 직접 쿼리문을 보내는 것이 아니기 떄문에 성능 저하가 발생합니다. SQLAlchemy (ORM 의 기능을 제공하는 Python 라이브러리) Core 데이터베이스와 상호작용 엔진 from sqlalchemy import create_engine engine = create_engine("데이터베이스 주소") #e.. 2022. 4. 5.
google Sheet에 Github Repo 정보 가져오기 google Sheet에 Github Repo 정보 가져오기 Import GitHub Data to Google Sheets 의 글을 따라 시도해보았습니다. Import GitHub Data to Google Sheets 따라하기 예제는 https://github.com/octocat/Hello-World/ 의 데이터를 사용 업무에서 사용하는 레포지토리와 다른 점 업무에서 활용하는 레포지토리는 Private로 되어 있음 Priavte 는 권한작업을 해줘야 할 것임 세 가지 정보를 수집해보겠음 Repository Pull Request Commit Messages in Pull Request Raw Data related with Commit Step 1) 빈 구글 시트 생성 Step 2) Google S.. 2022. 4. 5.