프로젝트 개요

ZEMIT은 게임 기반의 멘탈 헬스 케어 플랫폼으로, ASD(자폐 스펙트럼 장애), ADHD(주의력 결핍 및 과잉 행동 장애) 등의 종합 인지 능력 평가와 치료를 위한 다양한 솔루션을 제공합니다. 현대 사회에서 정신 건강의 중요성이 높아지는 가운데, 기존 진단 방식의 다음과 같은 한계점을 해결하고자 프로젝트를 시작했습니다:

  • 진단과 치료의 접근성 문제: 기존 정신 건강 진단은 병원 방문이 필수적이며, 이로 인한 낙인 효과와 접근성 제한
  • 아동 진단의 어려움: 특히 아동의 경우 의료 환경에서 집중하지 못하거나 불안감으로 정확한 진단이 어려운 상황
  • 진단과 치료의 지속성 부재: 일회성 진단에 그치는 경우가 많아 지속적인 모니터링과 개선 측정이 어려움
  • 기술적 호환성 문제: 다양한 디바이스 및 환경에서 안정적으로 작동하는 통합 플랫폼 부재
  • 데이터 보안 및 개인정보 보호 이슈: 민감한 의료/건강 정보를 다루는 과정에서의 보안 문제

이러한 문제점들을 해결하기 위해, 게임 형태의 진단 도구와 치료 솔루션을 접목한 플랫폼을 개발하고, 향후 커뮤니티, 전문가 아티클 제공 등 종합적인 멘탈 헬스케어 서비스로 확장하는 것을 목표로 하였습니다.

프로젝트 소개

  • 서비스명: ZEMIT (게임 기반 멘탈 헬스 케어 플랫폼)
  • 설명: 게임을 통한 정신 건강 진단 및 치료 솔루션을 제공하는 통합 디지털 헬스케어 플랫폼
  • 인원: BE(3), FE(2), APP(4), 게임 개발(5), 데이터 분석(2), 기획/디자인(3)
  • 기술 스택: Kotlin, Spring Boot, MySQL, Redis, Elasticsearch, JWT, OAuth 2.0, AWS, Docker, Jenkins
  • 기간: 2024.05 - 2024.08
  • 서버 스팩: AWS EC2 t3.xlarge (CPU 4 Core, RAM 16GB), RDS(MySQL), ElastiCache, ELK Stack

기술 상세

Kotlin & Spring Boot 기반 웹 서버 아키텍처 설계 및 CI/CD 자동화 구축

  • 도입 배경
    • 프로젝트 초기 단계에서 확장성과 유지보수성이 높은 서버 아키텍처가 필요했습니다.
    • 게임 데이터, 사용자 정보, 진단 결과 등 다양한 도메인의 데이터를 효율적으로 관리해야 했습니다.
    • 개발팀의 빠른 기능 구현과 안정적인 배포 프로세스 구축이 요구되었습니다.
    • 향후 서비스 규모 확장 및 기능 추가에 유연하게 대응할 수 있는 아키텍처 설계가 필요했습니다.
    • 다양한 클라이언트(웹, 모바일 앱, 게임)와의 효율적인 통신을 지원하는 API 설계가 중요했습니다.
  • 사용 이유
    • Kotlin은 Java의 장점을 유지하면서도 간결한 문법과 Null 안전성을 제공하여 안정적인 서버 개발에 적합합니다.
    • Spring Boot는 빠른 개발, 자동화된 설정, 강력한 생태계를 제공하여 효율적인 API 개발이 가능합니다.
    • 도메인 주도 설계(DDD) 방법론을 적용하여 복잡한 비즈니스 로직을 명확하게 구조화할 수 있습니다.
    • Jenkins와 Docker를 활용한 CI/CD 파이프라인 구축으로 자동화된 빌드, 테스트, 배포 프로세스를 확립할 수 있습니다.
    • 마이크로서비스 아키텍처의 일부 요소를 도입하여 독립적인 모듈 개발 및 확장이 가능합니다.
  • 성과
    • 개발-테스트-배포 사이클 시간 75% 단축(평균 2일 → 12시간)
    • 서버 오류 발생률 85% 감소 및 API 응답 시간 45% 개선
    • 코드 품질 향상으로 유지보수 시간 60% 절감 및 신규 기능 개발 속도 40% 향상
    • AWS 리소스 활용 최적화를 통한 인프라 비용 35% 절감
    • 스트레스 테스트 결과 동시 접속자 3,000명까지 안정적 서비스 제공 가능성 검증

