JS/TIL(Today I Learned)113 2025-03-31 <튜플에 대하여> C# 튜플(ValueTuple) 정리C#의 튜플(Tuple) 기능은 여러 데이터 요소를 하나의 가벼운 데이터 구조로 묶는 간결한 구문을 제공한다. 이 글에서는 튜플의 선언, 초기화, 멤버 접근, 주요 사용 사례, 필드 이름 지정, 형식 별칭, 할당 및 구조 분해 등의 내용을 다룬다.1. 튜플 기본 사용법(double, int) t1 = (4.5, 3);Console.WriteLine($"요소 {t1.Item1}와 {t1.Item2}를 가진 튜플.");// 출력: 요소 4.5와 3를 가진 튜플.(double Sum, int Count) t2 = (4.5, 3);Console.WriteLine($"{t2.Count}개의 요소의 합은 {t2.Sum}입니다.");// 출력: 3개의 요소의 합은 4.5입니다.튜플.. JS/TIL(Today I Learned) 2025. 3. 31. 2025-03-12 <최종 프로젝트 D-2> 리드미 작성 Contents🐰 Project MoonRabbits 소개🌕 게임 시나리오🌕 게임 소개🌕 게임 실행 방법🌕 게임 플로우 차트🐰 주요 컨텐츠 가이드🐰 서비스 아키텍처🐰 기술 스택🐰 Contact🐰 Project MoonRabbits 소개안녕하세요 여러분!저희는 내일배움캠프 Node.js 트랙 7기 1팀 rabbits라고 합니다!🐇지난 6주 동안 만들게 된 멀티플레이 게임 서버와 클라이언트를 무사히 선보이게 되어 너무 기쁘네요.🤗지금부터 달토끼 프로젝트에 대해 차근차근 소개해드릴 테니, 귀여운 토끼와 함께 프로젝트 저희를 따라와주세요!🌕 게임 시나리오🥕 토글을 눌러주세요! 🥕유난히 보름달이 빛나던 어느 먼 옛날, 평화롭던 지구에 외계인이 쳐들어오기 시작했다!산과 들판은 외계인들에 .. JS/TIL(Today I Learned) 2025. 3. 12. 2025-03-11 <최종 프로젝트 D-3> EC2 서버 Brute Force 공격 대응하기 🤬 TROUBLE : 사건의 발단🌊 침입 발생EC2 서버를 본격적으로 열어두기 시작한 이래로, 서버가 멈춰버리는 현상이 자주 발생했다.처음엔 프로젝트의 코드가 가진 결함을 의심했으나, 로그를 뜯어보는 중 수상한 행적을 발견할 수 있었다. 아침 7시에 열어둔 서버에 누군가 접속한 모습이다.45.33.80.243이라는 IP가 접속한 이후, 서버는 완전히 멈춰버렸다.🤔 현상 관찰즉시 AWS를 통해 모니터링 결과를 살펴봤다. 대체 들어와서 뭘 한 건지, CPU 사용률이 50%에 가까운 모습이다.JMeter 부하 테스트 결과와 비교해봤더니, 300개의 클라이언트가 동시에 패킷을 3번씩 보냈을 때와 CPU 사용량이 맞먹는 수준이다. 참고로 평소 서버의 그래프는 위와 같다.애플리케이션 실행 초기에 CPU .. JS/TIL(Today I Learned) 2025. 3. 11. 2025-03-10 <최종 프로젝트 D-4> 스트레스 테스트 🥕 측정 환경AWS 원격 서버 인스턴스 종류 ⇒ AWS 홈페이지에 따르면, t3.micro는 2코어 CPU와 1기비 바이트의 메모리를 가지고 있다.⇒ t2 시리즈의 네트워크 성능은 낮음에서 중간으로 명식적으로 적혀있지 않으나, t3가 더 나은 네트워크 속도를 가지고 있는 게 분명하다 생각하여 t3.micro를 선택하였다. 🥕 스트레스 측정 도구JMeter 아파치 JMeter 애플리케이션이란, 부하 테스트와 성능 측정을 위한 자바 기반의 소프트웨어이다. 원래는 웹 애플리케이션을 테스트하기 위해 설계되었지만, 이후 다른 프로토콜로도 가능하게끔 기능이 확장되었다고 한다. 스트레스 측정 도구 중 JMeter를 가장 많이 들어보았고, TCP 프로토콜도 지원하기 때문에 선택하게 되었다. 또, 측정 도구가 무엇.. JS/TIL(Today I Learned) 2025. 3. 10. 2025-03-07 <최종 프로젝트 D-7> AWS EIP, NLB, 오토 스케일링을 통해 서버 배포하기 목표- 오토 스케일링을 통해 게임 서버의 부하를 분산하기 위함- 클라이언트가 동일한 IP로 접근하였을 때 로드 밸런서를 통해 적절한 인스턴스로 라우팅하기 위함 사용한 기술 스택- AWS : 클라우드 기반의 IT 인프라를 제공해주는 아마존 웹 서비스. 원격 서버 배포, 오토 스케일링, 로드 밸런서 등 다양한 서비스를 시간과 비용면에서 가장 효율적으로 이용할 수 있다고 판단하여 선택하였다. - EIP : AWS가 제공하는 탄력적 IP 주소. 클라이언트가 이 퍼블릭 주소를 통해 로드 밸런서에 접속 요청을 보내면, 연결된 인스턴스 중 상태가 원활한 곳으로 라우팅해준다. 오토 스케일링으로 인스턴스가 여러 개 생성되어도 하나의 고정 IP를 사용하고 싶기 때문에 선택하였다. - NLB : AWS의 네트워크 로드 밸런.. JS/TIL(Today I Learned) 2025. 3. 7. 2025-03-06 <EC2(ubuntu) 도커 초기 환경 설정> 내일배움캠프 Node.js 트랙 88일차EC2(ubuntu) 도커 초기 환경 설정패키지 업데이트 및 필수 패키지 설치먼저, 최신 패키지 목록을 가져오고, Docker 설치에 필요한 패키지를 설치해야 한다.sudo apt updatesudo apt install -y apt-transport-https ca-certificates curl software-properties-commonDocker의 공식 GPG 키와 Docker 저장소를 추가한다.curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=amd64.. JS/TIL(Today I Learned) 2025. 3. 6. 2025-03-05 <최종 프로젝트 D-9> Navigation Server 구현문제 파악 및 구현 목적원격 서버(EC2)에서 테스트를 진행한 결과 필드에 몬스터가 늘어날수록 경로 탐색이 많아진 탓인지 게임이 느려지거나 끊겼다.복수의 플레이어와 몬스터들이 findPath 비동기 요청을 보냈고, 기존 서버에서 동기적으로 실행하느라 성능 저하가 발생한 것이라 판단했다. 혹은 CPU사용량의 문제일 수도 있다.(테스트엔 t2 micro를 사용했으므로)두 경우를 모두 고려하여 예방책을 생각해봤을 때, 별도의 네비게이션 서버에서 경로 탐색을 수행한다면 게임 서버의 부하를 줄이고 경로 연산을 병렬로 처리할 수 있을 것이다.다만, Node.js가 기본적으로 싱글 스레드 환경이므로, 병렬 처리를 위해서는 Worker Threads 또는 BullMQ 기반 분산 처리.. JS/TIL(Today I Learned) 2025. 3. 5. 2025-03-04 <최종프로젝트 D-10> BullMQ 도입 및 사용법BullMQ는 Redis 기반의 Job Queue 라이브러리로, 비동기 작업을 관리하는 데 적합하다. 네비게이션 서버가 길찾기 요청을 효율적으로 처리하고, 메인 서버가 결과를 안정적으로 받을 수 있도록 BullMQ를 활용하는 방법을 설명하겠다.1. BullMQ 설치BullMQ는 bull의 개선된 버전으로, TypeScript 지원과 여러 기능이 강화되었다.yarn add bullmq# 또는 npm 사용 시npm install bullmq2. 기본적인 개념BullMQ는 Redis를 이용해 작업을 큐에 추가하고, 이를 비동기적으로 처리한다. 주요 개념은 다음과 같다.Queue: 작업(Job)을 추가하는 역할Worker: 큐에서 작업을 가져와 실행하는 역할Job: 실제 실행할 작업 .. JS/TIL(Today I Learned) 2025. 3. 4. 2025-03-03 <최종프로젝트 D-11> 레이턴시, 추측항법 구현과 사소한 버그 리포트 레이턴시 구하기 // 레이턴시 ping() { const now = Date.now(); this.socket.write(makePingPacket(now)); } handlePong(milliseconds) { const now = Date.now(); this.lastPong = now; this.latency = (now - milliseconds) / 2; // 왕복이니까 } 핑퐁함수(setInterval)을 구현해서 레이턴시를 주기적으로 저장한다. 추측항법function predictPosition(socket, player, transform, latency) { // 직전 좌표와 transform의 좌표를 빼서 방향벡터를 구하고 노말라이즈 const p.. JS/TIL(Today I Learned) 2025. 3. 3. 2025-02-25 <최종 프로젝트 D-14> MVP(Minimum Viable Product) 발표회 게임 기획 의도 성장도 하고 싶고, 몬스터도 잡고 싶고, 파밍도 하고 싶고, 크래프팅도 하고 싶은 Node 7기 1조 멤버들. 높은 목표를 향해 머리를 맞대고 게임을 만들어 나갑니다. 달로 가기 위한 토끼들처럼요! 프로젝트 한 줄 설명아기자기한 맵에서 벌어지는 치열한 트롤링과 끈끈한 우정 게임! 재료를 모으고 가구 제작을 통해 나만의 보금자리를 꾸며보세요. 발표 자료 JS/TIL(Today I Learned) 2025. 2. 28. 2025-02-27 <최종 프로젝트 D-15> EC2에서 도커 컨테이너 여러 개 생성하기 도커 파일 예시FROM node:latestCOPY package.json package-lock.json .prettierrc ./RUN npm installCOPY src ./srcCOPY assets ./assetsEXPOSE 3000ENTRYPOINT [ "npm", "start" ]Dockerignore 예시node_modules.idea.git.gitignore.dockerignoreDockerfile*.md*.sh*.ymlscriptsdocker-compose.yml 예시services: server: build: . # 현재 디렉토리에서 Dockerfile을 빌드 ports: - '3000:3000' # 호스트와 컨테이너의 포트 매핑 environment: .. JS/TIL(Today I Learned) 2025. 2. 27. 2025-02-26 child_process 모듈 개요child_process 모듈은 Node.js에서 외부 프로세스를 실행하고, 해당 프로세스와 데이터를 주고받을 수 있도록 해준다. 이 모듈을 이용하면 Node.js 프로세스 내에서 다른 스크립트나 명령어를 실행할 수 있으며, 게임 서버를 분리된 프로세스로 실행하거나, 특정 작업을 병렬적으로 처리하는 데 유용하다.이 모듈은 네 가지 주요 방식으로 외부 프로세스를 생성할 수 있다. exec - 명령어 실행 후 결과를 한 번에 반환한다.execFile - 특정 파일을 실행하고 결과를 반환한다.spawn - 프로세스를 실행하고 스트림을 사용하여 데이터와 상호작용할 수 있다.fork - spawn과 비슷하지만 Node.js 스크립트를 실행하는 데 특화된 방식이다.1. exec 사.. JS/TIL(Today I Learned) 2025. 2. 26. 이전 1 2 3 4 ··· 10 다음