JBIG - 학회 풀스택 플랫폼
전북대학교 AI/빅데이터 학회 JBIG 회장을 역임하며, 학회원들이 4년간 쌓아온 학습 데이터와 기술 블로그 자산 등을 안정적으로 보존하고 운영하고자 JBIG 홈페이지의 전반적인 유지보수 및 개발 프로젝트에 참여했습니다.
AI/빅데이터 학회 회장으로서의 리더십
회장으로서 운영진들과 함께 한 학기 단위의 ML/DL 커리큘럼을 직접 기획하고, 매주 1회 정기 세미나를 운영했습니다. 세미나에서는 자체 제작 교안을 통한 이론 학습뿐만 아니라, 데이콘 플랫폼의 문제를 함께 풀고 코드 리뷰하는 시간을 가졌습니다. 또한 졸업한 선배님들을 초청하는 홈커밍데이 행사를 기획하여 현업 경험을 학회원들과 공유하는 자리를 만들었습니다. 이러한 경험들을 통해 기술적으로 성장하는 것만큼, 함께 도와가면서 성장하는 커뮤니티를 만드는 가치를 깨달았습니다.
JBIG 웹 서비스 개발
JBIG 홈페이지는 React/TypeScript 기반 프론트엔드와 Django REST API 백엔드, PostgreSQL 데이터베이스로 구성된 학회 전용 플랫폼입니다. 이 서비스의 풀스택 유지보수를 맡아, 에러/피드백 게시판에 제보되는 건들과 여타 이슈들을 해결했습니다.
데이터베이스 마이그레이션
합류하고 가장 먼저 진행한 작업은 기존 데이터베이스를 Supabase로 마이그레이션하는 작업이었습니다. 운영 중인 서비스의 DB를 옮기는 작업은 자칫하면 사용자 데이터가 손실될 수 있기에 작업 전 꼼꼼하게 마이그레이션 계획을 세워 진행했습니다. 운영 DB를 백업하고, 환경 변수를 변경하여 Supabase DB로 연결을 바꾼 뒤, Django Shell로 연결 테스트를 수행하여 사용자 데이터가 정확히 일치함을 확인했습니다.
NCP Object Storage 전환
다음 핵심 작업은 파일 저장 방식을 Django 서버 로컬(/media/)에서 NCP Object Storage로 전환하여 서버리스 형태의 파일 저장 시스템을 구축하는 작업이었습니다. 사용자가 게시글에 이미지를 업로드 할 때 서버 리소스를 점유하지 않도록 Presigned URL 방식의 7단계 업로드 과정을 계획했습니다. 프론트에서 백에 권한을 요청하고, NCP로부터 임시 URL을 발급받아 직접 파일을 쏘도록 해서 서버가 경로 문자열만 관리하게끔 하여 서버 부하를 크게 낮췄습니다.
DB에 ncp-key://... 형태의 영구 태그를 저장하고, 게시글 조회 시 serializers.py에서 실시간으로 1시간짜리 임시 URL로 변환하는 방식을 적용했지만, 사용자가 새로고침 없이 1시간 이상 페이지에 머물면 여전히 이미지가 깨지는 문제가 발생했습니다. boto3 공식 문서에 따르면 ExpiresIn 파라미터를 생략하면 기본값 1시간이 적용된다고 되어 있어 처음에는 문서에 작성된 최대치인 7일을 명시적으로 설정해야 한다고 생각했었는데, ExpiresIn 파라미터를 완전히 삭제하고 테스트한 결과, 일주일이 지나도 이미지가 만료되지 않는 것을 확인했습니다. NCP 서버 자체가 ExpiresIn이 없는 get 요청에 대해 boto3 기본값보다 긴 만료 시간을 적용한다는 사실을 알게 되었습니다. 공식 문서에 직접적으로 명시되지 않은 플랫폼 특성을 직접 실험을 통해 검증하고 해결책을 도출한 경험이었습니다.
지속적인 서비스 개선
서비스의 지속적인 개선을 위해 에러/피드백 제보 게시판을 구축하여 실제 사용자인 학회원들로부터 피드백을 받고 꾸준히 서비스를 개선하고 있습니다. 마크다운 표 헤더가 렌더링되지 않는 문제, 링크 클릭 시 새 탭에서 열리도록 UX 개선, 게시글 검색 시 부분 일치 기능 구현, 사유서 제출 게시판 전용 폼 개발 등 UX를 실질적으로 향상시키는 다양한 개선 작업을 수행했습니다. 또한 Gunicorn과 Nginx를 활용한 배포 설정 파일(gunicorn.service) 및 환경 변수 가이드(.env.example)를 문서화하여 후임 운영진들도 쉽게 서버를 관리할 수 있도록 인프라 관리 표준을 세웠습니다.
배운 점
위와 같은 경험들을 통해, 실제 사용자가 있는 서비스를 운영하며 발생하는 예측 불가능한 문제들을 해결하는 실전 문제 해결 능력을 기를 수 있었습니다. 이론적인 개발을 넘어, 인프라 비용 절감과 클라우드 기반의 확장성 있는 아키텍처를 확보하면서 향후 대규모 사용자가 접속해도 유연하게 대응할 수 있는 기반을 마련했습니다. 또한 실제 사용자들의 이야기를 듣고 해결하는 사용자 중심의 개발 마인드를 배우며 끝까지 해결하는 집요함과 문서화 습관 등을 쌓았습니다.