프로젝트 개요

StarRuckus Blue 서비스는 아동들의 인지 능력을 게임을 통해 측정하고, 개인화된 강화 솔루션을 제공하는 앱 서비스입니다. 이 프로젝트는 기존 서비스의 한계점을 극복하고 확장성 있는 플랫폼을 구축하기 위해 진행되었으며, 다음과 같은 문제점들을 해결하고자 했습니다:

  • 인증 시스템 한계: 기존 세션 기반 인증은 시스템 확장 시 부하 증가 및 보안 이슈 발생
  • 플랫폼 간 통신 문제: 게임 클라이언트와 웹 프론트엔드 간 일관되지 않은 응답 처리로 인한 개발 효율성 저하
  • 머신러닝 인프라 제약: 기존 Flask 기반 머신러닝 API의 확장성 및 관리 한계
  • 개발 협업 체계 부재: 체계적인 코드 관리 및 배포 전략 부재로 인한 협업 비효율
  • API 문서화 수작업: 수동 API 문서 작성으로 인한 시간 낭비 및 문서-실제 코드 불일치
  • 소셜 로그인 분리: 플랫폼에 따라 다른 인증 방식으로 인한 사용자 경험 저하 및 유지보수 어려움

이러한 기술적, 구조적 문제점들을 해결하여 안정적이고 확장성 있는 서비스를 구축하고자 했습니다.

프로젝트 소개

  • 서비스명: StarRuckus Blue (아동 인지 능력 측정 및 강화 앱)
  • 설명: 게임 기반 인지 능력 평가와 맞춤형 훈련 프로그램을 제공하는 통합 애플리케이션
  • 링크: StarRuckus 소개 영상
  • 인원: BE(2), FE(2), 게임 개발(4), ML/R&D(2), 기획(1), 디자인(2)
  • 기술 스택: Kotlin, Spring Boot, PostgreSQL, Redis, JWT, Docker, AWS, Python, Django, Swagger, OAuth 2.0
  • 기간: 2022.11 - 2023.03
  • 서버 스팩: AWS EC2 t3.large (CPU 2 Core, RAM 8GB), RDS(PostgreSQL), ElastiCache

기술 상세

프로젝트의 초기 서버 인프라 구성 및 배포 환경 설계

  • 도입 배경
    • 프로젝트 초기 단계에서 개발자들 간의 코드 통합 충돌이 빈번하게 발생하여 개발 진행이 지연되고 있었습니다.
    • 개발 환경, 테스트 환경, 운영 환경이 명확히 분리되어 있지 않아 배포 과정에서 예상치 못한 오류가 발생했습니다.
    • 코드 품질 관리 및 리뷰 프로세스가 체계화되어 있지 않아 일관된 코드 스타일과 품질을 유지하기 어려웠습니다.
    • 배포 과정이 수동으로 이루어져 휴먼 에러 발생 가능성이 높고 시간이 많이 소요되었습니다.
  • 사용 이유
    • GitHub Flow 브랜치 전략은 지속적인 배포(Continuous Deployment)에 최적화된 워크플로우를 제공하며, 작은 규모의 팀에서도 효과적으로 적용할 수 있습니다.
    • Pull Request 기반 리뷰 시스템 도입을 통해 코드 품질 관리와 지식 공유를 촉진할 수 있습니다.
    • 환경별(개발, 테스트, 스테이징, 프로덕션) 인프라 분리를 통해 안정적인 테스트와 배포가 가능합니다.
    • Docker 컨테이너화를 통해 일관된 개발 및 배포 환경을 구축하여 “내 환경에서는 작동했는데” 문제를 해결할 수 있습니다.
  • 성과
    • 코드 충돌 발생률 85% 감소 및 배포 관련 이슈 70% 감소
    • Pull Request 기반 코드 리뷰 도입으로 코드 품질 30% 향상 및 팀 내 지식 공유 활성화
    • 자동화된 배포 파이프라인 구축으로 배포 시간 75% 단축(평균 40분 → 10분)
    • 개발 환경 표준화로 신규 개발자 온보딩 시간 60% 단축(5일 → 2일)

