Django의 CONN_MAX_AGE 알아보기

Today I Learned 날짜 2025년 8월 3일 일요일 내용 Django Database Connection Management Guide 본 문서는 Django 애플리케이션에서 데이터베이스 연결을 안정적이고 효율적으로 관리하기 위한 두 가지 핵심 도구 close_old_connections() 와 CONN_MAX_AGE 를 하나로 정리한 문서입니다. 웹훅 처리 커맨드에서 close_old_connections를 사용해야 하는 원인을 찾는 과정에서 수행된 실험입니다. 목차 close_old_connections() 가이드 Django close_old_connections 완벽 가이드 Django 애플리케이션을 운영하다 보면, 특히 오래 실행되는 스크립트나 비동기 작업에서 “MySQL server has gone away"와 같은 데이터베이스 연결 오류를 마주칠 때가 있습니다. close_old_connections는 바로 이런 문제를 해결하기 위해 Django가 제공하는 유용한 도구입니다. ...

2025년 8월 3일 · 13 분 · 배준수

Step Functios으로 구현한 실시간 웹훅 처리 시스템

Today I Learned 날짜 2025년 7월 28일 일요일 내용 건강하고 빠른 웹훅을 향한 여정 입사 76주차부터 WIL을 남기지 못했다. 웹훅 이슈로 인한 실시간 데이터 처리 지연과 누락이 지속적으로 발생하고 있었기 떄문이다. WIL을 읽는 사람 입장에서 “애는 배웠다고 하는데, 웹훅 계속 박살나고 있구만 뭘 배운겨” 라는 생각이 들까봐 그랬다. 사실 이걸 쓰고 있는 지금도 마음 한구석에 괜히 사망 플래그를 세우는 건 아닌지 걱정이 되지만, 더 미루면 영영 회고를 하지 못할까봐 지금이라도 이 여정을 정리하는 글을 쓰려고 한다. 제 부족한 실력으로 괜한 피해를 입은 분들(사실상 샐러드랩 모두)께 죄송스러운 마음을 가지며 글을 시작하고자 한다. ...

2025년 7월 28일 · 11 분 · 배준수

웹훅의 재귀 원인 찾기

Today I Learned 날짜 2025년 2월 7일 금요일 내용 재귀의 원인 새로 구축한 웹훅 시스템에서 종종 재귀가 탐지되었다고 알람이 발생하고 있다. 루프를 탈출하지 못하고 계속 빙빙 돌고 있다는 건데.. 분명 내가 구현한 함수중에는 자기 자신을 호출할 일은 없기 때문에 이 문제가 이해되지 않았다… 우선 어떤 경우에 AWS가 재귀라고 판단하는지 알아봤다. 문서에 따르면 16회 정도 이상 호출되면 재귀라고 판단하는데, 이 판단은 헤더에 있는 특정 값으로 판단한다고 한다. 뭐 어찌됐든… 실제로 테스트서버에서 실태를 확인해봤다. 로직을 일부러 실패해서 총 몇번 재시도 하는지를 확인하면 된다. 웹훅을 2회(1번만 하려고 했는데 실수함) 호출하고 SQS 트리거 람다 함수와, Step Functions이 몇번 호출되었는지 확인해봤다. ...

2025년 2월 7일 · 2 분 · 배준수

인덱스와 쿼리 속도

Today I Learned 날짜 2025년 2월 6일 목요일 내용 is와 ==의 차이 네이버 커머스 솔루션 관련 버그를 고치던 중, 네이버 스토어 데이터에도 샵의 비활성화 여부를 나타내는 필드를 추가해야 했다. 따라서 NaverStore 테이블에 is_active 필드를 추가했다. 이제 스토어를 탐색하는 경우의 대부분은 ‘활성화된 스토어’를 기준으로 하는게 당연해졌으므로 탐색 함수에 is_active 필드가 True인 경우를 추가해줬다. 따라서 1 2 3 stmt = select(models.NaverStore).where( models.NaverStore.is_active == True ) 이런식으로 쿼리를 작성했다. 그런데 Flake8에서 경고 메시지가 떴다. ...

2025년 2월 6일 · 2 분 · 배준수

SQS 전송지연과 메시지 수명

Today I Learned 날짜 2025년 2월 5일 수요일 내용 SQS 메시지의 수명과 전송지연 어제 저녁부터 들어온 웹훅 메시지들을 아침에 확인해봤다. 메시지 수명이 뭔가 꺼림칙하다. 저 60초선에 닿으면 뭔일이라도 나는 것마냥 구는 저 그래프가 참으로 거슬린다. 혹시 저 시간이 지난 메시지들이 삭제되는 것이 아닌지 확인할 필요가 있다는 팀장님의 제보를 받고 확인해보았는데 데이터는 잘 들어오고 있다. 어제 오후 7시부터 SQS에 들어온 메시지의 갯수 그래프다. 38만 개 정도 된다. 7시부터인 이유는 어제 오후 7시에 Redis 를 한번 초기화해버렸으니까.. ...

2025년 2월 5일 · 2 분 · 배준수

이름을 잘짓자

