Welcome! 🙋‍♂️ View more

분류 전체보기 44

[Airflow] Docker를 활용한 Airflow 구축

필자는 개인 프로젝트를 진행하며, Airflow를 통한 워크플로우 자동화를 구축했다. https://github.com/DeepFlame-JR/Stock_and_Forum GitHub - DeepFlame-JR/Stock_and_Forum: 주식 가격과 네이버 종목토론방의 내용을 시간별로 수집주식 가격과 네이버 종목토론방의 내용을 시간별로 수집. Contribute to DeepFlame-JR/Stock_and_Forum development by creating an account on GitHub.github.com 어느 날, 모든 작업을 수행한 Task가 계속 Running 상태로 남아있었다.구글링을 해보니, 한 작업에서 많은 리소스를 사용하게 되면 위와 같이 되는 버그가 있는 것을 확인했다.한 T..

[Docker] Docker-Compose에서 같은 이미지로 여러 컨테이너 생성하기

🤔 문제 상황 # docker-compose.yaml version: '2' services: app01: image: app app02: image: app app03: image: app app04: image: app app05: image: app 위와 같이 같은 이미지에 대해서 다중의 컨테이너를 생성해야할 때, 위와 같은 비효율적인 파일이 생성된다. 만약 이미지별로 많은 설정들이 있다면 더욱더 복잡해질 것이다. 😀 해결 docker-compose up -d --scale app=5 docker-compose 파일을 빌드할 때 설정값을 수정하면 간단히 해결할 수 있다! 필자의 경우, 같은 airflow-worker 이미지에서 복수의 컨테이너를 생성해야해서 사용하게 되었다. 출처 https://st..

[프로그래머스/Python] 경주로 건설

https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 🤔 문제. (0,0)에 있는 자동차가 (n-1,n-1)로 이동하는 데 드는 최소 비용을..

첫 번째 토이 프로젝트 회고 (방탈출 취소 자리 찾기) (feat. AWS EC2, 웹크롤링, node.js)

나의 첫번째 토이 프로젝트가 끝났다. 그에 따라 프로젝트 주제 선정과 프로젝트를 진행하면서 고민했던 부분을 회고해보고자 한다. 🙋‍♂️ 목차는 아래와 같다. 주제 정하기 웹 정보 크롤링 웹 서버 만들기 AWS EC2를 활용하여 서비스 구축 마무리 1. 주제 정하기 토이 프로젝트란 무엇인가... 🤔 토이 프로젝트란 거창한 프로젝트가 아니라 장난감(토이)를 가지고 놀 듯 흥미 위주의 프로젝트를 진행하는 것으로 생각하면된다. 나의 경우, 평소에 불편했던 점 또는 이런 서비스가 있으면 참 좋을텐데... 라는 생각으로 접근했다. 방탈출 취소 자리 찾기! 그래서 생각한 것이 방탈출 취소 자리 찾기이다. 홍대 디코더의 Tempo Rubato의 경우, 1년간 예약이 꽉 차있다. 1년 뒤 열리는 자리를 예약하는 것보다 ..

[Python] logging 사용법과 클래스화

Python에는 print라는 기능이 있다. 보통은 이 기능을 통해서 output을 확인한다. 그러나 print로는 output을 확인할 수 없는 경우가 있다. 필자는  airflow의 에러 로그가 print로는 확인되지 않아 logging 모듈을 활용했다. logging에서는 print보다 좀 더 다양한 기능을 제공하니, 한 번 알아보도록 하자! 😀 1. logging 모듈먼저 logging 모듈에 대해서 알아보자 1. log 출력 기준 log가 출력되는 기준을 설정합니다.출력 기준을 ERROR로 두게 된다면 그 아래 수준인 DEBUG/INFO/WARNING을 출력되지 않는다. 2. log 출력 형식asctime: 일자를 나타냅니다.levelname: 출력 수준을 나타냅니다.message: 출력 내용..

[Algorithm] 정렬 알고리즘 간단 정리와 Python 구현 (버블정렬, 선택정렬, 퀵정렬, 병합정렬, 힙정렬)

