[Project] 하이스코어 프로젝트 2차 목표 달성 및 후기
포스트
취소

[Project] 하이스코어 프로젝트 2차 목표 달성 및 후기

하이스코어 리팩토링 프로젝트를 진행하면서 경험한 부분을 기록하기 위해서 작성했습니다.

개요

25년 12월 12일, 드디어 하이스크어 2차 목표인 정시(모의고사) 기능을 완성해서 업데이트 했습니다. 이 과정에서 많은 일들이 있었는데, 주요 사건들을 좀 정리해보고자 합니다.

백엔드

Cloudflare 장애 대응

Cloudflare에서 11월달 중반부터 꽤 많은 장애가 발생했습니다. 이 영향으로 Cloudflare를 사용중인 ChatCPT와 같은 서비스들이 먹통이 되기도 했었고, 저희 서비스도 그중 하나였습니다. 그래서 저는 Cloudflare 의존성을 완전히 제거했습니다. 자세한 내용은 [Project] 하이스코어 프로젝트 1차 목표 달성 및 후기에서 확인 가능합니다.
여담이지만 이 사건으로 몇몇 기업들이 Cloudflare를 제거한것으로 보입니다. 제가 도메인을 구입한 사이트인 Porkbun에서는 로그인시 사람임을 체크하기 위해 Cloudflare Turnstile을 사용했었는데, 사건 이후에는 자체적으로 만든 기능을 사용하는것 같습니다.

서버 보안 강화

Cloudflare를 제거하는 작업을 하면서 VPN 도입으로 서버 보안을 강화했습니다.
기존에는 Jenkins, Portainer와 같은 관리자 전용 웹사이트들이 테스트/릴리즈 서버 모두 공개적으로 노출되어 있었습니다. 어쩄거나 id/pw를 입력해야 직접적인 접근이 가능하긴 하지만, id/pw가 유출되었을때 일어날 수 있는 일이 너무 크다보니 허용된 사람만 접근 가능하게 만듥고 싶었습니다.
그래서 Wireguard를 이용해서 VPN 서버를 구축한 후, 이 VPN에 연결한 사람만 관리자 웹사이트와 SSH 접근이 가능하도록 구축했습니다. VPN에 연결하지 않고 관리자 웹페이지에 접근을 시도하면 거부되어 접근 자체를 차단했습니다.

프론트엔드

로그인 불가 버그 원인 파악

ln1

1차 출시 완료 후 얼마 지나지 않아 일부 사용자들에게 로그인부터 막혀 아무 기능도 사용할 수 없다는 피드백을 리뷰로 한번, 이메일로 한번 받았습니다. 하이스코어는 무조건 로그인 해야 기능들을 사용할 수 있으므로 이 버그는 매우 치명적인 버그였습니다.
그런데 이상하게도 Crashlytics에는 로그인 에러 관련 로그가 전혀 찍히지 않았습니다. 코드를 다시한번 살펴보니 try-catch로 감싸만 두고 Crashlytics에 보고하는 코드를 넣지 않아 버그가 보고되지 않았다는 사실을 알게되었고, 이부분을 수정해서 업데이트 후 이메일로 연락주신 제보자분께 다시한번 로그인을 시도해 볼 것을 요청드렸습니다.

이번엔 정상적으로 보고되어 확인해보니 Dio에서 Handsake 오류를 내고있다는 사실을 확인할 수 있었습니다. 이런 오류는 처음봐서 검색해보니 Handsake는 HTTPS 프로토콜에서 클라이언트와 서버간에 암호화 통신을 위해 준비하는 과정이라는걸 알게되었고, Handsake 오류는 보통 서버에서 지원하는 TLS 버전이 요청한 TLS버전을 지원하지 않으면 발생한다는 글을 읽게 되었습니다.

그러나 정말 저게 원인이라면 서버 내부에 Hanshake에 실패했다는 접속 로그가 남아야 했는데 crashlytics로 보고된 시간에는 어떤 접속 로그도 남지 않았습니다. 다시한번 원인을 생각해보다 이 앱의 주 사용자가 학생이라는 사실을 떠올렸고, 학생분들이 학교 와이파이에 연결해서 요청할 때 학교에 설치된 방화벽에 의해 요청 자체가 서버에 오지 못했다는 가설을 세우게 되었습니다.

그래서 제보자분께 학교 와이파이를 사용중이신지 여쭤보았고, 혹시 사용중이시라면 끊고 데이터로 시도해 볼 것을 권유드렸습니다. 그리고 이 방법은 성공했고, 결국 원인은 학교 방화벽이었습니다.

ln1

이 문제는 제가 해결할 수 없는 문제이기 때문에, 로그인 오류가 발생하면 관련 안내문을 띄우는 방식으로 업데이트 했습니다. 정말 예상치 못한 원인으로 앱을 사용할 수 없게되는 버그였습니다. 해당 문제를 제보한 제보자분 덕분에 초기에 문제를 발견할 수 있었고, 제보자분께는 2만원 상당의 기프티콘을 전달드렸습니다.

후기

ln1

1차 출시가 완료된 11월 초부터 2차 출시가 완료된 12월 초까지 정시 기능 개발 뿐만 아니라 각종 사건사고들과 토익, SQLD 시험까지 병행하다보니 정말 정신없이 개발했던것 같습니다. 그래도 목표한 시기 내에 기능 구현후 출시에 성공했고, 각종 문제도 잘 대응한 것 같습니다. 게다가 수시 기능만 구현된 1차 출시 버전에서 MAU 1,000명을 달성하며 생각보다 수요가 있는걸 다시한번 확인하게 되었습니다. 이제 다음 목표를 다시한번 점검하고, 목표 달성을 위해 열심히 개발해야겠습니다.


앱 다운받기

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.