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 분 · 배준수

secondary table에 필드 추가하기

Today I Learned 날짜 2024년 12월 20일 금요일 내용 순서를 저장하는 법 생성한 배너이미지에서 이미지 순서가 마음대로 변경된다는 이슈가 발견되었다. 난 인스타그램 포스트와 네이버 배너 이미지를 관계를 지어놨다. 여기에 순서는 반영되지 않으니 데이터베이스에서 불러올 때는 실제 유저가 선택한 사진 순서와 다를 가능성이 높았다. 그래서 이를 어찌 처리해야 하나 난감했다. 배너 이미지 데이터에 json 타입으로 데이터를 적어놔야 하나… 난 개인적으로 json 타입을 쓰는 걸 상당히 안좋아 한다. 차라리 테이블을 이나 필드를 만들고 필요할 때 마이그레이션을 하는게 낫지 않나 라는 생각과, 관리를 잘못하면 데이터 형식이 통일되지 않아 발생하는 문제들 등 때문이다. 뭔가 SQL을 쓰는 이점이 사라진다는 기분이 들기도 하고… ...

2024년 12월 20일 · 1 분 · 배준수

DB Connection Pool

Today I Learned 날짜 2024년 11월 27일 수요일 내용 DB Connection Pool QueuePool limit of size 25 overflow 5 reached, connection timed out, timeout 30.00 (Background on this error at: https://sqlalche.me/e/20/3o7r) 왠 처음보는 에러가 자꾸 뜬다. 메시지가 참 심상치 않은데, 주로 뜨는 곳이 웹훅을 처리하는 부분이다. 마침 쇼피파이에서 앱 상태를 확인해보는데, 웹훅 처리율이 너무 낮아 사태가 꽤 심각하다고 느꼈다. 관련 메시지를 찾아보니, 데이터베이스에 연결하는 클라이언트가 동시에 너무 많아서 발생한 문제라고 한다. ...

2024년 11월 27일 · 2 분 · 배준수

2앱 체제 구현

Today I Learned 날짜 2024년 5월 9일 목요일 내용 샵 디테일 수정 새로운 브라우즈 부스터 앱에서 사용할 샵 테이블을 별도로 생성했었다. 이 앱에 앞으로 다양한 서비스가 추가될 테지만, 우선은 필요한 최소한으로 구현하는게 좋다고 클린 아키텍처에서 배웠다. 알파플러스 앱에선 쇼피파이에서 보내주는 데이터는 샵 테이블에, 우리 서비스에서 사용하기 위해 필요한 정보들을 담는데는 샵 디테일 테이블을 사용한다. 우선 브라우저 부스터 앱은 샵 디태일을 별도로 만들지지 않았다. 배운대로 했다는 뿌듯함을 느꼈다. 브라우저 부스터 앱을 설치해도, 알파플러스와 동일한 온보딩 및 회원가입 과정을 겪어야 해서 샵 데이테일 테이블이 필요하다는 것을 꺠달았다. 바로 샵 디테일을 만들었다. 난 생각의 범위가 참 좁다. ...

2024년 5월 9일 · 2 분 · 배준수

위젯 스프린트 시작!

Today I Learned 날짜 2024년 3월 4일 월요일 내용 스프린트 돌입! 간과한 것 이번 스프린트 때는 나름 철저히 계획을 세운다고 공을 많이 들였다. 오늘 시작하자마자 내가 크게 놓친 부분이 있다는 걸 깨달았다. 우리 서비스는 서버가 2개다… 기존에 있던 세일즈팝업을 위한 추상클래스는 shop 서버에 있다. 이와 관련된 데이터는 Shopify에서 웹훅을 통해 받는 주문 데이터를 이용해 연산하기 때문이다. 반면 위젯과 관련된 것들은 모두 리뷰서버에 있었다. 따라서 리뷰서버에서 위젯에 필요한 데이터를 shop 서버에 요청하고, shop 서버에선 이 데이터를 연산하여 반환해주어야 한다. ‘그냥 DB에 저장하면 되겠지!’라고 생각하고 넘겨버렸다.. 사실 이렇게만 되었어도 크게 당황은 안했을텐데.. ...

2024년 3월 4일 · 1 분 · 배준수

데이터베이스의 사용성 고려해보기

Today I Learned 날짜 2024년 2월 29일 목요일 내용 데이터베이스 계획 변경 다음 주에 시작될 스프린트의 공수와 일정을 확정짓는 플래닝미팅에 들어가기 전 마지막으로 PRD 기획 문서와 피그마를 체크했다. 기존에 열심히 고민하고 공부해서 이번에 추가될 데이터베이스 테이블을 짰는데, 몇가지 놓친 부분이 있어 크게 변경했다. 사용방식 기존 ERD 상으로, 위젯 테이블은 2개의 연관된 자식 테이블을 가지게 된다. 데이터 설정의 기준을 담는 테이블과 위젯에 포함되는 상품에 대한 테이블이다. 어제, 그제 열심히 고민한 부분은 후자였다. 하나의 상품이 위젯에 포함되는 갯수만큼 데이터를 만들 것인지, 상품 당 하나만 가지고 있을지. 전혀 생각하지 못한 부분이 뒤늦게 떠올랐고 의미없는 고민임을 알게됐다. 각 위젯은 데이터를 포함하기 위한 기준을 설정해야 한다. 예를 들어, 최근 이 상품을 구매한 고객에 정보의 최대 기준을 1일, 7일, 30일 등으로 가능하다. 똑같은 상품을 10일전에 김씨가 주문했어도 어떤 위젯에서는 최근 구매정보가 없다고 입력되야 하고 다른 위젯에서는 이 정보가 입력되야 한다. 같은 상품이라고 모두 정보가 같다는 보장이 없다는 의미이다. 따라서 각 상품은 위젯에 포함된 갯수만큼 데이터 정보를 가지고 있는게 맞았다. 황소 뒷걸음질 치다 쥐 잡은 꼴이네. ...

2024년 2월 29일 · 3 분 · 배준수

데이터베이스 구조 고민과 Shopify App proxy

Today I Learned 날짜 2024년 2월 26일 월요일 내용 기존 로직 파악 다음 스프린트 때 구현할 기능들에 대해 코드 초안을 작성하고 있다. 기존에 구현되어 있는 방식을 이해하지 못해 막혀있는 부분과 작성했지만 개선해야 할 부분을 회의를 통해 알게 되었다. 고객의 스토어에 표시할 위젯을 Shopify theme asset에 저장할 수 도 있다. 하지만 이 때 위젯을 가지고 있는 것은 shopify가 된다. 우리 서비스에서 제공하고, 수정 및 변경이 원활하기 위해선 우리가 가지고 있는 것이 바람직하다. 우리 서비스를 설치한 스토어는 테마를 수정하는 에디터에서 앱 블록을 추가할 수 있다. 앱 블록에는 스크립트가 작성되어 있는데, “어떤 위젯이 필요하니 app proxy를 이용해 알파리뷰 서버의 특정 endpoint로 요청하라”고 적혀있다. 우리 서버는 해당 요청을 받으면 이에 맞는 위젯 HTML에 알맞은 데이터를 추가하여 보내준다. 데이터까지 입력된 완성된 HTML을 보내주는 것이다. 앱 블록은 받은 것을 출력하면 된다. ...

2024년 2월 26일 · 4 분 · 배준수

기술개발 초안 작성

Today I Learned 날짜 2024년 2월 23일 금요일 내용 내가 짤 코드 생각해보기 이전부터 항상 느끼던 갈증은 “내가 어떻게 코드를 작성할 것인가”를 미리 생각하지 못하는 것에서 발생했다. 직접 VS Code 에 입력할 때가 되어서야, ChatGPT에게 물어보고 나서야 내가 나아갈 방향을 안다는 것은 내가 개발자가 아닌 코드싸개에 불과하다는 걸 시사한다. 지난 1월 30일에 작성한 TIL에 있던 내용이다. 내가 뱉은 말을 지키기 위해, 실행에 옮겼다. 어제 개발자들끼리 회의도 있었기 때문에 충분히 가능하다고 생각했다. ...

2024년 2월 23일 · 2 분 · 배준수

업보 청산하기

Today I Learned 날짜 2024년 1월 17일 수요일 내용 일이 많이 꼬여서 밤 새는거 아닌가 싶었으나 늘 그랬듯 답을 찾았다. 또경변수 지긋지긋한 ECS Task가 또 말썽을 부린다. 오늘 아침에 구글 스프레드시트에 추가되었어야 할 데이터가 추가 되지 않았다! 하필 1시간이 지나버려서 Task 기록도 안남았다. 실행 주기를 바꿔 실행해봤더니 또 환경변수를 못찾는다고 땡깡부린다. 하… 그동안은 테스트서버였고, 지금은 실서버라서 Task에 문제가 전혀 없는데 도대체 어디부터 또 시작해야 할지 눈 앞이 깜깜해졌다. 환경변수가 있는데 왜 못찾냐고! Task 상세정보를 봤는데 내가 알던 환경변수 경로와 달랐다. 생각해보니 실서버는 production을 위한 환경변수를 받아야 하는데 추가를 안해줬다. 진짜 없어서 못찾았구나? 그래도 미안하진 않다. 추가해주니 잘 작동한다. ...

2024년 1월 17일 · 4 분 · 배준수

혹시나는 역시나

Today I Learned 날짜 2023년 12월 6일 수요일 내용 찜찜한게 가시지 않아 스스로에게 질문을 던지며 상황을 정리했다. 곡해 정확한 구조와 디자인에 대해 자문자답 하는데 반나절이 걸렸다. 심지어 확정적으로 shop_detail이 쇼피파이에서 받은 데이터고, shop이 알파리뷰에서 설정한 값이라고 판단하고 이를 증명하는데 시간을 많이 낭비했다. 이 원인은 로컬, 테스트, 실 서버를 혼동해서 발생한 일이었다. AWS RDS에서 dev가 들어간 인스턴스는 테스트 서버의 데이터들이 저장된다. 여기에 접속해서 데이터를 확인하고 실제 슈퍼관리자 페이지에서 어떻게 출력되는 지, 반영되는지를 계속해서 비교했다. 이 비교 대상 사이트가 테스트 페이지가 아니라 실제 고객들이 이용하는 product 페이지였다. 테스트 서버의 슈퍼관리자 페이지를 들어갔어야 했다. 엉뚱하게 서로 영향을 못 끼치는 두 개의 관계를 파악하다 보니 온갖 억측과 보정과 가정을 뒀다. 늦게나마 이를 파악하고 다시 정리를 시작했다. ...

2023년 12월 6일 · 3 분 · 배준수