Today I Laerned 날짜 2025년 2월 4일 화요일 내용 이름을 잘짓자 이번 웹훅 개선작업을 진행하면서 가장 뼈저리게 느끼는 부분이다. 그동안의 TIL에서도 꽤나 자주 말했던 부분이긴 한데, 타겟(?)이 약간 다르다. 그동안은 코드 내에서 함수나 변수 명명에 관한 이야기였다면 어제부터 오늘 느낀건 AWS 자원에 대한 이야기다. 첫번째 경험이다. 이번 웹훅 개선 작업에서 쓴 AWS Step Functions와 SQS는 처음 써보는 거라 이것저것 해볼 필요가 있었다. 안되는게 원래 안되는 건지 내가 못한건지 파악하랴, 있다느 기능을 어떻게 설정하는지 파악하랴, 이게 좋은지 저게 좋은지 파악하랴 만들다 삭제했다를 끊임없이 반복하다보면 이름따위는 안중에 두지 않게 된다. 왜냐면 ‘어차피 작동 되도 이건 삭제할거야. 잘 작동하면 이름 제대로 지어서 만들면 되니까’ 라고 생각하기 때문이다. 실제로 무조건 틀린 생각은 아니긴 한데.. 이번엔 틀렸다. 이번 웹훅 작업을 하면서 만든 AWS 자원을 보면 ...

2025년 2월 4일 · 2 분 · 배준수

Step Functions의 재시도 정책 구현

Today I Learned 날짜 2025년 2월 3일 월요일 내용 메시지 재시도 실패한 메시지를 처리하는 방법에 대한 고민이 계속되는 중… 요청이 몰렸을 때 적절하게 재시도하는 방법을 열심히 찾고 있다. 예시로 동시에 주문을 생성하는 웹훅 5천개가 들어왔다고 가정해보자. 동일한 업체의 주문은 동일한 메시지 그룹에 담기므로 1개씩 트리거 람다가 호출된다. 이 람다는 상태머신을 호출하고 종료된다. 이 과정은 매우 빨라서 3천개의 상태머신이 열리는데 몇 분이 걸리지 않는다. 카페24 API의 요청 제한이 1천개라면, 1천 개의 웹훅은 바로 처리된다. 그리고 나머지 2000개는 429 Too Many Requests를 반환받는다. 여기서부터 어떻게 처리할지를 고민하고 있는 상황이다. ...

2025년 2월 3일 · 2 분 · 배준수

SQS 큐의 성질 파악하기

Today I Learned 날짜 2025년 1월 31일 금요일 내용 SQS 큐의 중복 판단 기준 Amazon SQS에서 FIFO Queue에선 메시지의 중복 여부를 확인하는 방식이 2가지가 있다. 설정 방법 동작 방식 사용 예시 자동 (Content-Based Deduplication) 메시지 본문의 SHA-256 해시 값이 Deduplication ID로 설정됨 메시지 본문이 같으면 5분 이내에 중복 제거됨 사용자 지정 (MessageDeduplicationId) 사용자가 직접 중복 제거 ID를 설정할 수 있음 메시지가 같아도 다른 ID를 부여하면 별도 메시지로 처리됨 카페24 API 웹훅은 변경된 데이터에 대한 간략한 정보만 들어온다. 웹훅에 관한 필요한 데이터만 처리해서 메시지를 작성하고 큐에 집어 넣는다. 따라서 별개의 웹훅이라도 본문이 같을 수 있다. 예를 들어 5분 간격으로 같은 스토어의 같은 상품 정보가 변경되었다고 하더라도 웹훅 정보, 샵 아이디, 몰 아이디, 상품 아이디 정도만 메시지에 담기므로 메시지가 동일해 보일 수 있다는 의미다. 이럴 경우 중복으로 처리되면 안되기 때문에 사용자 지정으로 설정해주었다. ...

2025년 1월 31일 · 3 분 · 배준수

메타 앱 검수를 통과하는 꿀 팁

Today I Learned 날짜 2025년 1월 24일 금요일 메타에게 함께해서 더러웠고 다신 보지말자. 드디어 마침내 검수를 통과했다. 이 권한 하나를 얻기 위해 15번을 신청했다. 통과할 수 있는 비법을 공개하겠다. 지피지기면 백전백승 실제로는 15전 1승 14패지만, 그래도 결국은 내가 이겼다. 페이스북에는 개발자 커뮤니티가 있다. 본인들은 거기에 본인들 욕이 한가득이라는 사실을 아는지 모르겠으나 메타에 대한 분노를 동병상련으로 치료하기에 적절한 곳이다. 내가 거부당한 이유가 이해가 안되어 열심히 망령처럼 떠돌아다니다가 한 글을 보았다. ...

2025년 1월 24일 · 3 분 · 배준수

ElastiCache와 TLS

Today I Learned 날짜 2025년 1월 23일 목요일 내용 ElastiCache 서버리스 연결의 특징 람다에서 ㄷ웹훅으로 생성된 데이터를 데이터베이스에 어떻게 연결할 것인가에 대해 많은 고민과 조언이 있었다. 현재 시도 가능한 방식 3가지는 다음과 같다. 람다에서 데이터베이스 직접 접근 AWS Lambda와 RDS를 연결하는 기능도 따로 있을 뿐더러, 모든 로직이 Step Functions 내에 있는 람다에서 종료되니 설계도 깔끔하다. 다만, 데이터베이스에 접근하는 곳이 2곳(서버, 람다)이 되어서 오류가 발생하거나 수정 사항이 생겼을 때의 관리소요가 추가된다. 서버에 HTTP 요청 서버에 있는 데이터 수정 엔드포인트를 이용. 굳이 서버 데이터 처리하는 작업에 API를 사용하는 부담 캐시 데이터를 Redis 리스트에 보관하고 서버가 풀링하여 저장하는 방식 결국 풀링이 필요함 결국 3으로 구현하고 있다. 웹훅은 시간대에 따라 요청 수가 차이가 나므로 오토 스케일링이 필요하다고 판단했다. 가장 요청이 몰릴 때를 기준으로 생성하면 돈 아깝다. 다행히 Amazon ElastiCache에는 서버리스가 있었기 떄문에 이걸 이용했다. ...

2025년 1월 23일 · 2 분 · 배준수