Troubleshooting: 무엇이 문제였는가?/취하여 프로젝트

3주 차: 알림 기능 찾아 삼만리 Day 12 - 이상하다, 별로 한 일이 없는 줄 알았는데 정리가 왜 안 끝나죠?

writingforever162 2025. 2. 26. 21:23

[알림 기능 찾아 삼만리 링크 1주 차: (1) (2)]

[알림 기능 찾아 삼만리 링크 2주 차: (3) (4) (5) (6) (7) (8) (9) (10)]

[알림 기능 찾아 삼만리 링크 3주 차: (11)]

 

팀에서 중간 발표회 대비 여태까지 한 일을 서로 발표하는 시간을 갖기로 했다. 원래 목요일에 예정되었으나 하루 앞당겨진 만큼, 여태까지 작성한 개발 일지를 바탕으로 발표회 대비 자료를 정리했다. 코드 작성 못지않게 여태까지 무엇을 했는지 정리하는 일 또한 개발의 중요한 일부분이라고 생각했다. 오늘 하루는 경쟁하듯 튀어 오르는 생각을 가지치기하는 시간으로 보냈다.

 

1. 🔑 주요 기능

(1) 한 줄 소개

Spring Scheduler + SendGrid API를 사용하여 하루에 한 번 사용자들에게 맞춤형 채용 공고 URL 목록을 전송하는 서비스

(2)  상세 기능

① 이메일 알림 발송

- SendGrid API를 사용하여 HTML 형식의 이메일 발송

- 키워드로 사용자와 채용 공고 URL을 연결하여 사용자들에게 맞춤형 채용 공고 URL 목록 전달

② 이메일 알림 분석 

- SendGrid 대시보드로 이메일 열람률, 이메일 내 링크 클릭률, 수신 상태 등 분석 가능

- 주 단위 또는 월 단위로 통계를 산출하여 성과 확인 가능

(3) 기술을 선택한 이유: 효율성 추구

① 비동기 처리로 이메일 전송 속도 단축

② Gmail 사용 시 발생하는 ‘Too many login attempts(로그인 시도 횟수 초과)’ 오류에서 자유로움

 

2. ⚙️ 기술적 의사결정 

(1) Plain Text 이메일과 HTML 이메일 중 무엇을 사용할까?

배경

- 이메일 양식은 사용자 경험 및 시스템 효율성에 크게 영향을 미치는 만큼, Plain Text 이메일과 HTML 이메일 장단점을 비교하여 결정함

 요구 사항

③ 대안 비교 

- 장단점 비교 

- 예시 

④ 결정

- 2안 'HTML 이메일' 을 선택함

⑤ 근거 

 

3. 🚨 트러블슈팅 

(1) 문제

- 이메일 한 개 전송에 7초가 걸려서 많은 사용자를 유치하기가 어려움

(2) 상황 가정

(3) 문제 해결 시도 사항 

- 사용자 식별자처럼 사용하지 않는 데이터는 조회 시 제외하기

- transform() 메서드 및 List 대신 Map 사용하기

- 반복문 중첩 줄이기 

- 스레드 풀(thread pool)을 10개로 정의하기

(4) 문제 해결 전 결과

(5) 문제 해결 후 결과

(6) 문제 해결 시도 전후 비교

 

4. 📈 향후 계획 

(1) 🏅 이메일 알림 서비스 리팩토링하기

- 1순위: 클래스, 변수, 메서드 이름 수정

- 2순위: 패키지 세분화

- 3순위: 수신자 검증 로직 반영

(2) 🥈 대용량 데이터를 문제없이 처리할 수 있도록 이메일 알림 서비스 개선하기

- 1순위: Gmail 사용 시 속도 vs 로직 분리 및 SendGrid 사용 시 속도 비교하기

- 2순위: 사용자 500명, 키워드 1개, 채용 공고 1000개 데이터로 병목 현상 위치 확인 및 트러블슈팅 

- 3순위: 전송한 뒤에는 저장할 필요가 없는 알림 객체를 어떻게 처리할지 고민 및 의사결정 반영하기

(3) 🥉 푸시(Push) 알림 구현하기

- 1순위: 이메일 알림 서비스의 로직 재사용 + FCM + 카카오톡 API로 구현하기

- 2순위: Redis vs Kafka vs RabbitMQ 장단점 비교 및 의사결정 후 반영하기

 

줄글로 읽기 힘들 때는 종종 표를 활용하곤 한다. 이번 주 금요일까지 발표 자료 초안도 만들어야 하는데, 이렇게 정리하는 방식이 한 사람에게라도 도움이 되면 좋겠다. 이번 주말까지는 계속 문서화 작업을 할 듯한데, 이런저런 개념도 공부해서 부족한 지식을 메워봐야겠다.

 

별로 한 일이 없는 줄 알았는데 생각보다 정리할 거리가 많아서 놀랐다.

 

어쩌면 맨 밑바닥부터 한 단계씩 오르며 개발해 왔다는 방증이 아닐까? 

 

Day 13에서 계속…….