본문 바로가기
반응형

분류 전체보기135

[Docker, GCP] docker push to artifact registry error 발생 및 해결 GCP Artifact Registry에 repo를 생성후 이미지를 push 하려고 하는데 다음과 같은 에러가 계속 발생했다. denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/{project_name}/locations/asia-northeast3/repositories/{repo_name}" (or it may not exist) 처음에는 권한이나 프로젝트가 cli 에 제대로 설정되어 있지 않아서 생기는 문제인 줄 알았다. 하지만 나의 gcloud auth에 repo의 hostname 이 제대로 설정되어 있지 않아서 생기는 문제였다. 다음과 같이 gcloud auth에 repo.. 2022. 8. 8.
Scraper 을 통해 실습해본 Go와 Python 의 성능 테스트 노마드 코더의 강의를 들으면서 Go Scraper를 실습해보았다. 무료 강의여서 부담없이 Go 를 체험(?) 해볼 수 있었다. 확실히 매력적인 언어였다. 멀티코어를 GO의 Channel을 이용해서 Goroutine으로 구현했더니 파이썬의 multiprocessing 을 이용한 것보다 엄청나게 빠른 속도를 보여주었다..ㄷㄷ 예제코드를 깃헙에 올려두었다. 파이썬 scraper 코드와 Goroutine을 사용해서 만든 scraper 코드 모두 올려두었다. https://github.com/HWALIMLEE/go-project/tree/main/job_scraper/goroutine GitHub - HWALIMLEE/go-project: go 를 공부하기 위한 repo go 를 공부하기 위한 repo. Cont.. 2022. 7. 24.
[Docker] 도커 내부에서 localhost 요청하기 | LIM 로컬에서 redis를 6379 번 포트로 띄우고 도커에서 그 redis로 읽고 쓰는 작업을 하려 했다. redis_connection = RedisConnection('127.0.0.1', '0') 이 코드를 이용하여 도커에서 redis를 접속하려고 했으나 다음과 같은 에러가 발생했다. File "/opt/venv/lib/python3.9/site-packages/redis/connection.py", line 617, in connect raise ConnectionError(self._error_message(e)) redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused. 도커 컨테이너에서 .. 2022. 7. 19.
[Airflow] Branch를 이용해 상황에 맞는 task 실행(BranchPythonOperator) | LIM Airflow 내에서 이전 작업의 결과에 따라서 다음 작업이 달라야 할 때 Branch 를 통해 나눌 수 있다. 예를 들어서 조회하고자 하는 connection 이 있는 경우 -> 기존 값을 업데이트 connection 이 없는 경우 -> 새롭게 생성 나같은 경우 이렇게 사용하였다. 보통 데이터를 처리할 때 데이터가 있으면 전처리 수행, 없으면 가져오기 이렇게 많이들 사용하는 것 같다. 하지만 현재는 팀내에서 connection을 관리하는게 주 목적이어서 connection 관리를 위한 목적으로 BranchPythonOperator를 사용했다. 예시코드를 보자. 다음코드는 from airflow import DAG from airflow.decorators import task from airflow.o.. 2022. 7. 19.
[Python] 코루틴으로 짜여있지 않은 함수 비동기적으로 이용하기(feat.run_in_executor) | LIM 파이썬에서 비동기 처리를 할 때 await 뒤에 오는 함수 역시 코루틴으로 작성되어 있어야 비동기적인 작업이 가능하다. 비동기로 짜여져 있는 라이브러리도 있으나 보통은 비동기를 고려하지 않고 짜여진 라이브러리가 대부분이다. 그럴 때 event loop 의 run_in_executor 함수를 이용하면 동기적인 함수를 비동기적으로 이용할 수 있다. ✔️ 먼저, asyncio.get_event_loop()를 활용해서 현재 이벤트 루프를 받아온 후 이벤트 루프의 run_in_executor 를 사용한다. run_in_executor는 다음과 같이 정의되어 있다. def run_in_executor(self, executor, func, *args): self._check_closed() if self._debu.. 2022. 7. 14.
[MySQL] null vs 0 group by avg 차이 | LIM mysql에서 group by 를 통해 평균을 구해야할 일이 생겼다. 문제는 원하지 않은 값, 즉 0 이 들어와서 평균을 깎아먹고 있었던 것이다. 예를들어서 테이블을 통해 살펴보자 이 테이블에서 height 즉 키는 다 있으므로 6명의 평균을 다 구하고 싶었고, weight는 있는 사람들 것에 대한 평균만 내고 싶었다. 하지만 이렇게 weight를 적지 않은 사람들의 몸무게를 0으로 두고 평균을 냈을 때 다음과 같은 결과가 나온다. 즉 평균 키는 구해졌지만 평균 몸무게가 0으로 적은 사람들 때문에 원하지 않는 평균 무게가 나왔다. 이를 방지하기 위해서는 몸무게를 적지 않은 사람들의 몸무게를 0 이 아닌 null 로 변경해주면 된다. 이렇게 null로 두고 평균을 구하면 키는 6명의 평균키, 몸무게는 4명.. 2022. 7. 12.
반응형