목록분류 전체보기 (108)
imhamburger 님의 블로그
배열(Array) 배열은 연속적인 메모리에서 같은 종류의 아이템들을 저장할 수 있는 자료구조이다.배열에 1, 2, 3, 4, 5라는 숫자를 입력하고 컴퓨터 1개의 메모리공간이 1개의 사각형이라고 했을 때, 아래 그림처럼 표현할 수 있다. 연속된 메모리 블록에 저장되므로 인덱스를 통해 빠르게 접근이 가능한 장점이 있다. 그.런.데 저 5개의 메모리공간에 '6'이라는 숫자를 append 하려고 한다면?배열은 고정된 크기를 가지며, 나중에 크기를 늘릴 수 없다.만약 크기를 늘려야 한다면, 새로운 배열을 만들어 기존 데이터를 복사해야 한다. 아래 그림처럼 말이다. 이렇게되면 4개의 메모리공간이 남게되고, 메모리공간에 관하여 효율적이지 못한 단점도 있다. 따라서, 배열의 크기를 동적으로 관리하기 위해서는 ..
nGrinder는 네이버에서 개발한 오픈소스 성능 테스트 도구이다.예를들어, 내가 웹사이트를 만들었는데 이 웹사이트에 유저가 늘어나는 상황이라면 지연시간, 에러 발생 등이 일어날 수 있다. 이러한 상황말고도 다양한 상황들을 내가 시나리오를 짜고 그 시나리오를 nGrinder에서 간편하게 테스트해 볼 수 있다. nGrinder는 웹, API서버, 데이터베이스 등 다양한 시스템의 성능을 테스트할 때 유용하며 특히 대규모 서비스의 안정성을 검증하는 데 효과적이다. nGrinder 설치와 사용법은 공식문서를 확인하면 된다.참고로 nGrinder 실행 시 다른 포트번호로 실행시키고 싶다면 아래와 같이 --port {번호입력} 을 추가하면 된다.java -jar -Djava.io.tmpdir=${NGRINDER_H..
팀프로젝트가 끝나고 아파치 스파크(Apache Spark)를 배웠다.스파크는 빅데이터 처리를 위한 오픈 소스 분산 처리 시스템이다. 스파크 이전에 하둡이라는 기존 분산 처리 시스템이 있긴한데, 하둡보다 분산 처리 시스템이 빠르고 메모리 내에서 데이터를 처리하기 때문에 효율적인 실시간 데이터 처리도 가능하다. 분산 처리를 왜 써야하지?사실 데이터가 적다면 굳이 쓸 필요가 없을 것이다. 그런데 빅데이터의 경우 분산처리를 안한다면 방대한 양의 데이터를 처리하는데 시간이 엄~청 오래 걸릴 것이다. 예를들어,카페에서 커피를 100잔 만들어야된다고 가정해보자. 그리고 커피 1잔을 만드는 데 드는 시간을 1분이라고 할 때, 일하는 사람이 한 사람뿐이라면 100분을 투자해야 100잔을 만들 수 있다.그렇지만, 일하는 ..
1. Apache Zeppelin process died 오류 맥에서 Zeppelin을 start했는데 위와 같은 오류가 발생했다.위와 같은 오류가 발생하는 이유는 2가지이다.localhost:8080에 이미 무언가가 돌아가고 있거나설치한 자바의 JAVA_HOME 경로가 잘못되었거나나는 설치한 자바의 경로가 잘못되어 위의 오류 메세지가 떴다. 따라서, .zshrc 에 아래 코드를 추가해주니 해결할 수 있었다. (참고로 나는 jdk 17버전을 설치하였다.)export JAVA_HOME=/usr/local/opt/openjdk@17export PATH=$JAVA_HOME/bin:$PATH 자바를 설치하면 아래와 같은 설명이 나오는데 꼭 읽어보고 추가해줘야할 건 추가해주자. 다시 실행한 결과, + spark..
3일간의 팀프로젝트가 끝났다. 지난번에 팀프로젝트를 진행하면서 발생한 에러들을 기록해놨었는데 오늘도 2일차에 발생한 에러들을 이어서 정리해보려고 한다. 제 4 장: 파이썬 함수에 있는 변수는 Bash Command에 적용되지 않는다. 우리는 에어플로우가 실행될 때마다 같은 데이터가 누적되어 쌓이는 것이 아닌 멱등성을 고려해 데이터가 존재한다면 삭제한 후 Load하고 없다면 데이터를 삭제하지 않고 Load하는 방식으로 데이터 파이프라인을 설계하였다. 따라서 branch_fun이라는 함수를 만들어 조건문을 넣었고 BranchOperator에서 명령을 분리해준다. def branch_fun(ds_nodash): import os home_dir = os.path.expanduser("~") month=int(..
1. requests로 영화데이터 가져오기 사전에 영화진흥위원회에 가입하여 Key를 발급받아야 한다.import requestsimport osimport pandas as pd#영화진흥위원회에서 정해진 REST 방식을 이용하여 url 요청형식 맞추기def gen_url(dt="20120101", url_param={}): base_url = "http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json" key = get_key() url = f"{base_url}?key={key}&targetDt={dt}" for key, value in url_param.items()..
7월 한달동안 배운 내용들이 참 많다. 터미널을 다루는 것부터 vim, bash, 깃&깃허브, pyenv, pdm, Airflow, sql, pandas 등..초기엔 vim과 깃&깃허브 다루는 것에 집중하였다면 지금은 간단한 기능도 만들고 배포하고 써보고하는 등 간단한 것이지만 무언가를 만들 수 있다는게 조금은 신기하다. 그리고 실제로 만들어야 하는... 팀프로젝트가 시작되었다. 8월 2일 금요일부터 첫 팀프로젝트를 시작하였다. 프로젝트를 완성하는데 주어진 시간은 3일이다.팀구성은 3인 1조인데 우리의 팀이름은 "play gogo" 로 정했다. (이유는 딱히 없다..) 팀프로젝트 과제는 영화 박스오피스 데이터 수집 / 처리 / 보관 및 활용이었고 필수적으로 해야하는 건 다음과 같다.영화 박스오피스 데이터..
파이썬의 requests 는 HTTP 요청을 보내고 응답을 받는 데 사용되는 라이브러리이다. HTTP뿐만 아니라 GET, POST, PUT, DELETE 등을 지원한다. 예를들어, 내가 외부데이터를 가져다가 쓰고싶을 때 requests를 이용하면 된다. (공식문서)참고로 requests는 파이썬 내장 모듈이 아니기때문에 설치를 해줘야한다. 설치방법은 다음과 같다.pip install requestspdm install requests #pdm 가상환경에서 설치할 때 GET 요청import requestsurl = "{GET 요청을 보낼 url}"r = requests.get(url)#optioncheck = r.status_code #status_code가 200을 출력하면 True 값이니 오류가 없다는..
1. max_active_runs 와 max_active_tasks에어플로우에선 다양한 옵션을 제공하는 데 그중 max_active 옵션이 있다. max_active_runs : 최대 몇개의 실행을 활성화할지max_active_tasks : 최대 몇개의 task를 활성화할지 지정해줄 수 있다.with DAG( 'movie', default_args={ 'depends_on_past': False, 'retries': 1, 'retry_delay': timedelta(seconds=3), }, max_active_runs=1, max_active_tasks=3, description='hello world DAG', schedul..
에어플로우에는 다양한 오퍼레이터를 제공한다. 이번엔 지난글에서 다룬 BashOperator말고 PythonOperator를 다뤄보자. 1. PythonOperatorfrom airflow.operators.python import PythonOperatordef print_context(ds=None, **kwargs): print("::group::All kwargs") task = PythonOperator( task_id="print_the_context", python_callable=print_context )PythonOperator는 Dags에 Python 함수(내가 만든 기능)를 입력하고 task 에서 py..