목록전체 글 (105)
imhamburger 님의 블로그
아파치 에어플로우(Apache Airflow)는 간단하게 말하자면 데이터 파이프라인을 관리하는 플랫폼이다. 그래서 데이터 파이프라인이 뭔데?파이프라인을 한국어로 번역하면 배관이다. 배관은 한쪽 방향으로 흘러가는 구조이다. 데이터 파이프라인도 데이터가 차.례.대.로 전달해 나가는 구조이다. 구조 안을 살펴보면, 데이터가 어딘가로부터 들어오면 그것을 필요한 데이터만 추출하여 변환하고, 가공하고, 저장해 전달하는 과정이다.에어플로우는 이러한 데이터 파이프라인을 관리해주는 것이다. 아니 근데 굳이 쓸 필요가 있을까? 내가 관리하면되지~라고 생각했다면... 불가능한 것은 아니다. 예전 그리고 지금까지도 그렇게 하는 분들도 많이 계시다. 이런 상황이 있다.예를들어, 물이 흐르는 배관이 10개가 이어져있는 모습을 ..
pyenv는 virtualenv 를 제공한다. 이건 가상환경을 만들어 가상환경 안에서 여러 버전의 파이썬을 사용해 볼 수 있다.가상환경의 주요 특징은 철저히 '격리된 공간'이라는 것이다. 가상환경 안에서 어떤 패키지를 설치하였다고 가정해보자.그 패키지는 가상환경 안에서만 동작할 것이고, 해당 가상환경이 아닌 다른 곳에서 시도하면 오류가 날 것이다. 그리고 pyenv가 여러 버전의 파이썬을 사용하고 관리하는 툴이라는 건 지난 글에서 소개하였다. virtualenv에서도 당연히 설치한 특정 버전의 파이썬 버전을 이용할 수 있다. virtualenv를 사용하는 방법은 쉽다.$ pyenv virtualenv {사용할 파이썬 버전} {가상환경 이름}위의 코드를 사용한 예시를 보여주자면 pyenv virtualen..
nohup은 'no hangups'라는 의미로 영어에서 전화를 끊을 때 끊는다고 표현할 때 'hangup'이라는 단어를 사용하는데 'no hangup'은 '끊지 않는다.'라고 해석할 수 있다. nohup을 쓰면 쉘스크립트 파일(*.sh)을 데몬 형태로 실행시킬 수 있다. 따라서 터미널을 종료해도 명령어로 중단을 외치기 전까지 해당 파일이 실행된다. 가끔 오랜 시간이 걸리는 스크립트를 사용할 때 좋다.참고로 nohup을 사용하면 nohup.out 이라는 파일이 생성되는데 여기에 실행된 파일의 로그(기록)가 담긴다. 데몬(Daemon)이란?눈에 보이지 않지만 열심히 일하고 있는 형태를 리눅스에서 데몬이라고 부른다. 여기서 주의사항은 nohup으로 실행할 파일의 permission이 755 이상이여야 작동한..
pyenv 는 여러 버전의 파이썬을 실행 및 관리할 수 있는 프로그램이다. 파이썬은 가장 최근 버전을 사용하는게 좋은게 아닌가? 라고 생각할 수 있겠지만,회사에서 옛날 데이터를 다룰 때 구버전의 파이썬을 이용했다면 해당 버전으로 확인해야하기 때문에 여러 버전의 파이썬을 실행하고 관리할 수 있는 pyenv 가 있어야 한다.다양한 파이썬 버전으로 테스트해 볼 수 있다.다른 버전의 파이썬 프로젝트를 해야할 때 편리하다.최신 버전의 파이썬 기능을 써보고 싶을 때 테스트해 볼 수 있다. pyenv 설치는 깃허브에 올라와있는 공식문서를 확인하면 된다. 나는 맥이어서 brew install pyenv로 설치하였다.간혹, 아래 사진처럼 C Compiler 어쩌고저쩌고 에러가 날 수 있다.pyenv를 설치하기 전 os에..
개발을 할 때, 깃의 브랜치 기능을 활용한다면 같은 팀끼리 작업 프로젝트를 공유하고 같이 작업할 수 있다.혹은 혼자 어떤 기능을 만들어 테스트해보고 싶을 때 브랜치(Branch)를 사용하면 유용하다.(만약 브랜치없이 기능을 만들어 push했는데 해당 기능이 작동되지 않을 때 다시 원상보구시켜야 하는 수고를 거쳐야 한다. 심할 땐 어디서 잘못됐는지도 모를 수 있다...) Branch를 한국어로 번역하면 '가지'이듯이 메인(Main)으로부터 가지를 뻗어나가 작업을 수행한다. 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있다. 그리고 나중에 완료한 브랜치를 메인과 merge할 수 있다. 아니면 어떠한 이유로 내가 만들고 있는 기능이 필요없다면 그냥 브랜치만 없앨 수 있..
지난 7일동안 데이터 엔지니어링 부트캠프에서 가장 인상깊었던 배움은 Mysql을 이용해 데이터베이스를 만들고 그 안에 빈 테이블을 만들어 가공되지 않은 데이터를 테이블 안에 올바른 데이터 형식으로 insert 한 것이다. 마치 엑셀 형태처럼 말이다. Mysql을 이용해 데이터 파일을 가져올 때, LOAD DATA INFILE과 같은 명령문을 사용하여 파일을 로드해야하는데 사전에 파일을 로드해서 가져올 수 있는 위치를 제한시켜야 한다. 이는 무단으로 접근하거나 잠재적인 취약점을 방지하기 위함인데.. 아무나 내 파일을 보여줄 순 없으니까! 보안을 위해서 내 파일을 제한된 위치로 옮겨주는 작업을 해야한다. (안해주면 어차피 에러난다..) STEP. 1: 제한된 디렉토리를 나타내는 'secure_file_pri..
문제_SUDDEN 이라는 파일이 있을 때 "SUDDEN!!!"을 외친다. 그리고 3초 간격으로 실행된다. 없을 때는 "check" 를 외친다. 3초 간격으로 실행된다. 처음 내가 작성한 코드#!/bin/bashFILE=~/tmp/_SUDDENwhile truedo if [ -e "$FILE" ]; then echo "SUDDEN!!!" sleep 3 else echo "check" sleep 3 fidone 실행했을 때는 문제가 없어보이지만 이 코드는 잘못된 코드이다. 결론부터 말하자면, if문 안에 sleep 3 을 넣으면 CPU가 엄청 높아진다. 왜냐하면 전체적으로 봤을 때는 실행속도가 주어지지않아 계속해서 컴퓨터가 돌아가며 "SUDDEN!!!"이 나오는 것을..
brew install mysql #mysql 설치(맥북) 가지고 있는 외부서버(AWS, GCP 등)에 있는 데이터베이스를 내 로컬로 가져올 때는 터미널에 아래와 같이 입력한다.(나는 AWS서버를 이용하고 있어서 AWS서버를 예시로 해야겠다.) 여기서 잠깐, 파일이 너무 무겁다면 압축을 하여 보내는 것이 훨씬 편리하다. 압축방법은 간단하다.gzip {파일명} #압축ls -lh {파일명} #용량 확인하기 원격에서 로컬로 보내기AWS={외부 IP 주소} #AWS주소가 너무 길어 변수 선언scp -i {유저명}@{IP주소}:{전송할 파일 경로} {받을 경로}#예시scp -i abc.pem ubuntu@$AWS:~/test.txt .위 코드를 해석하자면, scp는 'source copy'이며 '-i {파일명...
깃을 처음 세팅하게 되면 master 라는 단어로 되어있다. master 라는 단어가 사회적으로 이슈가 있어서 (마스터 노예 관계? 뭐 이런거..) main 으로 바꿔 사용하는 것을 권장한다고 한다.바꾸는 방법은 간단하다. 아래 코드를 차례대로 입력해주면 된다.git config --global init.defaultBranch maingit init 본론으로 돌아와서.. 깃허브에 있는 내 코드를 외부서버(aws, gcp 등)에서 실행하고자 할 때 어느 위치에서 실행시킬지 정하고 그 위치 안에서 git clone {코드주소} 을 한다. git clone은 '복제한다' 라는 의미이다.그리고 새로 생긴 깃허브 위치에 들어간다. cd 명령어를 쓰면 된다. 그리고나서 유의해야할 점이 있다.만약 main에서 실행..
깃 commit(커밋)을 할 때 우리는 메세지를 입력해야 한다. 근데 입력하고나서 push(푸시)를 하기 전 입력한 메세지를 다시보니 오타가 있다면? 당황하지 말고 아래 명령어를 통해 수정하고 다시 push(푸시)를 하면 된다.git commit --amend 깃허브에 새로운 레포지토리(이하 '레포')를 만들고, main을 새로운 레포에 푸시하고, main으로부터 branch를 만들고 푸시를 하려는 데 다음과 같은 에러가 떴다.이는 깃허브에서만 레포를 만들고 로컬과 연결을 하지 않았기 때문에 나타나는 에러였다. 아래 코드를 통해 해결할 수 있었다.git remote add origin {새롭게 만든 레포지토리 주소} git push 갑자기 드는 의문: 근데 branch를 계속 만들다보면 용량이 엄청 커지..