Carryduo 7

Carryduo | 계층 분리를 위한 DTO, Entity 리팩토링

0. 개요 - 최근 들어, 아키텍처와 관련된 글들을 꽤 작성했다. - 이 글은 그러한 글들의 발단이 된 리팩토링 작업에 대한 글이다. 아키택처 글들은 리팩토링 작업을 하면서 해당 작업의 배경 지식들을 공부한 내용이었다. - 리팩토링한 내용은 아직 100% 만족하진 않는다. 공부를 하는 과정에서, "아, 이건 이런 식으로 하는 게 더 좋았을 수도 있겠다."하는 생각들이 많이 들었기 떄문이다. - 일단, 이 글은 작업된 내용을 기반으로 한다. 중간중간 작업된 내용 중 개선점에 대해서도 서술해보겠다. 많이 부족한 글이기 때문에, 잘못된 내용에 대한 피드백 혹은 격려 주시면 정말 감사하겠습니다. 1. Carryduo 백엔드의 계층 구조와 기존 코드의 문제점 1) Carryduo의 백엔드 계층 구조 - Carry..

Carryduo 2023.03.13

Carryduo | Jest를 이용한 Unit/E2E 테스트 (NestJS)

1. 개요 | 테스트 코드의 개념 - 테스트코드란 어플리케이션이 의도한대로 동작하는지 시험하기 위한 코드라고 생각한다. - 어플리케이션은 일반적으로 여러 모듈, 그리고 모듈을 구성하는 여러 함수들로 구성되어 있기 때문에, 테스트코드도 테스트 범위에 따라 다음과 같이 일반적으로 종류가 나뉜다. 1. Unit Test - 모듈을 구성하고 있는 단위 기능들에 대한 테스트 2. Integration Test - 어플리케이션을 구성하는 여러 모듈 간 상호작용에 대한 테스트 3. E2E Test - End to End Test로 사용자의 관점에서 어플리케이션이 의도대로(시나리오대로) 작동하는지에 대한 테스트 c.f) Intergration Test vs E2E Test - Integration Test와 E2E T..

Carryduo/Jest 2023.02.28

Carryduo | AWS CodeDeploy 배포본 수 줄이기

1. 개요 - carryduo 서비스를 지속적으로 운영하는 과정에서 "no space for device"에러가 발생했다. - 서버 용량을 확인해보니, CodeDeploy Agent에서 ubuntu에 저장하는 배포본의 용량이 가장 많았다. - 이에, 다음과 같은 과정을 통해 CodeDeploy Agent에서 ubuntu에 저장하는 배포본의 수를 줄여주었다. 2. 서버 용량 확인하기 - 서버 용량을 확인하는 linux 명령어는 다음과 같다. df -h // 파일 시스템별 용량/사용량/남은 용량/파일 시스템이 사용중인 경로 확인 for i in [경로]; do echo $i; find $i | wc -l; done // 특정 경로의 하위 경로에서 각각 차지하는 용량 확인 - 필자의 경우, df -h를 실행했..

Carryduo 2023.02.06

Carryduo | 비동기와 try, catch 에러 핸들링

1. 개요 - carryduo로 개발을 하던 중, try-catch로 에러 핸들링이 되지 않는 문제를 겪었다. - nodeJS에서 try-catch로 에러 핸들링을 하는 일반적인 사례는 다음과 같다. try{ throw new Error('a') } catch(err){ if (err.message === 'a'){ doSomething } else { return } } - 하지만 필자는 당혹스럽게도 다음과 같은 에러 문구를 만나게 되었다. uncaughtException: - 이에, 자연스럽게 throw new Error와 try catch에 대해 좀 더 알아보게 되었다. 2. Error() 객체 - error 객체는 name, message, stack으로 구성되어 있고, Error를 생성할 때는 ..

Carryduo 2023.01.27

Carryduo | [nodeJS] child-process를 이용한 데이터 분석 자동화

1. 개요 - Carryduo는 기존에 데이터 분석을 개발하는 과정에서 toad-scheduler 패키지를 활용했다. - toad-scheduler 패키지는 특정 시간 간격으로 스케줄을 실행하는 패키지이다. - 예컨대, "1시간마다 naver-sens를 통해 알람을 보내!"와 같은 기능을 구현할 때 유용하게 사용될 수 있다. - Carryduo는 데이터 분석에 할애되는 단위시간을 고려하여, 이 toad-scheduler를 이용해 데이터분석을 자동화했었다. - 문제는 데이터가 쌓일수록 필연적으로 데이터 분석에 할애되는 시간이 늘어나는 구조로 데이터 분석 로직이 설계되어 있었다는 것이다. - 즉, 축적된 데이터가 많아지면서, 다음과 같이 데이터분석 한 사이클이 종료되지 않았는데 새로운 사이클을 실행하는 현상..

Carryduo 2023.01.26

Carryduo | ubuntu crontab을 이용한 pm2 로그 관리 스케줄링

1. 개요 - Carryduo는 매일 약 25000개 이상의 롤 게임 데이터를 분석한다. - 게임 데이터 분석에는 별도의 서버를 운영하고 있으며, 데이터 분석 과정은 로그로 꼼꼼히 모니터링한다. - 데이터 분석은 개발 편의상 javascript로 작성하고, pm2를 이용해서 프로세스를 관리하고 있었는데, 다음과 같은 로그를 확인할 수 있었다. - 요컨대, 로그가 계속 누적되면서 더 이상 로그를 작성할 용량이 남아있지 않아, 서버에서 프로세스를 중단시킨 것이다. - 의문이었다. 필자는 winston 라이브러리를 이용해서 일주일 간격으로 로그를 관리해주고 있었기 때문이다. - 구글링을 해본 결과, pm2는 자체적으로 .pm2 -> logs 경로에 서버에서 기록되는 로그들을 모두 저장하고 있다는 것을 확인할 ..

Carryduo 2023.01.25

Carryduo | AWS S3를 이용해 롤 챔피언 이미지 버전 관리

1. 개요 - Carryduo를 지속적으로 운영하면서, 이미지 관리에 대한 고민이 생겼다. - Carryduo는 롤 듀오 데이터를 제공해주는 사이트이므로, 자연스레 롤 챔피언/스킬/티어 등 다양한 이미지들을 사용한다. 총 개수는 대략 1100개 가량 된다. - 기존에는 그 이미지들을 라이엇에서 제공하는 이미지 url을 그대로 가져와서 사용했었다. (라이엇 이미지 url 예시) - 롤을 플레이하면서 문득 든 생각이 "만약 라이엇 서버가 다운되면, 우리 사이트에서 보여지는 이미지들이 모두 오류 처리가 나겠구나"였다. - 그래서 사이트의 안정적인 운영을 위해, 이미지를 사이트 자체적으로 관리할 필요성을 느껴, AWS S3에 라이엇 이미지를 자체적으로 저장하고 이를 FE에 제공하는 방식을 도입하기로 하였다. *..

Carryduo 2023.01.13