인프런 커뮤니티 질문&답변

박건영님의 프로필 이미지
박건영

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

장고를 통한 다른 모델의 디비생성 (insert) 에 대해 문의 드립니다.

해결된 질문

작성

·

196

0

 
 
문의 드립니다.
 
광고주의 광고 의뢰 내용을 저장하는 간단한 사이트를 만들었습니다.
 
결제와 연동을 하고 싶은데요.
 
예를들어 결제라는 Models과 광고라는 Models가 있습니다.
 
제가 하고 싶은 것은
 
1. 처음 광고를 등록 했을 때 결제가 하나 등록된다. (결제모델에서 광고모델 pk를 외래키로 지정)
 
이건 save() 메소드를 통해서, 광고가 등록 될때 인서트 구문을 이용해 등록 하면 될것 같습니다.
 
이렇게 처리하는게 맞나요? 더 좋은방법이 있을지..
 
 
2. 광고를 연장하는날을 기준으로 자동으로 결제가 생성되게 하고 싶습니다.
광고에는 광고가 끝나는 날이 있습니다. 실력이 부족해서, 수동으로 광고 날짜를 연장해줘야하는데요..^^;;;
 
아직 지식이 부족해 구체적으로 어떻게 해야 할지 모르겠습니다.
 
예를들어 파이썬에서는 스케쥴이라는 라이브러리가 있어서, 특정한 시간이나 주기를 정하고 어떠한 코드를 실행하게 할 수 있는 것처럼.
장고 안에서 처리를 할수 있는 방법이 있을까요?
 
아니면 새벽12시에 디비서버를 통해 셀렉트를 하고. 오늘 광고날짜가 마감되는 테이블을 일일이 찾아 결제를 인서트 해서 만들어야 하는건지. 다른 좋은 방법이 있는지 궁금합니다!
 
실무 경험도 없고, 독학으로 배워 이럴땐 어떻게 해야 하는지 모르겠습니다..^^;;
 
 
이번달 초부터 장고를 공부하고 있는 새내기 입니다.
 
제 실력은 파이썬, 크롤링 조금 할줄알고, 마리아디비 조금 사용할줄 압니다. ㅠㅠ
 
제 실력안에서 해결이 가능했으면 좋겠는데,
 
문의 드려봐도 될까요?
 

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

답변 1. 광고모델과 결제모델이 1:1 이라면, models.ForeignKey가 아니라 models.OneToOneField를 지정하시는 것이 좀 더 의미에 맞습니다. 그리고 인서트 구문이라고 하시는 것은 직접적으로 SQL을 사용하시겠다는 말씀같은데요. 장고 모델을 사용하실 경우 대개 직접적으로 SQL을 사용하지 않으셔도 모델을 통해 손쉽게 모델 인스턴스를 생성할 수 있습니다.

답변 2. 이 역시도 굳이 특별한 이유가 없다면 SQL을 직접 사용하지 않으셔도 됩니다. 모델을 통해 필요한 모델 인스턴스를 생성하시면 됩니다.

매일 12시에 수행하실 작업을 하나의 함수로서 구현을 하신 뒤에, 이 함수를 호출해줄 주체를 정하셔야 합니다. 4가지 선택지가 있을 듯 합니다.

  1. 서버가 linux이시라면 os에 cron 기능이 있구요. 이 cron 기능을 통해 명령행에서 장고 명령을 수행하실 수 있습니다. 이때 명령은 management command 공식문서를 참고하시어 구현하실 수 있구요.
  2. cron 기능을 좀 더 장고 친화적으로 설정하고 구현할 수 있도록 django-cron 라이브러리가 있습니다. 이를 활용해보셔도 좋구요.
  3. 혹은 django-apscheduler의 CronTrigger를 써보셔도 좋습니다.
  4. celery를 활용하시면 확장성이 좋지만, 별도로 rabbitmq와 같은 메세지 브로커를 운영하셔야 하기에 운영에 부담이 되실 수도 있습니다.

이 중에 django-apscheduler를 먼저 검토해보시면 어떨까요?

궁금증이 해결되셨다면, 본 질문의 상태를 해결됨으로 변경 부탁드립니다.

화이팅입니다. :-)

박건영님의 프로필 이미지
박건영
질문자

친절한 답변 감사드립니다.

그러네요. 괜히 어렵게 돌아가는 방향을 생각한것 같습니다. 

감사합니다..^^

박건영님의 프로필 이미지
박건영

작성한 질문수

질문하기