프로젝트 소개
Logo / mascot
서비스 시연 영상

서비스 시연 영상

서비스 시연 영상
서비스 시연 영상

서비스 시연 영상
**<
GUBU서비스 로 가려면..
>**

서비스 시연 영상

서비스 시연 영상

서비스 시연 영상

서비스 시연 영상

서비스 시연 영상

서비스 시연 영상
GitHub Link
• Service Github
• Batch Github
발표 영상
“대 구독 시대”에 필요한 구독 관리 사이트
서비스 기획 의도
Gallery view
Search
서비스 아키텍처
기술 스택 및 기술적 의사결정
BACKEND
Tech Stack | 도입 이유 |
Redis | 백엔드 API 구현 시 평균 응답 속도를 300ms로 목표를 잡았습니다. Redis Cache를 활용하면 데이터베이스에서 직접 조회하는 것보다 처리 속도가 훨씬 빠르다는 것을 알게 되었고, 실제로 Redis Cache를 적용하여 테스트를 진행한 결과 Index Key 추가만으로 얻었던 성능 개선보다 60.82% 더 빠른 응답 속도를 달성할 수 있었습니다. 이를 바탕으로, 데이터 변동이 적고 자주 호출되는 데이터에 Redis Cache를 활용하여 더욱 빠른 응답 속도를 확보했습니다. |
Batch | 저희 서비스는 웹 사용자가 머무는 시간이 짧아, 실시간 알림이 반드시 필요하지 않다는 점을 고려했습니다. 따라서 실시간 알림 방식(소켓, SSE) 대신 배치 방식을 채택하여 특정 시간에 알림을 일괄적으로 생성하도록 구현했습니다. 이 방식은 리소스 사용을 최적화할 뿐만 아니라 서버 부하를 줄여, 전체 시스템의 안정성과 효율성을 크게 향상하는데 기여했습니다. |
Scheduler | 이번 프로젝트에서 직접 API를 호출하지 않고 원하는 시간에 함수가 자동으로 실행되도록 하기 위해, Nest.js에서 제공하는 스케줄링 패키지를 활용하기로 결정했습니다. 결제일 알림 전송 및 플랫폼 랭킹 산정 기능에 사용해 본 결과, Cron 표현식을 통해 정확한 시간에 함수가 실행되는 것을 확인할 수 있었습니다. |
Lambda | 저희는 배치 작업에 있던 알림 기능을 AWS Lambda로 변경했습니다. 그 이유는, 해당 배치 작업이 하루에 한 번만 실행되기 때문에 지속적으로 서버를 유지하는 것보다 서버리스 환경에서 필요 시간에만 실행하는 것이 더 효율적이고 경제적이라고 판단했기 때문입니다. Lambda는 일정 주기에 맞춰 자동으로 실행되며, 필요할 때만 리소스를 사용하기 때문에 비용 절감 효과도 큽니다. 그 결과 효율성을 극대화하고, 유지보수의 편의성을 높이는 데 큰 기여를 했습니다. |
FRONTEND
Tech Stack | 도입 이유 |
Bubble.io | BE 개발에 더 집중하기 위해 FE 페이지를 빠르게 구현할 수 있는 노코드 툴을 조사하던 중 API 호출이 용이하고 저희 서비스에 맞는 페이지 개발에 적합한 Bubble.io를 찾았습니다. 설계단계에서 테스트 후 실제 서비스에 적용하여 프론트엔드 페이지 제작에 시간 효율성을 높이고 배포를 원활하게 진행했습니다. |
Database
Tech Stack | 도입이유 |
TypeORM | 프로젝트에서 타입 안정성을 높이기 위해 TypeORM과 Prisma를 비교한 결과, TypeORM이 관계형 데이터베이스의 복잡한 관계 설정을 잘 관리하고 TypeScript와의 호환성도 뛰어나 우리 프로젝트에 적합하다고 판단했습니다. TypeORM의 Entity 기능을 통해 데이터베이스 구조를 명확히 정의하고, 타입 오류를 사전에 감지할 수 있어 개발 효율성을 높일 수 있었습니다. 따라서, TypeORM을 사용하여 복잡한 쿼리와 관계 설정을 효과적으로 처리하고 타입 안정성을 유지했습니다. |
Test
Tech Stack | 도입이유 |
Artillery | 개발한 API의 성능 개선을 위해 성능 테스트를 진행했습니다. 여러 성능테스트 도구 중 다양한 시나리오를 적용하여 대규모 트래픽에 대한 부하 테스트를 진행할 수 있는 Artillery를 선택했고, HTML과 JSON 형식으로 가독성 좋은 통계 자료로 분석이 용이하다는 것도 확인했습니다. 실제 Artillery를 사용하여 테스트 후 결과를 바탕으로 성능 개선을 달성할 수 있었습니다. |
Bulk test | API 구현 후 최적화하기 위해 가장 많은 데이터를 처리하는 결제 알림 생성 로직을 리팩토링했습니다. TypeORM의 SAVE메서드와 BULK INSERT 쿼리문을 비교 결과 SELECT를 진행하는 SAVE보다 BULK INSERT 쿼리문을 사용하는 경우 속도가 훨씬 빠르다는 것을, 테스트를 통해 확인했고 해당 로직에 적용하여 소요시간 86%를 감소하는 최적화를 진행했습니다. |
DevOps / Infra
Tech Stack | 도입이유 |
GitHub Action | 초기 개발 환경에서는 코드가 자주 변경되고 업데이트되기 때문에 배포 작업의 자동화를 목표했습니다. EC2 인스턴스와 배치 작업, 배포 과정에서 문제가 없음을 확인하고 서비스에 GitHub Actions 기반의 CI/CD 파이프라인을 적용하여 배포 작업을 자동화하고 속도와 안정성을 크게 개선했습니다. |
AWS EC2
| 서버를 운영하면서 유지보수와 관리의 어려움을 해결하기 위해 AWS EC2를 도입했습니다. EC2는 신속한 배포와 자동화 지원, CI/CD 통합으로 인프라 관리 효율성을 크게 향상, EC2를 통해 빠른 배포와 오토스케일링을 검증하였습니다. RDS, S3, Lambda 등 다양한 AWS 서비스와의 통합으로 고가용성과 장애 복구를 자동화할 수 있었습니다. 이를 통해 개발 및 운영 속도와 비용 효율성을 크게 향상했습니다. |
AWS CloudWatch | 결제 알림 생성 로직을 Lambda로 이동 후 AWS의 서비스를 활용하여 모니터링 하기 위해 조사하였고 통합 관리가 가능한 CloudWatch 서비스가 있는 것을 알았습니다. Lambda 함수 실행 시 모든 로그를 기록하여 에러의 원인을 파악할 수 있고, SNS 서비스과 연결하여 에러 발생 시 slack으로 알림을 받을 수 있다는 것을 확인 후 적용했습니다. |
AWS IAM | 팀원 모두가 AWS에 접근하며 안전하게 관리하기 위해 root 계정 대신 IAM(Identity and Access Management)을 사용했습니다. 세분화된 접근 권한 관리가 가능하다는 것을 확인하고 현업에서 사용 중인 사례를 바탕으로 IAM 계정을 생성하여 팀원과 공유하여 AWS의 기능 중 람다를 함께 구현했습니다. |
Slack API | 서버 및 데이터베이스 오류에 신속하게 대응하기 위해, 에러 발생 시 알림을 받는 시스템을 구축하고자 했습니다. 저희는 Slack API를 통해 배치 작업에서 캐시 데이터 생성이 실패했을 때와 AWS Lambda에서 결제 알림 생성이 실패했을 때 Slack으로 알림을 받을 수 있도록 구현했습니다. |
GitHub Action
AWS
Slack API
트러블 슈팅
추후 기술적인 도전 계획
유저 테스트 결과 정리
유저 테스트 결과 분석 및 피드백 자체 평가
긍정 평가
•
각각의 플랫폼 평점 및 후기
•
플랫폼 랭킹 TOP10
•
결제 전 하루 전 알림
•
많은 서비스를 한 번에 볼 수 있다.
부정 평가
•
이용 속도가 너무 느리다
•
사이트 내용 안내가 너무 부족하다.
•
편의성 개편
새로운 의견
•
구독 가격 자동 갱신 시스템
•
자동 해지 시스템
•
결제 대행 (연동 시스템)
•
구독 검색 기능
•
모바일 어플화
유저 피드백 개선 방향 및 계획
구독 검색 기능
자동 결제 및 구독 해지
속도 개선
편의성 및 안내 개편