데이터 베이스는 이론상 무한 개의 데이터를 다룰 수 있어야 하기 때문에, 수많은 데이터를 얼마나 빠르게 정렬하는 가는 중요한 문제이다. 🤔 그렇다면 왜 데이터는 정렬되어 있어야할까? 간단히 말하자면 탐색을 위해서 이다. 정렬되어 있지 않은 데이터에서는 순차 탐색(O(N)) 밖에 사용할 수 없으나, 데이터가 정렬되어 있다면 이진 탐색(O(logN))이라는 알고리즘을 활용할 수 있다. 삽입/삭제가 자주 일어나는 데이터의 경우 정렬에 더 많이 시간이 들어감으로 순차 탐색을 사용하는 경우도 있지만, 보통의 경우는 데이터를 조회하는 경우가 훨씬 많다. 그리고 조회에 필요한 것이 검색(탐색)이다. 1. 버블 정렬 최댓값을 우선적으로 정렬하는 알고리즘이다. 👉 동작 방식 0부터 N-1까지 탐색하면서 인접한 칸과 비교..

[MongoDB] Timezone(타임존) 문제와 해결 (feat.Python)

Mongo DB는 Time zone이 UTC로 고정되어 있다. 따라서 Mongo DB에서 데이터를 불러올 때, Date 형식의 변수 값이 다를 수 있다. 필자의 경우, pymongo를 통해 데이터를 입력할 때는 정상적으로 되었으나, 추후 Spark를 통해 데이터를 읽어왔을 때 문제가 생겼다. 🤔 문제 필자는 네이버 종목토론방의 정보를 다루는 중이라서 이를 예시로 들겠다. 살펴보면 시간대가 9시간이 차이나는 것을 알 수 있다. 🤔 이러면 Date로 필터링할 때, 엄청난 혼선을 겪을 수 있다. 필자가 그랬다... 생각해보면 Pyspark에서 불러올 때 MongoDB의 시간대는 UTC이고, Pycharm 환경의 시간대는 한국(UTC+9)임으로 자동으로 9시간을 더한 것 같다. 그래서 이를 해결하기 위해서 이것..

Engineering 💻/DB 2022.02.19

[Spark] Exception while deleting Spark temp dir 에러 해결

Python에서 Spark을 실행할 때, 아래 에러가 나타났다. 살펴보니 Spark를 실행하는 동안 %Temp% 폴더에 폴더를 생성하는데, 그것을 지울 수 없다는 내용이다. 💡 우선 방법은 있다. %SPARK_HOME%\conf 폴더에 log4j.properties 파일을 수정하는 것이다. 만약 경로에 해당 파일이 없다면 log4j.properties.template를 복사하여 뒤에 .template를 지워주고, 만들어준다. 그리고 메모장으로 해당 파일을 열어 아래 명령어를 입력하고, 저장한다. log4j.logger.org.apache.spark.util.ShutdownHookManager=OFF log4j.logger.org.apache.spark.SparkEnv=ERROR 그러면 Python에서 S..

[Python] 참조한 모듈이 다른 모듈을 참조할 수 없는 경우 해결 (다른 모듈 참조하기)

파이썬으로 프로그램을 짤 때, 다른 모듈의 클래스나 함수를 사용하고 싶을 때가 있을 것이다. 필자 역시 그러했고, 그렇게 프로그램을 제작하고 있었다. 그러나 프로젝트의 구조를 바꾸고 나니, 제대로 동작하지 않는 경우가 있었다. 아래 경우를 살펴보자. 😫. 문제 상황 여기서 file1.py가 file2.py 모듈을 사용하기 위해서는 어떻게 해야할까? 여기에 대한 해답은 많은 곳에서 나와있다. 아래와 같이 해결하면 된다. # file2.py class Class2: def __init__(self): print('This is class in Class2') # file1.py # 상위 폴더를 참조할 수 있도록 설정한다. import sys, os sys.path.append(os.path.dirname(o..

[Python] 크롤링 방법과 비교 (requests, BeautifulSoup, selenium)

Python에서 웹 크롤링을 하는 방법은 두 가지가 있다. requests 라이브러리로 웹 정보를 받고, BeautifulSoup로 파싱한다. selenium 라이브러리로 브라우저를 열어 웹 정보를 받는다.  보통 웹 컨트롤이 필요할 경우(클릭)에는 selenium을 활용하고, 그렇지 않다면 requests 방법을 이용하는 것이 일반적이다. 왜냐하면 selenium은 웹 브라우저를 여는 과정에서 많은 시간이 소요되기 때문에 비교적 속도가 빠른 requests가 좀 더 유리하기 때문이다.  🤔 궁금한 것그렇다면.... 만약 웹 컨트롤이 필요해서 selenium을 통해 웹 브라우저를 열어놓은 상태에서 웹 정보를 어떻게 가져오는 게 더 빠를까? 이번에는 그것을 알아볼 것이다.  👀 실험 준비이번에 크롤링할..

반응형