데모페이지를 완성했다

2023년 12월 20일 수요일

Today I Learned

날짜

2023년 12월 20일 수요일

내용

데모 관련 Task 끝

어제 발견했던대로, DB에 commit이 일어나면 object가 refresh되었다.

Loading Relationships

In the last step, we called [Session.commit()](https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.commit) which emitted a COMMIT for the transaction, and then per [Session.commit.expire_on_commit](https://docs.sqlalchemy.org/en/14/orm/session_api.html#sqlalchemy.orm.Session.commit.params.expire_on_commit) expired all objects so that they refresh for the next transaction.

SQLAlchemy docs에서 찾은 내용이다. db에 commit하면 현재 session의 object들이 expired되고, object를 새로 로드해야 한다.

로그인할 때, object로 계정 정보로 DB에서 관련된 shop들을 가져오는데, 데모 로그인떄는 데모 스토어로 사용할 shop만 가져오도록 로직을 작성했다. 이 object가 동기화되면서 내가 선택한 shop이 무용지물 되버린건데.. 내가 몰랐던 SQLAlchemy의 기능인 것 같다.

해결책은 expunge 로 object를 DB 세션에서 분리하거나, 별도의 임시 변수에 저장해놓거나 인데.. 제 3안을 선택했다. 애초에 가져올 떄 필터링 없이 DB와 똑같이 가져온 후, commit 이후에 불필요한 shop만 object에 냅뒀다. 드디어 이 Task가 끝났다.. 휴

Notification Email

발송해야할 메일을 처리하는 로직이 어느정도 감이 잡혔다. 눈으로만 따라가려니 힘들다.

command에 메시지를 보내는 스크립트가 작성되어 있는걸 뒤늦게 봤으니, 내일은 관련된 로깅문을 찍어서 messaging_log 상태가 언제 어떤 상태로 변경되는지 확인해봐야겠다.

회고

드디어 데모페이지 Task가 끝났다…