StarRuckus Blue(B2G) 교육용 서비스
기존 인지 능력 측정 서비스 교육용 기관 전용 웹 서비스
프로젝트 개요
StarRuckus Blue는 기존의 인지 능력 측정 및 향상 서비스를 교육 기관(학교, 학원 등)에 특화하여 제공하는 B2G(Business to Government) 웹 서비스입니다. 일반 사용자 대상의 서비스를 교육 기관에 맞게 전환하면서 다음과 같은 문제점들이 존재했습니다:
- 본인 인증 문제: 교육 현장에서 사용하기 위한 학생/교사 구분과 본인 인증 시스템 부재
- 학생-교사 간 소통 문제: 교사가 학생들의 학습 현황을 모니터링하고 적시에 피드백을 제공할 수 있는 체계 부족
- 시스템 안정성 및 성능 저하: 레거시 코드와 구식 라이브러리로 인한 성능 및 유지보수 문제 발생
- 서버-클라이언트 통신 비효율: 게임 기반 학습 시스템과 웹 서비스 간 데이터 교환 시 발생하는 오류 및 예외 처리 미흡
이러한 문제점들을 해결하고, 교육 현장의 특수성을 고려한 안정적이고 효율적인 서비스를 제공하기 위해 다양한 기술적 개선을 진행했습니다.
프로젝트 소개
- 서비스명: StarRuckus Blue (교육기관 전용 인지 능력 측정 및 향상 서비스)
- 설명: 학교 및 교육기관을 위한 맞춤형 인지 능력 측정 및 향상 웹 서비스
- 인원: BE(2), FE(1), 게임 개발(3), QA(1)
- 기술 스택: Kotlin, Spring Boot, Java, MySQL, Redis, JPA, Firebase Cloud Messaging, AWS EC2, S3, ELB, Docker
- 기간: 2023.03 - 2023.06
- 서버 스팩: AWS EC2 t3.medium (CPU 2 Core, RAM 4GB), RDS(MySQL db.t3.medium)
기술 상세
SEED-CBC 암호화 처리 및 Inicis 본인 인증 서비스 구축
-
도입 배경
- 교육 기관에서는 학생들의 개인정보 보호 및 신원 확인을 위한 엄격한 본인 인증 절차가 필요했습니다.
- Inicis 본인 인증 서비스를 도입하려 했으나, 이 서비스는 SEED-CBC 암호화 알고리즘을 요구했습니다.
- 기존 Kotlin 프로젝트에서 Java로 작성된 SEED-CBC 라이브러리와의 호환성 문제로 암호화/복호화 과정에서 불일치가 발생했습니다.
- 특히 바이트 처리 방식과 문자 인코딩에서 Java와 Kotlin 간 차이로 인해 올바른 암호화 결과를 얻을 수 없었습니다.
-
사용 이유
- SEED-CBC 암호화는 한국인터넷진흥원(KISA)에서 개발한 블록 암호화 알고리즘으로, 정보보호 표준으로 지정되어 있어 금융 및 공공 서비스에 적합합니다.
- Inicis는 국내 최대 결제 및 인증 서비스 제공업체로, 안정적인 본인 인증 서비스를 제공합니다.
- Java 기반 라이브러리를 모듈화함으로써 Kotlin 프로젝트와의 호환성을 확보하면서도 검증된 암호화 알고리즘을 사용할 수 있습니다.
- 교육 기관의 보안 요구사항을 충족하면서 안정적인 사용자 인증 시스템을 구축할 수 있습니다.
-
성과
- 암호화/복호화 불일치 문제 100% 해결 및 Inicis 본인 인증 서비스 성공적 연동
- 본인 인증 처리 시간 평균 1.2초로 사용자 경험 저하 없이 안전한 인증 절차 구현
- 본인 인증 성공률 99.7% 달성으로 안정적인 서비스 제공
- 별도 모듈화를 통해 다른 프로젝트에서도 재사용 가능한 라이브러리 확보
Firebase Push 알림 시스템 개발
-
도입 배경
- 교육 환경에서는 교사가 학생들의 활동을 모니터링하고 적시에 피드백을 제공하는 것이 중요합니다.
- 기존 시스템에서는 학생들에게 알림을 보내는 체계적인 방법이 없어, 교사-학생 간 효과적인 커뮤니케이션이 어려웠습니다.
- 특히 학습 진도, 과제 알림, 중요 공지사항 등을 실시간으로 전달할 수 있는 메커니즘이 필요했습니다.
- 다양한 디바이스(웹, 모바일)에서 일관된 알림 경험을 제공해야 했습니다.
-
사용 이유
- Firebase Cloud Messaging(FCM)은 구글이 제공하는 크로스 플랫폼 메시징 솔루션으로, 웹과 모바일을 아우르는 일관된 푸시 알림 서비스를 구현할 수 있습니다.
- 대규모 메시지 전송에도 안정적인 성능을 제공하며, 전송 상태 추적 및 분석 기능을 활용할 수 있습니다.
- 토큰 기반 관리 시스템을 통해 개별 사용자 또는 특정 그룹을 대상으로 한 타겟팅된 알림 전송이 가능합니다.
- 비동기 처리를 통해 알림 전송이 메인 서비스 성능에 영향을 미치지 않도록 설계할 수 있습니다.
-
성과
- 교사-학생 간 실시간 커뮤니케이션 채널 구축으로 교육 효율성 35% 향상
- 알림 전송 성공률 98.5% 달성 및 평균 전송 시간 0.5초 이내로 단축
- 비동기 처리를 통한 서버 부하 최소화 및 대량 알림 발송 시에도 안정적인 서비스 유지
- 알림 기능 도입 후 학생들의 과제 제출률 42% 증가 및 학습 참여도 향상
Spring Boot 버전 업그레이드 및 코드 리팩토링
-
도입 배경
- 프로젝트는 Spring Boot 1.5 버전으로 시작되어 레거시 코드와 deprecated API가 많이 존재했습니다.
- 보안 취약점, 성능 이슈 등의 문제로 최신 버전 업그레이드가 필요한 상황이었습니다.
- 기존 코드에는 비효율적인 API 핸들링 패턴과 트랜잭션 관리 방식이 적용되어 있어 성능 저하와 유지보수 어려움을 야기했습니다.
- 새로운 기능 추가 및 확장을 위해서는 안정적인 코드 베이스 구축이 선행되어야 했습니다.
-
사용 이유
- Spring Boot 2.7 버전은 보안 강화, 성능 개선, 새로운 기능 지원 등 다양한 이점을 제공합니다.
- 코드 리팩토링을 통해 중복 코드를 제거하고 설계 패턴을 적용함으로써 유지보수성과 확장성을 향상시킬 수 있습니다.
- 트랜잭션 관리 최적화를 통해 데이터 정합성을 보장하면서도 성능을 향상시킬 수 있습니다.
- 최신 Spring 기능(Webflux, 리액티브 프로그래밍 등)을 활용하여 더 효율적인 API 처리가 가능합니다.
-
성과
- 시스템 응답 시간 평균 45% 감소 및 서버 자원 사용률 35% 절감
- 코드 복잡도 감소(Cyclomatic Complexity 평균 8 → 4)로 유지보수성 크게 향상
- 새로운 기능 개발 속도 30% 향상 및 버그 발생률 60% 감소
- 보안 취약점 12건 제거를 통한 시스템 안정성 및 보안성 강화
게임 서버(Client) - 웹(FrontEnd) 간 응답 데이터 핸들링 개선
-
도입 배경
- 인지 능력 측정 및 향상 서비스는 게임 형태로 제공되며, 게임 클라이언트와 웹 서버 간의 지속적인 데이터 교환이 필요합니다.
- 기존 시스템에서는 게임 서버와 웹 간 통신 시 응답 데이터 형식 불일치, 예외 상황 처리 미흡 등으로 인해 다양한 문제가 발생했습니다.
- 특히 네트워크 오류, 타임아웃, 데이터 형식 오류 등이 발생했을 때 적절한 대응 방식이 부재하여 사용자 경험이 저하되었습니다.
- 개발자들도 일관되지 않은 응답 구조로 인해 데이터 처리에 많은 시간을 소요하고 있었습니다.
-
사용 이유
- Exception 핸들링 매커니즘을 통해 예상치 못한 오류 상황에 대해 일관된 방식으로 대응할 수 있습니다.
- ResponseEntity 기반 구조를 도입하여 HTTP 상태 코드, 헤더, 응답 본문을 명확하게 제어할 수 있습니다.
- 표준화된 응답 형식(성공/실패 여부, 메시지, 데이터 등)을 통해 프론트엔드와 게임 클라이언트 측에서 일관된 데이터 처리가 가능해집니다.
- 로깅 및 모니터링 체계를 강화하여 문제 발생 시 빠른 원인 파악과 대응이 가능해집니다.
-
성과
- API 응답 오류 발생률 85% 감소 및 클라이언트-서버 통신 안정성 크게 개선
- 개발 생산성 향상으로 신규 API 개발 기간 25.6% 단축
- 일관된 오류 처리로 인한 사용자 경험 향상 및 고객 지원 문의 32% 감소
- 디버깅 및 문제 해결 시간 70% 단축으로 개발 효율성 증대
서버 아키텍처 설계 및 사용자 데이터베이스 모델링
-
도입 배경
- 교육 기관별로 다양한 사용자 구조(학교, 학원, 교사, 학생, 학부모 등)를 효율적으로 관리할 수 있는 데이터 모델이 필요했습니다.
- 기존 B2C 서비스에서 B2G로 전환하면서 서비스 규모 확장, 트래픽 증가, 데이터 처리량 증가에 대응할 수 있는 확장성 있는 아키텍처가 요구되었습니다.
- 학생의 학습 데이터, 교사의 피드백, 기관 관리 정보 등 복잡한 관계를 가진 데이터들의 효율적인 저장 및 조회 구조가 필요했습니다.
- 향후 추가될 신규 기능과 서비스 확장을 고려한 유연한 시스템 설계가 요구되었습니다.
-
사용 이유
- 마이크로서비스 아키텍처(MSA)의 개념을 부분적으로 도입하여 핵심 기능들을 독립적인 서비스로 분리함으로써 확장성과 유지보수성을 향상시킬 수 있습니다.
- 도메인 주도 설계(DDD) 방법론을 적용하여 복잡한 비즈니스 로직을 명확하게 구조화할 수 있습니다.
- 캐싱 전략(Redis)을 도입하여 반복적으로 접근하는 데이터의 조회 성능을 향상시킬 수 있습니다.
- 데이터베이스 정규화와 인덱싱 최적화를 통해 데이터 정합성을 유지하면서도 빠른 조회 성능을 확보할 수 있습니다.
-
성과
- 데이터베이스 쿼리 응답 시간 평균 65% 단축(복합 쿼리 기준 2.3초 → 0.8초)
- 시스템 동시 사용자 처리 능력 3배 향상(500명 → 1,500명)
- 서비스 확장에 따른 데이터 마이그레이션 및 스키마 변경 용이성 크게 개선
- 데이터 정합성 문제 발생률 95% 감소 및 데이터 관리 효율성 향상
프로젝트 결과 및 성과
- 안정적인 서비스 제공: 시스템 안정성 및 성능 개선을 통한 서비스 다운타임 90% 감소
- 사용자 경험 향상: 응답 시간 단축 및 오류 감소로 사용자 만족도 42% 증가
- 교육 효과 증대: 실시간 알림, 피드백 시스템을 통한 학습 참여도 35% 향상
- 개발 효율성 개선: 코드 리팩토링 및 표준화된 개발 방식 도입으로 개발 생산성 30% 향상
- 확장성 확보: 유연한 아키텍처 설계로 새로운 교육 기관 온보딩 시간 60% 단축
프로젝트를 통해 배운 점
이 프로젝트를 통해 B2G 서비스의, 특히 교육 분야의 특수성을 고려한 시스템 설계와 구현 과정에서 다음과 같은 중요한 교훈을 얻을 수 있었습니다:
- 호환성 고려의 중요성: 다양한 기술 스택(Java, Kotlin) 간의 호환성 문제를 해결하는 과정에서 철저한 테스트와 검증의 중요성을 체감
- 사용자 중심 기능 설계: 교사와 학생 간의 효과적인 소통을 위한 푸시 알림 시스템 구현을 통해 실사용자의 니즈를 충족시키는 기능 개발의 가치
- 기술 부채 관리: 레거시 코드 개선 및 버전 업그레이드를 통해 기술 부채를 관리하는 체계적인 접근 방식의 중요성
- 표준화된 에러 처리: 일관된 API 응답 형식과 예외 처리 체계의 도입이 개발 생산성과 시스템 안정성에 미치는 긍정적 영향
- 확장성 있는 설계: 미래의 요구사항과 서비스 성장을 고려한 유연한 아키텍처 설계의 중요성
이러한 경험은 교육 기술(EdTech) 분야의 서비스 개발 및 확장성 있는 백엔드 시스템 구축에 있어 귀중한 자산이 될 것입니다.