[사이드 프로젝트] Loado App (로스트아크 숙제관리)
로스트아크 숙제관리 및 아이템 시세 조회 App
저연차 때 만든 공부용으로 만들었으며 엄청난(?) 열정과 패기로 개발한 첫 작업물입니다
홍보도 하고 사용자의 피드백을 수용하면서 개발하여 재밌는 프로젝트였습니다.
(Loado App은 현재 운영중이지 않으며 신규 버전으로 재출시 할 수도 있습니다)
개요
집과 피시방을 번갈아가면서 기존 App을 이용할 경우 데이터가 공유되지 않으니 자기가 세팅한 케릭터들의 숙제현황을 보지 못하거나 보고자 할 경우 따로 파일을 저장+불러오기하여 작업해야 했습니다.
이런 문제를 해결하고자 데이터를 DB화하여 언제 어디서든 로그인만 하면 자기 케릭현황을 파악할 수 있도록 했습니다.
홍보 URL
https://www.inven.co.kr/board/lostark/4811/3023904 조회수: 11,258 | 추천수: 83 | 댓글: 40
https://www.inven.co.kr/board/lostark/4811/3184415 조회수: 8,630 | 추천수: 42 | 댓글: 15
https://www.inven.co.kr/board/lostark/4811/4124077 조회수: 36,211 | 추천수: 209 | 댓글: 119
업데이트 내역
https://github.com/biglol10/loado-react/blob/main/UPDATE.md
깃헙 소스
FE: https://github.com/biglol10/loado-react
BE: https://github.com/biglol10/loado-backend
Selenium: Private Repo
* 주요 기능 Client
- 케릭터와 휴식게이지 정보 추가, 한 아이디 당 24케릭 추가 가능
- 휴식게이지 수정
- 카오스던전, 가디언토벌, 에포나 수행 횟수에 따른 휴식게이지 감소/증가
- 원정대 단위 컨탠츠는 수정 시 원정대에 반영 (어비스 레이스, 리허설, 데자뷰)
- 매일 6시마다 카던, 가디언, 에포나 횟수 초기화 및 휴식게이지 반영. 수요일(로요일)의 경우 주간 컨탠츠 전부 초기화
- 휴식게이지가 40 이상 (에포나의 경우 60) 인 케릭터들 알람 표시
- 휴식게이지에 상관없이 매일 숙제를 도는 케릭터의 경우 휴식게이지를 고정할 수 있는 기능 존재
- 케릭터 추가/삭제에 따른 페이징처리
- 케릭터 당 노트 기록 기능 추가 (20자 이내)
- 개인 휴식게이지 반영
- 관심있는 아이템 시세 조회
* 주요 기능 Backend
- 사용자 가입 및 로그인 (이메일 등 개인정보 관리가 힘들 것 같아 비밀번호 복구 기능 존재X)
- 사용자별 등록한 숙제 가져오기
- 숙제별(케릭터별) 휴식게이지, 컨탠츠 수정반영
- 원정대 공유 컨탠츠(어비스 레이드, 리허설, 데자뷰)는 수요일에 초기화
- AWS 가상서버로 매일 06시에 배치를 돌려 매일 06시 기준 휴식게이지 정산 (현재는 node-cron 사용)
- 매주 수요일에 주간컨탠츠 (군단장) 초기화
- 매 6시간마다 공식 홈페이지에서 아이템 List 가격 정보 서버에 전송
* 기술적인 부분 참고
- Mongoose model schema의 pre 기능과 bcrypt를 이용해 암호를 저장하기 전 암호화 진행
- Mongoose model에 함수를 구현하여 비밀번호 매칭 및 토큰 가져오기 기능 구현 (Actual Model에서 사용가능)
- 반복적인 try-catch 구문을 스킵하기 위해 asyncHandler 구현
- 직관성을 위해 오류 메시지와 코드를 넘겨주는 ErrorResponse 클래스 구현
- Auth middleware로 사용자 authentication 기능 구현
- 매일 06 배치를 돌릴 때 돌려야 하는 리스트를 반으로 나눠 비동기 작업을 진행
- Routing에 auth 기능 추가
- 최상위 admin 계정과 해당 계정만이 할 수 있는 기능을 통해 전체 유저에게 신규 업데이트 알림을 전송할 수 있는 기능 추가
- node-cron 을 사용해 06시 배치 실행 및 key에 암호화를 하여 누구도 배치를 임의로 실행할 수 없게끔 수정
C# Selenium을 사용해 매 6시간마다 로스트아크 공식 홈페이지에서 아이템에 대한 가격을 가져와서 서버에 전송 (C# application은 EC2에 배포)- Node Selnium으로 변경 후 Linux 서버에 도커로 구동
* SkillSets
FE: React, Node
BE: Node, Express, Selenium
DB & Infra: MongoDB, Heroku, EC2 -> 카페24
* 케릭터 추가
케릭터 추가 버튼 클릭 시 중앙에 케릭터 정보를 입력할 수 있는 팝업 등장
* 휴식게이지 수정
휴식게이지에 마우스 우클릭 시 케릭터의 휴식게이지를 수정할 수 있는 팝업 등장 (숫자는 10단위) 위아래 버튼 및 타이핑으로 수정 가능
* 휴식게이지 감소/증가
카오스던전, 가디언토벌, 에포나 횟수 입력 후 [변경사항 저장] 버튼 클릭 시 변경내역이 있는 케릭터들의 휴식게이지 감소/증가
* 휴식게이지 알람 표시
좌측 상단의 알람 표시를 클릭 시 휴식게이지가 40 이상이거나 에포나 휴식게이지가 60 이상인 케릭터의 이름이 깜빡이게 되는 기능
* 휴식게이지 고정/고정해제 기능
(매일 숙제를 하기에 카오스던전, 가디언토벌, 에포나 입력을 스킵하고 싶은 경우) 케릭터명에 마우스 우클릭 => 알람/알람해제 아이콘이 나오면서 클릭 후 변경사항 저장 시 해당 케릭터는 매일 06시에 휴식게이지가 반영되지 않음
* 케릭터 추가/삭제 페이징처리
[케릭터 추가]로 케릭터를 추가할 수 있으며 케릭터명을 클릭 시 삭제 아이콘이 등장 한 페이지에 8개의 케릭터만 표시될 수 있으며 9개 이상의 케릭터에 대한 페이징 처리 기능
삭제 처리 시
* 케릭터 당 노트 기능 추가
케릭터별로 노트를 추가할 수 있으며 좌측 알람 옆의 노트 아이콘 클릭 시 노트가 표시되며 수정가능
* 개인 휴식게이지 증가 기능 추가
06시에 휴식게이지가 자동적으로 증가하게끔 되어있지만 어떤 이유로 증가되지 않은 경우 [휴식게이지반영] 버튼을 클릭하여 컨탠츠 횟수에 따른 휴식게이지 증가 가능
* 숫자선택 대신 체크박스로 컨탠츠 체크할 수 있는 기능 추가
카오스던전, 가디언토벌, 에포나의 경우 클릭하여 몇번 수행했는지 0,1,2,3을 선택하게 되어있지만 보통의 경우 2,3번 한꺼번에 도니 체크박스로 체크할 수 있는 기능 추가 의견반영
* 모바일웹 기능 추가
같은 URL로 모바일로 접속 시 모바일 화면에 맞는 UI 구성 표시
* 프로필 사진 업데이트
사용자가 자신의 프로필 사진을 업데이트 할 수 있도록 개발
* 관심있는 아이템 시세 조회
사용자가 관심있어 하는 아이템에 대한 시세를 일주일 + 6시간 단위로 볼 수 있는 기능