주요 기술 스택: Express.js, MySQL, Redis, Jest, Supertest, Artillery
소개: 공감 다이어리
는 AI 기반의 일기장 서비스입니다. 사용자가 작성한 일기의 감정을 분석해 감정 상태를 추적하고, AI 챗봇과 대화를 나누면서 일기를 작성하는 것이 주요한 특징입니다.
목적: REST API 서버를 구축하고 단위 테스트, 통합 테스트, 부하 테스트를 고루 수행하여 javascript + Node.js 개발의 한계를 보완하는 것
주요 성과:
- 신속하게 개발을 수행하여 최초에 4주로 계획해 두었던 백엔드 서버 개발 및 테스트 작성을 2~3주 정도로 단축함
- 단위 테스트와 통합 테스트를 체계적으로 작성해 전체적인 커버리지를 최대 90%까지 달성함
- REST API, 단위 테스트, 통합 테스트 등 개발한 내용에 대한 설계 문서를 체계적으로 작성하여 프론트엔드 개발자와 효율적으로 소통하고 테스트를 체계적으로 작성할 수 있었음
- 시연 환경을 고려하여 서버에 부하를 많이 주는 사용자 시나리오를 구성하고 테스트하였고, EC2 인스턴스를 스케일업하여 안정적인 시연 환경을 구축함
주요 문제 상황 → 해결 방법:
- 세션 기반의 로그인 방식을 사용했는데 백엔드만 배포된 상황에서 로컬의 프론트엔드 서버에서 로그인하면 서드파티 쿠키 문제로 로그인이 불가능한 문제 발생 → AWS EC2 인스턴스에 서버를 배포하고 퍼블릭 IP를 통해 통신하게 하고 있었는데 도메인을 구매하고 HTTPS 설정을 한 뒤 쿠키의 설정을 Secure: true, SameSite: None으로 변경하여 해결
- supertest를 활용해 통합 테스트를 진행할 때 하나의 테스트 파일 안에서 복잡한 비즈니스 로직을 여러 개 테스트하면 중간에 멈추는 문제 발생 → 명쾌한 디버깅은 어려웠고 파일을 분리하면 문제가 재발생하지 않음을 확인함. 이는 특정 비즈니스 로직의 문제라기보단 통합 테스트의 코드가 길어지면 나타나는 supertest 자체의 고유한 문제로 판단되어 공식 리포지토리에 버그에 대한 이슈를 등록함
배운 점 & 아쉬운 점:
- 레디스를 활용해 세션을 캐싱하여 세션 기반의 로그인 기능을 확장성 있게 구축할 수 있다는 점을 배울 수 있었음
- 프로젝트 아이디어가 매우 우수했음에도 당시 역량 문제로 인해 더 많은 기능을 설계 및 구현하지 못하고 이미 구현한 기능에 대한 테스트 작성에만 몰두했던 것 같아 아쉬움
- 개발 팀 리딩이 처음이라 팀원 각각에게 책임을 고르게 분배하지 못한 탓에 성장의 파이가 불균형하게 나누어지는 결과를 낳게 되어 상당히 아쉬웠음
아키텍처