UX 개선을 위한 커뮤니티 자동저장 기능 개발

UX 개선을 위한 커뮤니티 자동저장 기능 개발

블로그 링크
업무 유형
운영개선
[기여도]
  • 백엔드 개발자(본인), 프론트엔드 개발자, 프로덕트 디자이너
[문제]
  • 글쓰기에 어려움을 겪는 사용자 VOC 지속적으로 인입, 임시저장 기능이 존재하지만, 도중 이탈 시 글 저장되지 않음
[어려웠던 점과 극복 방법]
  • 웹소켓 사용 여부에 대한 고민
    • 문제: 웹소켓을 사용하면 실시간 저장이 가능하지만, 커넥션 유지 비용 및 별도 상태 관리 구현의 복잡성이 발생
    • 극복: 웹소켓 대신 REST API를 사용해 특정 주기(3초)로 저장 요청을 처리하도록 설계 → 부하 테스트 결과, REST API 기반의 호출이 성능과 유지보수 측면에서 적합하다고 판단
  • 부하 분산 및 자동저장 내역 저장을 위한 MongoDB 활용
    • 문제: RDB에 자동저장된 글 내역이 쌓이며, 정상적으로 발행된 글이 저장되는 테이블에 쓰레기 값이 많아지기 시작함
    • 극복: 저장소 분리하여, MongoDB (NoSQL) 안에 저장
  • 잦은 API 호출로 인한 서버 부하 우려
    • 문제: 글 자동저장 기능을 추가할 경우, 사용자 입력 중 짧은 간격으로 저장 요청이 발생해 서버 부하가 증가할 가능성이 있었음
    • 극복: k6 를 사용해 부하 테스트를 진행, 호출 간격 및 서버의 최대 처리 용량을 측정하여 성능 안정성을 확인. 최적의 호출 주기를 설정 (3초)
    • 서버 리포트
      동시접속자 1000명이 연속 자동저장 1000회 수행 시나리오 시, 서버 리소스 모니터링 결과
      notion image
[해결방안]
  • 글 자동저장 기능 제공
    • 사용자 입력 중 일정 간격(3초)으로 자동 저장이 진행되도록 API 설계
    • 프론트엔드에서 사용자 이탈 시에도 서버로 마지막 데이터 전송
    • 저장 완료 및 실패 상태를 사용자에게 알림
  • 기술 선택 근거
    • REST API를 사용한 이유
        1. 서버와 클라이언트 간 커넥션 유지 비용 절감
        1. 웹소켓 대비 더 단순한 구현 및 유지보수 용이
        1. 서버 부하 테스트 결과, 일정 주기의 REST API 호출이 적합
    • MongoDB를 사용한 이유
        1. 부하 분산 : 글쓰기 동시접속자가 많은 상황에서 RDB에 쓰기 요청이 과도하게 몰릴 위험이 있음
        1. 목적에 맞는 활용 : 데이터 무결성이 보장되지 않아도 되는 데이터를 RDB에 저장하는 것이 사용 목적에 맞지 않았음
[결과]
  • 글쓰기 중 이탈한 사용자 VOC 80% 감소 (10개 → 2개)
  • 자동저장 기능 도입 후 사용자 이탈 후에도 작성 글이 복구되었다는 긍정적 피드백 다수 확보
  • API 호출 주기 최적화 및 부하 테스트를 통해 서버 안정성 확보
[활용기술]
  • Java, Spring Boot, JPA, QueryDSL, MongoDB
 
Built with Potion.so