예에~~
드디어 부트캠프가 끝이 났다~~😹
2023/12/28 ~ 2024/06/25 (6개월)간의 Python 웹 개발 교육을 들으면서 개발이란 1도 몰랐던 내가 어플까지 만들게 될 줄은 몰랐을거다... 무려 출시,,,!
교육이 어땠는지에 대한 후기는 개략적으로 여기에 👉 [자료구조와 알고리즘 with Python] Chapter 1: Stack 있기 때문에 생략하고 ㅎㅎㅎ
어플 소개부터 하려고 한다✨
저희 어플을 소개하는 랜딩 페이지를 먼저 소개해드리려고 합니다 ㅎㅎ
(6월 출시 예정이라 했지만 이것저것 하다보니 7월에 출시 되었다 ㅎㅎ)
아래는 저희 어플 시연 짤입니다 ㅎㅎ
UI 너무 이쁘지 않나요~ ㅎㅎㅎ
사실 이 움짤은 제가 한건 아니고,,, ㅎㅎ
같은 프로젝트 프론트분 기술블로그에서 슬쩍 가져왔다 ㅎㅎㅎ
(이 프로젝트의 프론트 분의 기술블로그 👉 Devinix님의 velog)
부트 캠프에서 합동 프로젝트가 시작하기 전 설문 조사를 통해 7가지의 주제 중에서 하고 싶은 프로젝트에 참여할 수 있도록 선택권을 줬다. 합동 프로젝트란? 오즈코딩스쿨에서 백엔드 외에도 프론트엔드, 기획 교육도 진행했는데 각 파트의 교육생들이 서로 합동해서 프로젝트를 완료하는 것이다.
그래서 설문조사에 미리 제공된 주제는 기획 교육을 듣고 계신 분들이 제공해준 것이었다.
나는 평소 운세와 사주 이런 것에 관심이 있었고 매번 네이버에 운세 검색하는 것이 귀찮아질 때쯤 그럼 내가 만들어보면 어떨까?! 해서 선택하게 되었다.
우리 팀은 운이 좋게도 기업 연계로 aws EC2나 GPT AI, Firebase 등 기업에서 가지고 있는 걸 제공받아 자원은 제한없이 개발할 수 있어서 너무 좋았다. 그리고 기업에서도 유능하신 개발자 분이 계셔서 가장 어려웠던 배포를 할 때 도움을 많이 주셔서 어플 연동하여 배포할 수 있게 되었다.
어플 아이템 자체는 기업에서 '따뜻한 응원의 한마디가 필요한 현대인의 일상에서 친숙하게 응원을 할 수 있도록 운세를 이용하면 어떨까?'하는 의견에서 시작 되었다.
'운세'라는 큰 틀을 사용하면서도 사람들에게 흥미를 줄 수 있는 요소(mbti별 운세)를 추가하여 특색을 주었다.
처음 합동 프로젝트를 시작하면서부터 백엔드 인원이 4명에서 한명이 나가버렸고,,,
이 중에서도 다른 한명이 어느 순간부터 연락두절되어 둘이서 프로젝트를 진행하게 되었다...
이분과는 엄청 친해져서 결혼식에도 축하해주러갔다.╰(*°▽°*
)╯
🎈운세를 GPT AI에서 데이터를 가져오는 방식이었는데 원하는 형식이 아니어서 데이터를 저장하는데 어려움이 있었다. 같은 형식을 계속 요청하니 GPT를 길들이는데 성공(?)해서 결국 원하는 형식을 얻게 되었다.
그리고 원하는 데이터 양이 길어지면 서버 요청이 끊어지는지 데이터를 가져오는데 오류가 계속 발생해서 적당한 데이터 양을 조절하는데 오랜 시간이 걸렸다. (경우의 수를 생각하며 테스트를 진행했다.)
합동 프로젝트 기간이 끝나갈 무렵 처음에 기획하던 기능들을 구현하기에 한달이라는 기간이 짧아 메인 프로젝트까지 연장하게 되었다.
연장한 이후 기존에 못한 기능들에 대해 다시 논의해봤다.
🎈소셜 로그인을 계획했는데 회원가입 및 로그인해서 유저들의 생년월일 데이터를 저장하는 방식이 아닌, 간편하게 본인의 생년월일을 입력해서 운세를 볼 수 있는 구조로 바뀌었다.
🎈공유하기도 소셜로그인이 없어지니 카톡으로 공유하기 등 기술을 구현하지 않게 되었다.
이렇게 되다보니 구현 할게 많아 연장하게 된 것이 무의미해졌다...
하지만!
다른 일감이나 develop할 점을 찾아 나선 백엔드,,,⛵
사람들이 사용하는 메인 어플 페이지가 아닌 기업측에서 사용하는 관리자 페이지도 만들어야해서 우리는 거기에 집중해보기로 했다.
초반에 우리가 빈 DB를 줘도 기본적인 운세 데이터나 이런 것들을 만들 수 있고, 세팅할 수 있도록 여러 기능 들을 구현했다.
🎈초반에 어플 알림 시간 설정이나 운세 데이터 생성 시간 설정을 django-apscheduler를 이용해 구현했다.
하지만, 알림 시간과 GPT AI 작동 시간을 데이터로 저장하면서
데이터를 다른 값으로 설정하고 이 변경된 데이터를 가져오는 트리거가 없어서 초반에 설정한 시간으로만 작동된다는 것을 발견한 후 어떤 방식을 써야하는지 고민이 생겼다.
apscheduler 특성상 서버가 켜진 후 한번만 등록되다보니 변경된 데이터를 가져오지 못하는 것이다.
🎈이 후 crontab이라는 것을 알게되어 사용하게 되었다.
crontab은 매분, 매초 서버가 시작된 후 작동되어 기존에 스케줄러로 등록했던 작업들을 가져와서 우리가 DB에 지정된 시간과 현재 시각이 동일한지 비교해서 작동할 수 있도록 구현했다. 물론 crontab에서 작업을 등록할 때 이 동작하는 시간을 설정 할 수도 있다.
🎈그리고 어플 출시 후 많은 양의 디바이스 토큰이 등록되었고 기업 대표님으로부터 푸시 알림을 보낼 때 트래픽이 몰릴 수 있으니 분산할 수 있는지 의견을 받았다.
python에서 제공하는 chunk list를 이용해서 원하는 만큼 디바이스 토큰을 리스트 안에 리스트로 넣어두고 리스트[0][0]에 푸시알림을 보낸 뒤 몇 초의 time sleep 이후 다음 리스트[0][1]을 전송하는 방법으로 해결했다.
🎈이 외에도 GPT AI가 매일 작동하는데 해당 작업이 제대로 이루어졌는지 완료 메일을 보내는 기능도 추가했다.
완료 여부는 아래와 같은 방식으로 구현했다.
다른 교육생들은 프로젝트 2개를 만들어 교육을 수료한 반면에 나는 프로젝트 하나만 만들어 수료한 셈이라 아쉽긴하지만,,, 한 우물을 판 결과! 어플 출시까지 할 수 있게 되었다~
만든 어플은 👆👆👆 요기에서 다운로드 가능하고,
아직 안드로이드용만 있어서 애플 유저들은 잠시만 기다려주시기 바랍니다...😂 현재 앱스토어에도 등록하기 위해 개발 중에 있어 조만간 앱 스토어에서도 볼 수 있을 것이다✨
기업측에서 기업 방문 초대를 해주셔서 대표님과 프로젝트 개발에 도움을 주신 개발자분과 디자이너분들도 실제로 뵐 수 있었다.
아래는 회사 입구 사진이다✨
맛있는 한정식과 커피도 사주셨고 회사 위치가 동탄인 것을 고려해 감사의 의미로 상품권도 주셨다 ㅠㅠ (마산에서 올라온 팀원도 있었다😱)
대표님께서 사업을 하시게된 이유, 기업 성장 과정 등 좋은 말씀과 조언을 해주셔서 뜻깊은 시간이 되었다.
EXODUS.ent 앞으로 대성하시고 하시는 어플 아이템마다 성공하시길 바래요~~🤗💗