프로젝트 소개
" 국내 IT 자격증 강의 및 멘토링 서비스, 고글 에듀 "
프로젝트 개요
현대 사회에서는 누구나 다양한 기술을 배우고 자격증을 취득할 수 있는 기회를 얻을 수 있다.
하지만 자격증은 산업별로 주최 기관이 다르고, 학습 자료와 강의 또한 여러 플랫폼에 분산되어 있어 원하는 정보를 찾고 학습을 체계적으로 관리하기가 쉽지 않다.
이러한 문제를 해결하기 위해 고글 에듀(Goggle Edu) 는 다음과 같은 기능을 하나의 플랫폼에서 제공하는 통합 교육 서비스 구축을 목표로 한다.
- 분야별 자격증 강의를 한 곳에서 제공
- 학습 이력 관리 기능 제공
- 시험 일정 및 개인 학습 일정 관리
- 멘토링 예약 기능을 통한 강사와의 직접 소통
- 학습 계획 구체화를 돕는 통합 환경 제공
이를 통해 사용자는 여러 플랫폼을 오가며 정보를 찾는 번거로움 없이,
자격증 강의 수강부터 멘토링, 학습 관리까지 하나의 서비스에서 효율적으로 수행할 수 있도록 하는 것이
본 프로젝트의 핵심 목표이다.
프로젝트 목표 (개인)
이번 프로젝트에서 나는 단순한 기능 구현을 넘어,
MSA 기반 시스템에서 안정성과 확장성을 확보하는 것을 핵심 목표로 설정하였다.
목표 ① MSA 환경에서 데이터 정합성 보장
마이크로서비스 환경에서는 서비스 간 데이터 일관성을 유지하는 것이 중요한 과제이다.
이를 해결하기 위해 다음과 같은 구조를 적용하고자 한다.
- 보상 트랜잭션(Compensation Transaction) 설계
- Outbox / Inbox 패턴 적용
- 이벤트 실패 처리 로직 구현
- 멱등성(Idempotency) 보장
- Kafka 기반 이벤트 처리 구조 구축
- 스케줄링 기반 재처리 로직 구성
- 서킷 브레이커(Circuit Breaker) 적용을 통한 장애 전파 방지
이를 통해 분산 환경에서도 데이터 정합성과 안정성을 동시에 확보하는 것을 목표로 한다.
목표 ② 병목 구간 식별 및 성능 개선
서비스가 확장될수록 특정 구간에서 성능 병목이 발생할 가능성이 높아진다.
이를 사전에 탐지하고 개선하기 위해 다음과 같은 작업을 진행할 계획이다.
- Query 응답 속도 개선
- 성능 병목 구간 식별 및 최적화
- 분산락(Distributed Lock) 적용 - 선착순 이벤트 처리 안정성 확보
궁극적으로는 대량 트래픽 상황에서도 안정적인 응답 성능을 유지하는 것을 목표로 한다.
목표 ③ 고가용성(High Availability) 확보
서비스는 언제든지 접근 가능해야 하며, 장애 상황에서도 빠르게 복구되어야 한다.
이를 위해 애플리케이션 레벨과 인프라 레벨 양쪽에서 고가용성을 확보하는 방법을 고민한다.
- Application Level 고가용성 전략 적용
- Infrastructure Level 고가용성 구조 설계
- 장애 발생 시 서비스 영향 최소화 구조 설계
이를 통해 지속적으로 서비스를 제공할 수 있는 안정적인 시스템 환경을 구축하고자 한다.
목표 ④ 로깅 및 모니터링 체계 구축
문제가 발생했을 때 빠르게 원인을 파악하는 것은 서비스 운영에서 매우 중요한 요소이다.
이를 위해 다음과 같은 관측(Observability) 환경을 구축할 예정이다.
- 서비스 로그 체계 정립
- 장애 발생 지점 추적 가능 구조 설계
- 모니터링 기반 문제 탐지 환경 구성
이를 통해 장애 발생 시 원인을 명확하게 식별할 수 있는 시스템을 만드는 것이 목표이다.
목표 ⑤ DDD 기반 설계로 확장성 확보
서비스가 점차 확장되는 상황을 고려하여, 도메인 중심 설계(DDD) 를 기반으로 시스템을 구성한다.
- 각 계층 간 의존성 최소화
- 도메인 중심 구조 설계
- 기능 확장에 유연한 아키텍처 구성
이를 통해 기능 추가와 유지보수가 용이한 구조를 만드는 것을 목표로 한다.
목표 ⑥ 문서화를 통한 의사결정 공유
프로젝트 진행 과정에서 발생하는 기술 선택과 설계 과정은
단순한 기록이 아닌 팀의 중요한 자산이 된다.
따라서 다음과 같은 방향으로 문서화를 진행할 계획이다.
- 설계 의도와 선택 이유 기록
- 주요 의사결정 과정 정리
- 팀원 간 지속적인 공유
이를 통해 프로젝트 이해도를 높이고 협업 효율을 향상시키는 것을 목표로 한다.
앞으로의 기록 방향
그동안 여러 프로젝트를 진행해왔지만, 대부분은 기본적인 CRUD 구현에 머무르는 경우가 많았다.
또한 새로운 기술을 직접 적용해보기도 했지만, 프로젝트가 끝난 이후에는 그 과정과 고민들이 정리되지 않은 채 기억에서 흐려지는 경우가 많았다.
이러한 아쉬움을 줄이기 위해, 앞으로는 일주일에 한 번 정도 주간 개발 일지 형태로 기록을 남겨보려고 한다.
단순히 구현 결과를 정리하는 것이 아니라, 내가 어떤 고민을 했고 어떤 의사결정을 내렸는지를 중심으로 기록할 계획이다.
기록의 범위는 개발에만 한정하지 않고, 프로젝트 기획과 설계 과정에서의 생각까지 함께 담아보고자 한다.
비록 대단한 내용이 아닐지라도, 이러한 기록이 쌓이면서 나만의 개발 지식을 만들어가는 과정이 되기를 기대한다.
최근에는 AI 도구를 활용하는 일이 점점 자연스러워지고 있지만,
단순히 도구에 의존하는 것이 아니라 최종 결정은 스스로 내리고, 다양한 해결 방안을 스스로 고민할 수 있는 개발자가 되고 싶다.
이 기록들은 그 과정을 만들어가기 위한 작은 시작이 되기를 기대한다.