본문 바로가기
반응형

개발 이야기45

Python 이중 for loop 를 itertools 를 활용하여 개선하기 a = [1,2,3,4] b = ['A', 'B'] 의 두 리스트에 대해 (1,A), (1,B), (2,A), (2,B), ... 반복을 하려면 무지성으로 구현했을 때 for x in a: for y in b: function(x, y) 처럼 구현할 수 있다. 하지만 itertools 의 product 를 활용하면 좀 더 깔끔하게 구현이 가능하다 [function(x, y) for x, y in product(a, b)] 2024. 2. 26.
Nginx 프록시 대상에게 Client IP 정보 넘겨주기 location { ... proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; ... } 위와 같이 세팅하면 proxy 대상 서버에서는 x-forwarded-for header를 읽으면 IP가 찍혀 있다. 2024. 2. 20.
Gunicorn 에서 print() output 이 로깅 되지 않을 때 해결법 # myapp.service StandardOutput=journal StandardError=journal 을 추가하면 print() 문구가 노출된다 2023. 11. 22.
Slack bot 세팅하기 참고 링크 : https://api.slack.com/automation/quickstart Quickstart guide for the next generation Slack platform Get up and running quickly with the quickstart guide. api.slack.com 2023. 7. 18.
gunicorn 멀티프로세스 Crontab 을 활용한 날짜별 file log 로테이션 돌리기 gunicorn 을 활용하여 멀티프로세스를 이용하는 경우, 그리고 로깅 타입을 TimedRotatingFileHandler 을 이용하는 경우 여러 개의 프로세스가 한 파일에 접근하기 때문에 날짜가 바뀔 때마다 새 파일을 만들어야 하는데 이게 제대로 작동하지 않았다 그래서 메인 log 파일에 계속 누적하여 로그가 쌓이고 있었고, 얼마 지나지 않아 로그 사이즈가 너무 커져서 나중에는 읽기 조차 힘든 지경에 이르렀다. 여러 자료들을 살펴 보았을 때 멀티 프로세스를 쓴다면 곧바로 파일 로테이션 로깅을 사용하지 말고, 작업 큐에게 로그를 전달하여 작업 큐로부터 파일 로테이션을 돌리도록 해주면 된다고 하는데 그냥 가장 간단한 방법으로 처리하면 되지 않을까 하여 크론탭을 이용하게 됐다 크론탭은 정해진 시간, 날짜에 .. 2023. 4. 25.
[Django] Replica DB 사용 시 읽기전용/쓰기전용 Database 분리하기 DB replica 를 사용할 때 읽기전용으로 replica를 사용하고, 쓰기전용으로 main(master) DB를 사용하도록 하는설정 replica_1, replica_2 를 settings.py의 DATABSES 에 선언했다고 가정 import random class DBRouter(object): def db_for_read(self, model, **hints): return random.choice(["replica_1", "replica_2"]) def db_for_write(self, model, **hints): return "default" def allow_relation(self, obj1, obj2, **hints): return True def allow_migrate(self, .. 2022. 9. 6.
반응형