일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- soft delete
- redis
- 물리삭제
- hive
- 오블완
- hard delete
- 티스토리챌린지
- 논리삭제
- 계정 관리
- NoSQL
- ci/cd
- DAG
- unique constraint
- grafana
- nginx
- Django
- Hadoop
- logstash
- docker
- AWS
- prometheus
- Airflow
- Locust
- elasticsearch
- slack
- Next.js
- JWT
- aws ec2
- node exporter
- 로그 백업
- Today
- Total
목록back-end (11)
먹수의 개발일지
Redis란? 메모리 기반 데이터 저장소이다. 데이터를 메모리에 저장하기 때문에 매우 빠른 속도로 데이터에 접근할 수 있다.유연한 데이터 구조: 문자열, 리스트, 해시, 셋(set), 정렬된 셋(sorted set) 등 다양한 데이터 구조를 지원퍼시스턴스: 메모리 기반이지만 데이터를 디스크에 저장하여 장애 발생 시 데이터 복구가 가능확장성: 클러스터링 기능을 통해 대규모 트래픽에도 대응 가능✅ 언제 사용In-Memory 데이터베이스의 하나로, 유실되어도 괜찮지만 빠른 데이터 조회를 할 때 사용한다. 기존 관계형 데이터베이스(MySQL, PostgreSQL)보다 훨씬 빠른 이유는 메모리 접근이 디스크 접근보다 빠르기 때문이다.✅ 단점1) 디스크 즉, 파일이 아닌 메모리상에 데이터를 저장함. but 프로세..
Intro서비스를 운영할 때 부하테스트를 통해 성능 이슈를 대비하는 것이 중요하다. 간단한 부하테스트 예제를 살펴보자! Locust란?Locust는 Python 기반의 부하 테스트 도구로, 여러 사용자의 API 요청을 시뮬레이션해 서버의 성능을 측정할 수 있다. 특히 Locust는 코드로 테스트 시나리오를 작성할 수 있어 재사용성이 높고 유연한 구성이 가능하다. Locust 설치먼저 Locust를 설치한다. pip install locust locust.py 파일을 작성한다. HttpUser: Locust에서 사용자 행동을 정의하는 기본 클래스로, HttpUser 클래스를 상속받아 Django API 서버에 HTTP 요청을 보낼 수 있다.wait_time: 각 사용자의 요청 간격을 설정하는 속성이다. ..
Logstash → ElasticSearch 데이터 플로우로그 파일 생성:애플리케이션(Nginx, Django 등)이 로그 파일을 생성한다.예: service.log 파일에 JSON 형식으로 로그가 기록됨.Logstash 입력 단계 (Input):Logstash가 로그 파일을 모니터링한다.로그 파일이 업데이트되면 데이터를 읽어온다.Input Plugin: file, tcp, http 등 다양한 입력 소스를 지원한다.Logstash 필터링 단계 (Filter):읽어온 데이터를 정제하고 가공한다.예: 로그에서 불필요한 필드를 제거하거나, 새로운 필드를 추가한다.Filter Plugin: grok, mutate, date 등을 사용해 데이터 처리.Logstash 출력 단계 (Output):처리된 데이터를 El..
웹 서버 보안 체크 사이트https://observatory.mozilla.org/https://securityheaders.com/ → 요청한 서버의 헤더 정보를 더 잘 보여준다. 웹서버 보안 체크리스트HTTPS 사용: SSL 인증서를 구매하거나 무료로 얻어서 HTTPS를 사용하는 것이 중요합니다. 이를 통해 데이터의 암호화와 통신의 보안성을 강화할 수 있습니다. Nginx 설정에서 SSL을 활성화하고 HTTPS로 트래픽을 전송하도록 설정해야 합니다.CSRF(Cross-Site Request Forgery) 방어: Django에서는 기본적으로 CSRF 보호 기능을 제공합니다. 이를 활성화하여 웹 어플리케이션의 사용자 세션을 보호할 수 있습니다.CORS(Cross-Origin Resource Shari..
Intro서버에 남겨지는 로그 파일들을 주기적인 배치작업으로 S3에 백업하고자 했다. 간단하게 linux 환경에서 사용할 수 있는 crontab을 사용했다. 로그 작성할때마다 S3에 보내는것 보다는, 서버에 바로 로그를 남기고 몇일에 한번씩 해당 파일들을 백업해서 옮기는 것이 운영서버에 성능 부하를 덜 발생시킬 것이라고 생각했다. 서버 환경 - AWS amazon linux2 EC2 우선 수동으로 python으로 작성한 backupLog 파일을 실행해본다. sudo python /home/path/backupLog_to_s3.py 백업 파일은 직접 구현한, S3 API를 사용하여 파일을 저장하는 StorageS3 모듈을 사용한다.# -*- coding: utf-8 -*-from core.s3 import..
pcap파일로 네트워크 패킷을 저장해보자. 로컬에서는 wireshark라는 GUI로 패킷 수집 및 저장이 가능한 툴을 사용했다. 하지만 서비스를 운영중인 AWS EC2 환경에서 네트워크 패킷을 저장하는 것이 필요했다. 여러 툴 중에 tcpdump가 시스템 리소스를 적게 사용하여 서버 성능에 미치는 영향을 최소화 할 수 있다고 하여 tcpdump를 사용하기로 했다. 서버 환경Amazon linux2 tcpdump 설치sudo yum install tcpdump sudo tcpdump -i eth0 -w /path/to/file.pcap sudo tcpdump -i eth0 /home/ec2-user/temp_pcap/test.pcap tcpdump로 pcap 파일 읽기 tcpdump는 pcap 파일을 사람..
IntroKafka는 비동기 방식의 대표 스트리밍 플랫폼이다.Kafka는 언제 왜 사용하는가?빠른 데이터 수집 및 높은 처리량이벤트 처리 순서가 보장된다.적어도 한 번 전송 방식 → 메시지의 유실이 없도록 한다.producer → broker 메시지 전송broker → producer 메시지 잘 받았다고 ack 전달producer ack 받게 되면 다음 메시지 전달하고 받지 못하면 해당 메시지를 재 전송함 토픽 리스트 출력kafka-topics.sh --list --bootstrap-server Kafka01Service:9092test라는 토픽 생성하기kafka-topics.sh --create --bootstrap-server Kafka01Service:9092 --replication-factor ..
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..
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..
Soft Delete란? DB 테이블에서 특정 row를 삭제 처리할 때, delete를 사용하지 않고 삭제 여부 혹은 삭제 시점 칼럼을 활용하여 flag 체크하는 방식이다. 반대되는 개념으로는 테이블에서 row를 delete하는 Hard Delete가 있다. Hard Delete의 경우 직접 삭제하기 때문에 별도의 audit table을 관리해줘야 한다. Soft Delete와 unique Constraint 로 인한 문제 회사에서 Soft Delete로 구현된 테이블을 작업하던 중 문제가 발생했다. 특정 시설물들을 관리하는 테이블에서 시설물을 Soft Delete한 후, 삭제된 것과 동일한 코드(unique 제약이 적용된 칼럼)를 가진 시설물 추가에 실패하게 되었다. 삭제 상태로 변경된 기존 시설물 코..