일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리챌린지
- aws ec2
- logstash
- 논리삭제
- hard delete
- docker
- nginx
- soft delete
- ci/cd
- NoSQL
- Locust
- JWT
- node exporter
- prometheus
- 로그 백업
- Next.js
- AWS
- unique constraint
- Django
- elasticsearch
- 오블완
- 계정 관리
- grafana
- hive
- 물리삭제
- redis
- slack
- DAG
- Airflow
- Hadoop
- Today
- Total
목록전체 글 (19)
먹수의 개발일지
Intro유저의 승인 상태 값이 변경(ex.승인대기중 → 승인)되었을때 자동으로 유저에게 승인 완료 메일이 날아가도록 구현하기 위해 사용했다. 임시적으로 django Admin에서 유저의 값을 변경했을 때 해당 기능이 실행되도록 구현해야 했기 때문에, view에서 처리할 수는 없었다. signal이란Django 공식문서 Django includes a “signal dispatcher” which helps decoupled applications get notified when actions occur elsewhere in the framework.Signal은 분리된 어플리케이션의 작업이 발생했음을 알려주고 처리할 수 있는 기능이다. Django signal은 DB 에 값이 저장 직전(pre_sav..
IntroHDFS 명령어로 디렉토리를 생성, 삭제하고 파일을 삭제, 복사, 다운로드, 출력하는 명령어를 정리해보자. 디렉토리 관리디렉토리 생성 및 조회hdfs dfs -mkdir [디렉터리 명]hdfs dfs -ls / #생성된 전체 디렉토리 리스트 확인hdfs dfs -ls /user #user 디렉토리의 하위 폴더 및 파일들 확인 디렉토리/파일 삭제-f : 진단 메시지를 보이지 않거나, 파일이 존재 하지 않을 경우 에러를 나타내기 위한 exist status 를 수정한다.-r : 컨텐츠와 디렉터리를 recursive 하게 삭제한다.hdfs dfs -rm -r [directory path] #hdfs dfs rmdir [directory path]와 동일하게 사용 가능하다.hdfs dfs -rm ..
Intro Django API의 요청 수, 응답 시간 등을 수집하고 시각화하여 모니터링 하기 위해 django prometheus, Grafana를 사용하고자 했다.django-prometheus는 Django 애플리케이션에서 쉽게 Prometheus 메트릭을 수집할 수 있도록 설정을 제공한다.수집된 메트릭은 Prometheus로 전송되며, Prometheus와 Grafana는 쉽게 연동되어 메트릭 데이터를 시각화할 수 있다. Prometheus + Grafana dockerdjango가 돌아가지 않는 별도의 서버에 아래 docker 구성으로 Prometheus와 Grafana를 서비스를 띄워준다. version: "3.8"networks: monitoring: driver: bridgeser..
IntroAirflow DAG를 실행시 실패 혹은 성공했을 때 알림을 받고자 했다.Slack webhook url은 https://api.slack.com/apps 해당 사이트에서 Create New APP을 통해 새로 생성하거나 기존 webhook url을 확인할 수 있다.Airflow Callback 작성dags 폴더 구조는 아래와 같다.dags├── plugins│ └── slack.py└── test.py Airflow에서 Callback 종류 *context로 전달되는 매개변수 정보 on_success_callbackTask 성공 시 호출된다.on_failure_callbackTask 실패 시 호출된다.sla_miss_callbackTask가 정해진 SLA를 충족하지 못할 때 호출된다.o..
#Dag 테스트airflow dags test DAG_NAME YYYY-MM-DD#Task 테스트airflow tasks test DAG_NAME TASK_NAME YYYY-MM-DDDebug interactively with dag.test()디버깅 환경 구축이 필요한 이유DAG에 코드를 작성하고 디버깅하는 과정에서 매번 schedule로 실행하여 확인할 수는 없다. Airflow scheduler에서 실행하지 않고 DAG를 vs code와 같은 에디터에서 빠르게 디버깅하고 테스트할 수 있는 방법을 알아보자.- Airflow 2.8.0 in docker container- IDE : VS Code Dag 파일에 test 설정아래와 같이 dag.test()를 추가해준다.if __name__ == "__..
Soft Delete란? DB 테이블에서 특정 row를 삭제 처리할 때, delete를 사용하지 않고 삭제 여부 혹은 삭제 시점 칼럼을 활용하여 flag 체크하는 방식이다. 반대되는 개념으로는 테이블에서 row를 delete하는 Hard Delete가 있다. Hard Delete의 경우 직접 삭제하기 때문에 별도의 audit table을 관리해줘야 한다. Soft Delete와 unique Constraint 로 인한 문제 회사에서 Soft Delete로 구현된 테이블을 작업하던 중 문제가 발생했다. 특정 시설물들을 관리하는 테이블에서 시설물을 Soft Delete한 후, 삭제된 것과 동일한 코드(unique 제약이 적용된 칼럼)를 가진 시설물 추가에 실패하게 되었다. 삭제 상태로 변경된 기존 시설물 코..
클러스터 구축 방향 및 환경 일반적으로 다수의 컴퓨터로 하둡 클러스터를 구성하지만 다수의 컴퓨터를 보유하여 진행하기 어렵기 때문에, 하나의 컴퓨터에서 docker를 활용하여 클러스터를 구성하려고 한다. 로컬 환경 : Mac OS Docker OS : Ubutu 22.04 Hadoop 3.3.6 NameNode 1개, DataNode 3개 Ubuntu에 Hadoop 설치를 위한 환경 세팅 Docker를 통한 Ubuntu 이미지 다운로드 및 container 생성 사용할 Ubuntu 버전의 이미지를 다운로드 및 실행한다. $ docker run ubuntu:22.04 만약 다운받은 이미지를 원하는 이름으로 다시 만들고 싶거나 새로운 container를 만들고 싶다면 아래와 같이 이름(ubuntu)로 지정하여..
프로젝트 Django Rest Framework Django-restframework-jwt (최근에는 djangorestframework-simplejwt 를 권장하고 있다.) 문제 DRF로 REST API를 구현하던 당시에, 프론트 쪽에서 로그인이 필요 없는 상품 리스트 조회 API에서 401 에러가 발생하였다는 이야기를 전달 받았다. 해당 API는 인증을 거치지 않도록 구현했는데 위의 문제가 발생하여 원인을 파악하고자 했다. 우선 프론트쪽에서는 발생한 401 에러는 token이 expired된 상태에서 header에 가지고 있는 상태에서 api를 요청한 상황이었다. 인증이 필요 없는 api에서 인증되지 않은 header 값이 있다고 하더라도 무시하고 response를 주는 것이 맞기 때문에 인증 부..
회사에서 React와 Next.js 프로젝트 배포를 맡게 되었다. 다양한 배포 방법이 있겠지만, React는 build 파일 경로를 연결하는 방식, Next.js는 pm2를 활용한 방식을 사용했다. 각 프로젝트는 추후에 다른 인스턴스에 각각 분리하여 배포했지만( 서버1: Nginx & React, 서버2 : Next.js ) 이번 포스팅에서는 하나의 서버에 Nginx + 하나의 프로젝트(React or Next.js)만 배포하는 방법을 작성하고자 한다! 목차 EC2 환경 세팅 (Git, Node) React 프로젝트 빌드 Next.js 프로젝트 빌드 및 무중단 배포 Nginx 설치 및 배포 1. EC2 환경 세팅 (Git, Node) 인스턴스 생성 Amazon Linux 2 AMI로 인스턴스를 생성해주었..