이메일 템플릿 렌더링

2024년 5월 2일 목요일

Today I Learned

날짜

2024년 5월 2일 목요일

내용

실수 처리

몇가지 실수를 뿌려놓은게 있어서 열심히 메꾸었다. 가장 먼저, 코어스크립트와 앱블록을 활성화한 유저들을 탐색하는 기능을 고쳤다. 당연히 Dict 일거라 생각하고 처리한 부분에서, 뜬금없이 문자열이 튀어나와 오류가 나고있었다. if not isinstance(settings_data, dict): 를 추가해서 해결했다.

스프레드시트에 데이터가 올바르게 들어가지 않고 있었다. 각 유저들이 앱을 사용하는 상황을 저장하는 방식을 바꾸었는데 이 로직의 코드는 변경하지 않아 작동하지 않는 문제였다.

지난주 이메일 레거시 코드를 개선하고 테스트 하는 과정에서 수신 주소를 내 개인 메일로 바꾸어놨는데, 이 부분을 복구하지 않고 실서버 까지 올라가버렸다.. VOC가 나한테 와서 상당히 당황스러웠다. 메일 주소 바꾸는건 어렵지 않았지만 문제는 템플릿이 렌더링되지 않는 것이었다.

첨부파일이 있는 메일 전송 로직에서는 렌더링 부분이 빠졌기 떄문에 발생한 문제여서 금방 해결할 수 있었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    def make_template(self):
		    # 추가된 부분1
        template = templates.get_template(self.email_config.template_name)
        rendered_template = template.render(
            {**self.email_config.data, "CONFIG": {**DEFAULT_EMAIL_CONFIG}}
        )
        
        msg = MIMEMultipart()
        msg["From"] = SERVICE_EMAIL
        msg["To"] = self.email_config.recipient[0]
        msg["Subject"] = self.email_config.subject
        
        #추가된 부분 2
        msg.attach(MIMEText(rendered_template, "html"))

        self.msg = msg

앱 삭제

브라우저 부스터는 새로운 앱으로 출시했다. 같은 데이터베이스와 서버를 사용하지만 삭제 로직이 조금 다르다. 두 다른 샵이 같은 어드민과 서버, 데이터베이스를 사용해야 하기 때문에 구성과 의존관계가 꽤나 복잡해졌다. 기존 알파 플러스에서 가장 중심이되는 테이블은 shop인데, 새로운 앱을 위해 이 테이블에 딸려있는 Second shop(가칭)을 만들었다. 브라우저 부스터에서 중심이 되는 테이블은 이 테이블이다. 알파 플러스와 브라우저 부스터 모두 가입한 유저가 브라우저 부스터만 삭제할 경우, 로직은 크게 어렵지 않다. 브라우저부스터에서 생성한 데이터들(이벤트, 상품, 쿠폰 등)만 삭제하고 second_shop도 삭제하면 된다.

반면 브라우저부스터는 냅둔 채 알파플러스만 삭제할 경우가 머리 아픈데, shop 테이블을 함부로 삭제할 수 없기 떄문이다. shop 테이블을 살려야 하지만(그래야 second_shop도 존재할 수 있기 떄문이다.) 알파플러스는 더이상 사용할 수 없도록 데이터를 변경해줘야 한다. 그냥 프론트 상으로 어드민에 접근만 할 수 없도록 해주면 될지, shop과 관련된 로직을 모두 찾아봐야할 지 많이 혼란스럽다.

회고

우와 금요일이다.