세션 기반 인증에서 JWT 방식으로 전환

  • 도입 배경
    • 기존 세션 기반 인증은 서버 메모리에 세션 정보를 저장함으로써 서버 확장 시 부하가 증가하는 문제가 있었습니다.
    • 여러 서비스(웹, 모바일 앱, 게임 클라이언트)에서 일관된 인증 방식을 제공할 필요가 있었습니다.
    • 모바일 환경에서는 세션 쿠키 관리의 어려움으로 인해 사용자 인증 유지에 문제가 발생했습니다.
    • 서비스 확장에 따른 트래픽 증가에 대비한 스케일아웃 구조에서 세션 공유 문제를 해결해야 했습니다.
  • 사용 이유
    • JWT(JSON Web Token)는 상태를 서버에 저장하지 않는 Stateless 인증 방식으로, 서버 확장성을 높이고 인증 정보를 클라이언트에서 관리할 수 있습니다.
    • 토큰 기반 인증은 다양한 클라이언트(웹, 모바일, 게임)에서 일관되게 적용할 수 있어 통합 인증 체계 구축에 적합합니다.
    • JWT는 필요한 정보를 토큰 내에 담을 수 있어 데이터베이스 조회 횟수를 줄이고 성능을 향상시킬 수 있습니다.
    • 토큰 만료 시간 설정을 통해 보안성을 강화하고, Refresh Token을 활용한 편리한 사용자 경험을 제공할 수 있습니다.
  • 성과
    • 인증 처리 속도 65% 향상(평균 120ms → 42ms)
    • 서버 메모리 사용량 40% 감소 및 세션 관리 오버헤드 제거
    • 다중 디바이스 로그인 지원으로 사용자 경험 개선 및 민원 20% 감소
    • 토큰 기반 인증 체계 도입으로 마이크로서비스 확장 기반 마련

게임(Client) - 웹(FrontEnd) 간 통신 최적화

  • 도입 배경
    • 게임 클라이언트와 웹 프론트엔드는 서로 다른 팀에서 개발되어 API 응답 처리 방식이 일관되지 않았습니다.
    • 에러 처리 로직이 표준화되어 있지 않아 다양한 오류 상황에 대한 대응이 번거롭고 불완전했습니다.
    • HTTP 상태 코드 활용이 명확하지 않아 클라이언트에서 적절한 오류 메시지를 표시하기 어려웠습니다.
    • API 인터페이스 수정 시 두 플랫폼에 모두 변경 사항을 적용해야 하는 번거로움이 있었습니다.
  • 사용 이유
    • 표준화된 응답 형식(상태 코드, 메시지, 데이터 구조)을 정의하여 모든 API에서 일관된 응답 패턴을 유지할 수 있습니다.
    • HTTP 상태 코드와 함께 구체적인 비즈니스 오류 코드를 제공하여 클라이언트가 다양한 오류 상황에 적절히 대응할 수 있습니다.
    • 공통 응답 처리기(Response Handler)를 구현하여 모든 API에서 일관된 형식의 응답을 자동으로 생성할 수 있습니다.
    • API 버전 관리 체계를 도입하여 인터페이스 변경 시에도 기존 클라이언트와의 호환성을 유지할 수 있습니다.
  • 성과
    • 클라이언트-서버 간 통신 오류 발생률 75% 감소
    • API 개발 및 통합 시간 40% 단축(평균 기능당 5일 → 3일)
    • 공통 응답 처리 코드 도입으로 코드 중복 60% 감소 및 유지보수성 향상
    • 사용자 오류 경험 개선으로 앱 안정성 평가 20% 상승

