
프로젝트를 진행하면, 정말 다양한 버그와 오류가 생각치도 못한 곳에서 발생한다. 이를 해결하기 위해 코드를 수정하는 것을 유지보수라 한다. 이런 코드 유지보수을 위해 사용하는 것이 유닛 테스트이다. 쉽게 설명하면, 롤에서 가렌의 궁극기의 데미지가 안나오는 버그가 발생했다고 가정하자. 그럼 이를 수정 후 제대로 고쳐졌는지 확인해야하는 데, 게임에 접속해서 6렙까지 올리고 상대방에게 궁까지 써서 확인하는가? 필요한 것은 궁극기를 사용하는 것인데, 전 단계에 불필요한 과정이 많다는 것을 느낄 것이다. 이때 버튼만 딸깍하면 궁극기의 데미지가 나오는 코드가 있다면 얼마나 편리한가? 유닛 테스트는 이렇게 특정 코드를 테스트 할때, 실제 프로그램을 실행시켜 확인하는 게 아닌 테스트에 필요한 부분만 구현하고 이를 실행..

이번 글에서는 서로 어떻게 데이터를 주고 받았는 지를 서술할 것이다. 마스터 서버 transfer_header_t transfer_header; memset(&transfer_header, 0, sizeof(transfer_header_t)); // 파일 리스트 직렬화 update_header_set(file_list, &transfer_header, 1); file_list_serialized(&serialized_data, &transfer_header, file_list); // 직렬화 데이터 압축화 if (transfer_header.total_size > COMPRESS_BOUNDARY) { transfer_header.total_size = serialized_data_compress(&ser..
2차 목표는 서버 동기화, 즉 다른 pc와의 통신 연결이다. 이는 ip주소와 서로 간의 네트워크 설정만 제대로 이루어져 있다면, 어디서든 동기화가 가능해 진다는 것이다. 다만 로컬 환경의 전송이었던 서버-클라이언트와는 일부 로직과 함수를 공유하지만, 다른 점도 다수 존재하기에 이것을 중심으로 서술하겠다. 네트워크 설정 서버끼리의 통신 시 주의해야 할점은 프로그램이 정상적이라도 네트워크, 특히 방화벽 설정에서 연결을 거부할 수 있다는 것이다. 때문에 방화벽을 전체 비활성화 해주거나, 특정 포트만 열고 거기로만 통신을 하는 설정을 할 필요가 있다. 방화벽 전체 비활성화와 특정 포트에 요청 허용하는 ufw는 다음과 같다. 이는 우분투 20.04버전 기준이기에 다소 차이가 있을 수 있다. #ufw 설치 sudo..

네트워크 통신 시, 전송 속도도 중요하지만 기업이나 개발자 입장에서는 크기가 더 중요하다. 왜냐면 aws와 같은 클라우드 서비스의 경우, 오가는 데이터의 총량을 기준으로 비용을 측정하기 때문이다. 이는 사용자가 많을 수록 더 중요해지는데, 1MB정도의 낭비가 발생하고 1000명의 사용자가 있다면 1000MB의 비용이 추가로 청구된다. 따라서 데이터를 보낼 때, 원형 그래도 보내기 보다는 압축과 같은 과정으로 전송시 데이터의 크기를 줄이는 방법은 유용하다. 이번 프로젝트는 직렬화 데이터를 전송하기에 한번에 전송하는 데이터의 크기가 크다는 단점을 압축을 통해 해결하였다. zlib 라이브러리 이번 프로젝트에서 압축화를 위해 zilb 라이브러리를 사용하였다. zilb는 Deflate 압축 알고리즘을 C언어로 구..