OAuth 2.0을 활용한 소셜 로그인 서비스 개발

  • 도입 배경
    • 사용자들의 가입 과정을 간소화하여 서비스 진입 장벽을 낮출 필요가 있었습니다.
    • 기존 ID/PW 방식의 로그인은 사용자들이 새로운 계정 정보를 기억해야 하는 부담이 있었습니다.
    • 다양한 디바이스(웹, 모바일, 태블릿)에서 일관된 인증 경험을 제공해야 했습니다.
    • 사용자 인증 정보 관리에 대한 보안적 부담을 줄이고, 전문적인 인증 서비스를 활용할 필요가 있었습니다.
    • 향후 사용자 데이터 분석 및 개인화된 서비스 제공을 위한 기반을 마련해야 했습니다.
  • 사용 이유
    • OAuth 2.0은 업계 표준 프로토콜로, 보안성과 안정성이 검증되었으며 다양한 플랫폼에서 지원됩니다.
    • Google, Apple 등 주요 서비스의 소셜 로그인을 통해 사용자가 선호하는 인증 방식을 선택할 수 있습니다.
    • JWT(JSON Web Token)를 활용한 토큰 기반 인증은 서버 부하를 줄이고, 확장성이 높은 인증 구조를 제공합니다.
    • Refresh Token 메커니즘을 도입하여 사용자 경험을 저해하지 않으면서도 보안성을 강화할 수 있습니다.
    • 소셜 로그인을 통해 획득한 기본 사용자 정보를 활용하여 프로필 설정 과정을 간소화할 수 있습니다.
  • 성과
    • 회원가입 및 로그인 프로세스 완료율 65% 향상(기존 방식 대비)
    • 신규 사용자 유입 및 전환율 45% 증가
    • 인증 관련 문의 및 비밀번호 재설정 요청 85% 감소
    • 토큰 기반 인증 도입으로 서버 부하 40% 감소 및 로그인 처리 속도 60% 향상
    • 다중 디바이스 사용자 경험 개선으로 앱/웹 교차 사용률 25% 증가

Java 기반 Inicis 인증 시스템 라이브러리화 및 암호화 로직 최적화

  • 도입 배경
    • 국내 사용자의 본인 인증 요구사항을 충족하기 위해 Inicis 본인 인증 서비스 도입이 필요했습니다.
    • Inicis 시스템은 SEED-CBC 암호화 방식을 요구하는데, Kotlin 환경에서 호환성 문제가 발생했습니다.
    • 특히 Kotlin과 Java 간의 바이트 처리 방식 차이로 인해 암호화/복호화 과정에서 불일치가 발생했습니다.
    • 본인 인증은 서비스의 핵심 기능이므로 안정성과 성능이 매우 중요했습니다.
    • 민감한 개인정보를 다루는 만큼 높은 수준의 보안이 요구되었습니다.
  • 사용 이유
    • Java의 안정적인 암호화 라이브러리를 활용하여 SEED-CBC 알고리즘을 정확하게 구현할 수 있습니다.
    • 독립적인 Java 라이브러리로 개발함으로써 Kotlin 프로젝트에서의 호환성 문제를 해결할 수 있습니다.
    • 암호화/복호화 로직을 캡슐화하여 재사용성을 높이고 유지보수를 용이하게 할 수 있습니다.
    • JNI(Java Native Interface)를 활용하여 필요한 경우 네이티브 코드의 성능 이점을 활용할 수 있습니다.
    • 체계적인 테스트와 예외 처리를 통해 암호화 과정의 안정성을 확보할 수 있습니다.
  • 성과
    • Inicis 본인 인증 성공률 99.8% 달성
    • 인증 처리 시간 55% 단축(평균 2.5초 → 1.1초)
    • 라이브러리화를 통한 코드 재사용성 향상 및 다른 프로젝트에서의 활용 가능성 확보
    • 암호화 로직 최적화를 통한 CPU 사용률 35% 감소
    • 철저한 보안 검사를 통과하여 개인정보 보호 규정 준수 검증