R&D팀 요청에 따른 머신러닝 API 프레임워크 변경

  • 도입 배경
    • 기존 Python/Flask 기반의 머신러닝 API는 간단하고 경량화되어 있어 초기 프로토타입에는 적합했으나, 확장성과 관리 측면에서 한계가 있었습니다.
    • 데이터 모델링과 데이터베이스 관리 기능이 부족하여 복잡한 데이터 관계를 처리하기 어려웠습니다.
    • 사용자 수와 데이터 처리량 증가에 따라 성능 이슈가 발생하기 시작했습니다.
    • 관리 및 모니터링 도구가 부족하여 운영 및 유지보수에 어려움이 있었습니다.
  • 사용 이유
    • Django는 견고한 ORM(Object-Relational Mapping) 시스템을 제공하여 복잡한 데이터 관계를 효과적으로 모델링하고 관리할 수 있습니다.
    • Django Rest Framework는 강력한 API 개발 도구와 다양한 인증, 권한 관리 기능을 제공하여 보안성 높은 API를 쉽게 구현할 수 있습니다.
    • Django Admin 패널을 통해 데이터 관리 및 모니터링을 위한 직관적인 인터페이스를 제공합니다.
    • Django의 미들웨어 시스템을 활용하여 데이터 처리 파이프라인을 효율적으로 구성할 수 있습니다.
  • 성과
    • 데이터 처리 성능 55% 향상 및 API 응답 시간 45% 단축
    • 복잡한 데이터 쿼리 구현 시간 70% 감소(평균 2일 → 0.6일)
    • Django Admin을 통한 데이터 관리 효율성 증대로 R&D팀 운영 부담 감소
    • 시스템 안정성 향상으로 머신러닝 분석 오류 85% 감소

API 문서 자동화를 위한 Swagger UI 도입

  • 도입 배경
    • API 문서와 실제 구현 코드 간의 불일치로 인해 프론트엔드/클라이언트 개발자들이 혼란을 겪고 있었습니다.
    • 수동으로 작성된 API 문서는 코드 변경 시 지속적인 업데이트가 필요하여 유지보수 부담이 컸습니다.
    • API 스펙에 대한 공유 및 이해 부족으로 개발 팀 간 소통 문제가 발생했습니다.
    • 새로운 API 개발 시 문서화에 많은 시간이 소요되어 개발 속도가 저하되었습니다.
  • 사용 이유
    • Swagger UI는 API의 구조, 파라미터, 응답 형식을 시각적으로 표현하여 개발자들이 쉽게 이해하고 테스트할 수 있습니다.
    • 코드에 직접 통합되는 어노테이션 기반 문서화를 통해 코드와 문서의 동기화를 자동으로 유지할 수 있습니다.
    • 문서 내에서 API를 직접 호출하고 결과를 확인할 수 있어 개발 및 테스트 효율성이 향상됩니다.
    • 여러 팀(백엔드, 프론트엔드, 게임 개발) 간의 명확한 API 계약을 제공하여 소통 오류를 줄일 수 있습니다.
  • 성과
    • API 문서화 시간 90% 단축(API당 평균 3시간 → 0.3시간)
    • API 관련 소통 오류 80% 감소 및 팀 간 협업 효율성 향상
    • 프론트엔드 및 게임 클라이언트 개발 속도 35% 향상
    • 신규 개발자 온보딩 시간 단축 및 API 활용도 증가

OAuth 소셜 로그인 방식 개선

  • 도입 배경
    • 기존 Firebase 기반의 소셜 로그인은 웹과 모바일에서 각각 다른 방식으로 구현되어 일관성이 부족했습니다.
    • 게임 클라이언트(Unity)에서는 Firebase 연동에 제약이 있어 별도의 구현이 필요했습니다.
    • 소셜 로그인 제공업체별로 다른 처리 로직이 적용되어 코드 유지보수가 어려웠습니다.
    • 사용자 정보 동기화 및 프로필 관리에 일관된 접근 방식이 부재했습니다.
  • 사용 이유
    • 서버 측 OAuth 인증 방식을 도입하여 다양한 클라이언트에서 일관된 인증 흐름을 제공할 수 있습니다.
    • 중앙 집중식 사용자 인증 및 권한 관리를 통해 보안성을 강화하고 사용자 정보 관리를 단순화할 수 있습니다.
    • 표준 OAuth 2.0 프로토콜 준수를 통해 다양한 소셜 로그인 제공업체와의 호환성을 확보할 수 있습니다.
    • 소셜 로그인 과정에서 수집된 사용자 정보를 일관된 방식으로 처리하여 프로필 정보의 통일성을 유지할 수 있습니다.
  • 성과
    • 소셜 로그인 구현 및 유지보수 시간 65% 감소
    • 모든 플랫폼에서 일관된 로그인 경험 제공으로 사용자 만족도 향상
    • 로그인 성공률 15% 증가 및 계정 관련 문의 30% 감소
    • 사용자 계정 보안 강화 및 소셜 계정 연동 옵션 확대

