You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
배포사이트에 접속이 되지 않는 문제를 파악하고 인스턴스를 확인하였습니다.
nginx의 프록시기능은 정상적으로 작동하였고, 페이지를 제공하는 Next서버, 데이터를 제공하는 백엔드서버도 모두 정상가동중임을 확인하였습니다.
(포트 80, 3000, 8080번 모두 프로세스 실행중)
pm2로그를 확인하여 문제점을 확인하였습니다.
1번사진
2번사진
이전에 프로젝트를 진행하며 위믹스의 상장폐지로 백엔드 서버가 정상적으로 동작하지 않는 케이스를 겪었습니다.
그때 추가된 코드입니다.
한시간마다 메모리에 저장되는 코인정보들을 갱신할때 호출되는 함수 getCoinInfo의 시작부에 업비트에서 마켓코드를 받아와 업비트에서 삭제된 코인종목들을 메모리에 저장되지 않도록 수정하였습니다.
한시간마다 업비트에서 얻은 코인종목들로만 갱신하여 새로운 코인의 상장이나 삭제에 대해 유연하게 대응할 수 있을 것이라 생각했습니다.
업비트에서 얻은 HIFI코인의 종목이름 ./api_server/data/getData.js의 getMarketCode()
CoinMarketCap에서 얻은 MFT코인의 종목이름 ./api_server/data/getData.js의 getCoinData()
한시간마다 getCoinInfo함수가 실행되어 HIFI라는 코인의 이름을 업비트에서 받아옵니다. getCoinInfo함수에서 다음과 같은 과정을 거쳐 CoinMarketCap의 데이터와 추가로 Metadata를 결합하여 새롭게 메모리에 저장된 코인의 정보를 반환합니다.
상단의 if문은 대체로 코인의 이름이 비슷하지만 코드를 작성할때 다음과같은 예외를 처리하기 위해 작성되었습니다.
하지만 기존의 if문은 HIFI와 MFT의 예외는 처리하지 못하는 코드였고, HIFI의 이름을 갖는 메타데이터를 찾지 못하였기 때문에 1번사진과 같은 에러가 발생합니다.
에러가 발생하여서 1시간마다 주기적으로 갱신되어야하는 메모리에 저장되는 코인정보 또한 갱신되지 않습니다.
메모리에 저장되는 코인정보는 업비트에서 MFT가 HIFI로 변경된 이후로 계속해서 갱신되지않았고, 기존의 메모리에 저장된 코인정보를 이용하여 데이터를 조합하는 ./api_server/data/getData.js의 getMarketCapInfos()가 호출되면 2번사진과 같이 404에러가 발생하였습니다.
해결
일단 급하게 복구하느라 MFT와 HIFI에 대한 예외처리를 추가하는 것으로 배포가 정상적으로 이루어지도록 수정하였습니다.
업비트에서도 시가총액등의 정보는 CoinMarketCap에서 가져오기 때문에 업비트의 데이터는 CoinMarketCap의 데이터에 종속적이라는 생각을 하고있었지만, 실제로는 그렇지 않았고, 근본적인 문제는 서비스를 제공하기 위한 데이터의 출처가 서로다른 두곳이라는 점이었습니다.
급하게 수정한 코드가 절대로 맘에 들지않고, 추가적으로 천천히 리팩토링을 하려고 합니다.
현재 생각중인 방식은 다음과 같습니다.
출처가 다른 데이터들을 의도한 대로 조합할 수 있도록 일반화 해보기
FCT2를 위한 if문, MFT&HIFI를 위한 if문이 필요없도록
새로운 코인의 신규상장, 기존코인의 변경, 상장폐지등에 유연하게 대처할 수 있도록 일반화해보기
서버코드 전반적으로 에러처리에 대한 부분이 너무 미흡하다. 꼼꼼하게 에러처리해보고 추가적으로 에러가 발생하면 알려줄 수 있도록 코드 작성해보기
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
개요
배포사이트에 접속이 되지 않는 문제를 파악하고 인스턴스를 확인하였습니다.
nginx의 프록시기능은 정상적으로 작동하였고, 페이지를 제공하는 Next서버, 데이터를 제공하는 백엔드서버도 모두 정상가동중임을 확인하였습니다.
(포트 80, 3000, 8080번 모두 프로세스 실행중)
pm2로그를 확인하여 문제점을 확인하였습니다.
1번사진
2번사진
이전에 프로젝트를 진행하며 위믹스의 상장폐지로 백엔드 서버가 정상적으로 동작하지 않는 케이스를 겪었습니다.

그때 추가된 코드입니다.
한시간마다 메모리에 저장되는 코인정보들을 갱신할때 호출되는 함수
getCoinInfo의 시작부에 업비트에서 마켓코드를 받아와 업비트에서 삭제된 코인종목들을 메모리에 저장되지 않도록 수정하였습니다.한시간마다 업비트에서 얻은 코인종목들로만 갱신하여 새로운 코인의 상장이나 삭제에 대해 유연하게 대응할 수 있을 것이라 생각했습니다.
문제의 원인
https://upbit.com/service_center/notice?id=3236
MFT => HIFI 리브랜딩했다고 합니다.
https://coinmarketcap.com/currencies/mainframe/holders/
https://upbit.com/exchange?code=CRIX.UPBIT.KRW-HIFI
코인종목의 이름이 MFT에서 HIFI로 변경되었고, 업비트는 HIFI라는 이름으로, CoinMarketCap에서는 MFT라는 이름으로 데이터를 갖고있어서 에러가 발생하였습니다.
./api_server/data/getData.js의 getMarketCode()./api_server/data/getData.js의 getCoinData()한시간마다

getCoinInfo함수가 실행되어 HIFI라는 코인의 이름을 업비트에서 받아옵니다.getCoinInfo함수에서 다음과 같은 과정을 거쳐 CoinMarketCap의 데이터와 추가로 Metadata를 결합하여 새롭게 메모리에 저장된 코인의 정보를 반환합니다.상단의 if문은 대체로 코인의 이름이 비슷하지만 코드를 작성할때 다음과같은 예외를 처리하기 위해 작성되었습니다.

하지만 기존의 if문은 HIFI와 MFT의 예외는 처리하지 못하는 코드였고, HIFI의 이름을 갖는 메타데이터를 찾지 못하였기 때문에 1번사진과 같은 에러가 발생합니다.
에러가 발생하여서 1시간마다 주기적으로 갱신되어야하는 메모리에 저장되는 코인정보 또한 갱신되지 않습니다.
메모리에 저장되는 코인정보는 업비트에서 MFT가 HIFI로 변경된 이후로 계속해서 갱신되지않았고, 기존의 메모리에 저장된 코인정보를 이용하여 데이터를 조합하는
./api_server/data/getData.js의 getMarketCapInfos()가 호출되면 2번사진과 같이 404에러가 발생하였습니다.해결
일단 급하게 복구하느라 MFT와 HIFI에 대한 예외처리를 추가하는 것으로 배포가 정상적으로 이루어지도록 수정하였습니다.

업비트에서도 시가총액등의 정보는 CoinMarketCap에서 가져오기 때문에 업비트의 데이터는 CoinMarketCap의 데이터에 종속적이라는 생각을 하고있었지만, 실제로는 그렇지 않았고, 근본적인 문제는 서비스를 제공하기 위한 데이터의 출처가 서로다른 두곳이라는 점이었습니다.
급하게 수정한 코드가 절대로 맘에 들지않고, 추가적으로 천천히 리팩토링을 하려고 합니다.
현재 생각중인 방식은 다음과 같습니다.
Beta Was this translation helpful? Give feedback.
All reactions