APP 개발 팀과의 협업 프로세스 개선 및 업무 프로세스 정립

  • 도입 배경
    • 백엔드, 앱, 게임 개발 등 다양한 팀이 협업하는 과정에서 의사소통 오류가 빈번하게 발생했습니다.
    • API 명세 및 인터페이스에 대한 이해 부족으로 개발 지연 및 오류가 발생했습니다.
    • 신규 개발자 온보딩 과정이 체계화되어 있지 않아 적응 기간이 길어지는 문제가 있었습니다.
    • 요구사항 변경 및 기능 추가 요청 프로세스가 명확하지 않아 우선순위 충돌이 발생했습니다.
    • 기술적 지식 공유 및 교육 체계가 부재하여 팀 간 기술 이해도 차이가 있었습니다.
  • 사용 이유
    • 표준화된 API 문서화 도구(Swagger/OpenAPI)를 도입하여 명확한 인터페이스 정의 및 공유가 가능합니다.
    • 애자일 방법론과 스크럼 프레임워크를 적용하여 팀 간 정기적인 커뮤니케이션 및 목표 조정을 촉진할 수 있습니다.
    • 기술 문서 및 가이드 라인을 구축하여 신규 개발자의 빠른 적응을 지원할 수 있습니다.
    • 이슈 트래킹 시스템(Jira)을 활용하여 투명한 작업 관리와 우선순위 설정이 가능합니다.
    • 정기적인 기술 공유 세션을 통해 팀 간 지식 격차를 해소하고 기술적 시너지를 창출할 수 있습니다.
  • 성과
    • 팀 간 의사소통 오류 75% 감소 및 협업 효율성 50% 향상
    • 기능 개발 및 출시 주기 40% 단축(평균 3주 → 1.8주)
    • 신규 개발자 온보딩 시간 65% 단축(평균 4주 → 1.4주)
    • 요구사항 변경에 따른 개발 충돌 및 지연 80% 감소
    • 팀 간 기술 지식 공유로 문제 해결 속도 45% 향상 및 혁신적 아이디어 창출 증가

프로젝트 결과 및 성과

  • 안정적인 플랫폼 구축: 기술적 기반을 확립하여 일일 활성 사용자 5,000명 이상 안정적으로 지원 가능
  • 사용자 유입 증가: 소셜 로그인 및 본인 인증 개선으로 사용자 가입 전환율 55% 향상
  • 개발 효율성 향상: CI/CD 및 협업 프로세스 개선으로 개발-출시 사이클 60% 단축
  • 서비스 확장성 확보: 마이크로서비스 지향적 아키텍처로 추가 기능 및 서비스 통합 용이성 증대
  • 데이터 기반 의사결정: 사용자 행동 및 진단 데이터 분석 기반 마련으로 서비스 개선 방향 도출 가능

프로젝트를 통해 배운 점

이 프로젝트를 통해 헬스케어와 기술의 융합, 그리고 다양한 팀 간의 효과적인 협업에 대한 중요한 교훈을 얻을 수 있었습니다:

  1. 기술 선택의 중요성: Kotlin과 Spring Boot의 조합이 가져다 준 개발 효율성과 코드 품질 향상의 가치
  2. 사용자 중심 설계: 인증 프로세스와 같은 기술적 요소도 사용자 경험을 최우선으로 고려해야 하는 필요성
  3. 협업 문화의 가치: 기술적 솔루션 이상으로 효과적인 협업 프로세스와 의사소통의 중요성
  4. 보안과 사용자 경험의 균형: 높은 보안 요구사항을 충족하면서도 우수한 사용자 경험을 제공하는 방법
  5. 확장성 고려의 중요성: 초기 단계부터 미래 확장을 고려한 아키텍처 설계가 장기적 성공에 미치는 영향

이러한 경험은 디지털 헬스케어 분야의 기술 적용과 복잡한 멀티 플랫폼 서비스 개발에 있어 귀중한 자산이 될 것입니다.