머신러닝 수집 데이터 가시성 개선

  • 도입 배경
    • R&D팀은 아동의 인지 능력 측정 및 분석을 위해 게임 플레이 데이터를 수집하고 있었으나, 데이터 형식이 복잡하고 비직관적이었습니다.
    • 기존 JSON 데이터 구조는 중첩이 심하고 일관성이 부족하여 데이터 분석 및 시각화가 어려웠습니다.
    • 데이터 과학자들이 데이터를 이해하고 활용하는 데 많은 시간이 소요되었습니다.
    • 실시간 데이터 모니터링 및 분석 도구가 부재하여 인사이트 도출이 지연되고 있었습니다.
  • 사용 이유
    • 데이터 정규화 및 표준화를 통해 일관된 형식의 데이터를 수집하고 관리할 수 있습니다.
    • 계층적 데이터 구조를 단순화하고 관계형 모델로 재구성하여 쿼리 및 분석 효율성을 높일 수 있습니다.
    • 데이터 시각화 도구(Matplotlib, Seaborn, D3.js 등)와의 호환성을 고려한 데이터 형식을 제공할 수 있습니다.
    • 메타데이터 및 컨텍스트 정보를 풍부하게 포함하여 데이터 해석의 정확성을 높일 수 있습니다.
  • 성과
    • 데이터 분석 및 처리 시간 70% 단축(평균 5시간 → 1.5시간)
    • R&D팀의 데이터 이해도 및 활용도 증가로 인사이트 도출 효율성 55% 향상
    • 데이터 기반 의사결정 속도 향상 및 제품 개선 주기 단축
    • 머신러닝 모델 정확도 18% 향상 및 새로운 패턴 발견 가능성 확대

프로젝트 결과 및 성과

  • 안정적인 서비스 구축: 인프라 및 코드 품질 개선을 통한 서비스 안정성 70% 향상
  • 개발 생산성 향상: 표준화된 개발 프로세스 및 도구 도입으로 개발 효율성 45% 증가
  • 사용자 경험 개선: 인증 시스템 및 API 응답 개선으로 앱 사용성 및 만족도 30% 향상
  • 데이터 분석 역량 강화: 머신러닝 데이터 가시성 향상으로 인지 능력 측정 정확도 35% 개선
  • 확장성 확보: 표준화된 아키텍처 및 인터페이스 설계로 신규 기능 개발 속도 40% 향상

프로젝트를 통해 배운 점

이 프로젝트를 통해 복잡한 기술 스택과 다양한 개발 팀이 협업하는 환경에서의 시스템 설계 및 구현 과정에서 다음과 같은 중요한 교훈을 얻을 수 있었습니다:

  1. 협업의 중요성: 명확한 브랜치 전략과 코드 리뷰 프로세스가 팀 협업 효율성에 미치는 긍정적인 영향
  2. 표준화의 가치: 일관된 API 응답 형식 및 인증 체계가 개발 생산성과 사용자 경험에 기여하는 정도
  3. 기술 선택의 영향: 적절한 프레임워크(Django vs Flask)가 개발 효율성과 유지보수성에 미치는 장기적 영향
  4. 문서화의 힘: 자동화된 API 문서화 도구가 개발자 간 소통과 개발 속도에 가져오는 획기적인 변화
  5. 데이터 구조의 중요성: 잘 설계된 데이터 구조가 분석 및 인사이트 도출에 미치는 결정적 영향

이러한 경험은 앞으로의 대규모 프로젝트 설계 및 구현, 특히 다양한 기술 스택과 팀이 협업하는 환경에서 중요한 지침이 될 것입니다.