<소개>
사용자가 직접 제작한 자작곡을 공유하는 커뮤니티
<주요 업무>
- 서버 구축 및 데이터베이스 구축 (Linux, Apache, Nginx, MySQL, MongoDB)
- API 서버 개발 (Node.js, pm2, GraphQL, Typescript, Javascript, PHP)
- 웹 프론트엔드 개발 (React, Next.js, Redux, Typescript, Javascript, Sass, jQuery, gulp, ESLint)
<업무 상세>
서버 및 데이터베이스 구축
Linux, Apache, Nginx, MySQL, MongoDB, Crontab
초창기 Apache로 HTTP 서버를 구축하고 이후 Nginx로 구축하였습니다. API서버를 Node.js로 전환한 이후에는 리버스 프록시를 통해 하나의 서버에서 여러개의 Node.js 어플리케이션을 서비스할 수 있도록 분리하였습니다.
동시 접속자 1,000명 이상의 규모가 되었을 시기에는 대응을 위해 여러가지 방법을 시도해보았습니다. 주로 DB에 과부하가 걸려 다운되는 경우가 많아 데이터베이스 부하를 분산시키기 위한 시도들로써 PHP단에서 캐시를 생성하여 DB 커넥션 자체를 최소화하였고 MySQL Master-slave Replication을 통해 쓰기 DB와 읽기 DB를 물리적인 서버로 분리시켰습니다. 또한 순간적인 접속증가가 웹서버가 다운되는 경우도 있어 로드 밸런싱보다 단순하고 저비용적인 방법으로 DNS 라운드로빈 기반의 분산처리를 하였습니다. 또한 Docker를 통해 새 서버에 어플리케이션 배포 과정을 단순화하는 시도를 해보았습니다.
핑을 주기적으로 날려 서버 다운을 체크하였고, 알림을 주어 외부에 있을때나 언제든 대응을 하였습니다.
API 서버 개발
Node.js, GraphQL, Typescript, Javascript, PHP
초기에는 PHP, MVC 패턴 기반의 CodeIgniter 프레임워크로 제공하다가 이후 Node.js, GraphQL, Typescript로 전환하였습니다. ESLint를 사용하여 코드스타일을 일관적으로 유지하고 pm2 라이브러리로 CI/CD를 적용하였습니다.
파일 업로드는 AWS S3에 하였습니다. Bull Queue 라이브러리를 활용한 백그라운드 작업스케쥴링을 통해 파일 업로드가 완료될때까지 사용자가 UI에서 대기하지 않도록 개선하였습니다.
웹 프론트엔드 개발
MySQL, MongoDBReact, Next.js, Redux, Typescript, Javascript, Sass, jQuery, gulp, ESLint
초기에는 PHP, Html, Css, jQuery로 개발하였었고 이후 React를 거쳐 Next.js로 전환하였습니다.
반응형으로 데스크톱과 모바일 모두 하나의 코드로 대응할 수 있게끔 개발하였습니다.
수년간 수차례 리뉴얼을 진행했었는데, 초기에는 PHP, Html, Css, jQuery로 개발하고 배포시 gulp를 사용하여 css와 js파일 경량화를 하였습니다. jQuery로 SPA(Single Page Application) 개념을 흉내내었던 적이 있습니다.
오디오 제공이 주 컨텐츠라 페이지 이동시 끊김이 발생하지 않는게 UX에 중요한 부분이었기에 이후 React를 거쳐 Next.js로 전환하였습니다.
모바일 앱 개발
Android(Java), Flutter
모바일은 안드로이드로 개발하다가 Flutter로 변경, 다시 최종적으로 웹뷰 기반 앱으로 개발하였습니다.
<경험>
저의 웹개발 경험에 지대한 영향을 미쳤던 프로젝트입니다. 사용자가 늘어나는 과정에서 큰 재미를 느끼고 밤이든 낮이든 개발에 몰두하며 더 나은 서비스를 제공하기위해 많은 노력을 기울였습니다. 개발에 큰 열정을 쏟아부은 프로젝트로 기억에 남습니다.