전체 글 125

트렐로 프로젝트 최종 회고록

1. 트렐로 프로젝트 간단한 구현 정리JavaScript로 백엔드 개발하는 건 편리하지만 잠재적인 위험성이 있음.예외 처리 미숙: 서버가 다운될 수 있다.실수 및 오류 파악의 어려움: 코드가 복잡해서 디버깅하기 힘들다.이런 단점을 극복하기 위해 TypeScript 사용. 코드 입력 시 에러 체크: 실시간으로 오류를 발견해서 안정성을 높인다.객체 지향 프로그래밍(OOP) 용이: 코드의 구조화와 재사용성을 향상시킨다.결국, 순수 JavaScript보다 TypeScript로 전환하는 추세가 늘어나고 있다. 안정성, 가독성, 생산성 면에서 JavaScript보다 강점이 있다. ORM(Object-Relational Mapping)ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어..

카테고리 없음 2025.03.23

캐시 데이터 패턴 정리 – Cache Aside, Write Through, Write Back

서버에서 데이터 조회 및 저장 성능을 최적화하기 위해 캐시를 활용하는 것은 필수적이다. 하지만 단순히 캐시를 사용하는 것만으로는 충분하지 않으며, 데이터의 변경 빈도와 일관성 유지 방식에 따라 적절한 캐시 패턴(Cache Pattern)을 선택해야 한다. 이번 글에서는 MAFI4 프로젝트 대규모 사용자 대비 피드백에 관해, 캐시 데이터 활용을 해법으로 적용하기 전 간단한 패턴, 예시등을 정리하였다.1. 캐시를 사용하는 이유캐시는 일반적으로 메모리(RAM) 기반 저장소인 Redis, Memcached 등을 활용하며, 데이터베이스(DB)는 디스크 기반 저장소이다.캐시(Redis 등) vs. 데이터베이스(DB) 비교비교 항목캐시 (메모리 기반)데이터베이스 (디스크 기반)속도매우 빠름 (나노초 단위)상대적으로 ..

카테고리 없음 2025.03.18

최종 프로젝트 MAFI4 회고록

1. MAFI4 간단한 구현 정리메인 페이지 - 룸 리스트로 연결되는 버튼, 간단한 게임, 페이지 관련 정보 게시판 페이지 - 글 CRUD, 댓글 CRUD, 좋아요(토글 기반) 기능 구현 상점 페이지 DB 내 상품 정보 조회, 구매 시 내 포인트 차감(아이템 효과 적용은 미완성) 랭킹 페이지 DB 내 유저 테이블 포인트 컬럼 조회(개선 필요) 마이 페이지 게임 전적, 내 글, 내 댓글, 유저 테이블 조회 및 업데이트 룸 리스트 페이지 레디스에서 현재 룸 조회 룸(게임 방) 페이지 게임 서버와 웹소켓을 통한 이벤트 발행 및 구독, 게임서버 내 게임 로직으로 게임 진행 유저간 소통을 채팅으로 구현하기로 결정하였고, 실시간으로 유저간 소통을 구현하기 위해 웹소켓 반영 관리자 페이지 유저 테이블의 isAdmin..

카테고리 없음 2025.03.18

서버 부하 개선 효과를 정량화하는 방법 – 부하 테스트 및 성능 분석

트러블 슈팅과 서버 최적화를 진행한 후, 성능이 실제로 얼마나 향상되었는지를 객관적으로 측정하는 것이 중요하다. 이를 위해 부하 테스트(Load Test) 및 성능 모니터링 도구를 활용하여 서버 부하를 정량화하는 방법을 정리했다.이후 실제적인 테스트를 적용하지 않은 MAFI4 프로젝트에 적용하여 수치/정량 적 데이터 도출 예정.1. 개선 효과를 수치화하는 주요 성능 지표서버 부하 개선을 검증할 때 가장 중요한 성능 지표는 크게 서버 성능, 요청 처리 성능, DB 성능으로 나눌 수 있다.서버 성능 지표CPU 사용률: 서버의 CPU 사용량(%)을 의미하며, 트래픽 증가에도 일정하게 유지되는 것이 이상적이다.메모리 사용량: 서버의 메모리 사용량(%)을 나타내며, 불필요한 리소스 낭비 없이 안정적으로 유지되는 ..

카테고리 없음 2025.03.18

내일배움캠프 18주차 화요일 TIL

문제가 시작된 이유:글을 올리려고 할 때 "잘못된 요청(Bad Request)"이라는 에러가 발생했음.에러 메시지에 "유효하지 않은 JSON"이라는 내용이 포함됐음.초기 의심:파일을 업로드할 때 문제가 있을 것 같았음.문제가 어떻게 해결됐는지:요청 확인:글을 올리기 위해 클라이언트가 보내는 데이터에는 제목, 내용, 그리고 파일이 포함됐음. 이 데이터는 FormData 형식이었음.문제의 원인:클라이언트에서 데이터를 보낼 때, 모든 요청이 "application/json"으로 설정됐음. 그런데 파일을 보낼 땐 이 설정이 잘못된 거였음.그래서 서버가 JSON 데이터를 기대했는데, 실제로는 다른 형식의 데이터가 와서 오류가 발생했음.문제 해결 방법:글을 올릴 때 데이터가 FormData인지 확인하고, FormD..

TIL 2025.03.04

내일배움캠프 18주차 수요일 TIL

아침 회의 (10:30 ~ 11:00)게임 서버완료: 밤이 된 이후 능력 사용 등 게임 진행 로직 작성 완료.미완료:밤 로직을 웹페이지와 연동해 동작 확인 필요 (이벤트 이름 불일치 문제로 적용 불가).발신자의 직업과 생존 여부 판별 변수 변경 필요→ 현재 게임 로직에서 userId를 사용하지 않는 경우가 많아 최적화가 요구됨.API 서버완료:메일 주소 입력을 통한 로그인 기능 구현.동일 기기에서의 다중 접속 방지 기능 구현.방 목록 조회 기능 구현.사용자가 생성된 방 중 선택한 방에 참가하는 기능 구현.저녁 회의 (19:10 ~ 19:40)게임 서버완료:발신자의 직업과 생존 여부 판별 변수 변경 완료:→ 발신자가 죽은 상태일 경우 죽은 사람끼리, 마피아라면 밤에 마피아끼리 채팅 가능하도록 조정.룸 게이..

카테고리 없음 2025.02.26

내일배움캠프 17주차 수요일 TIL

2/19 회의 api 기능 일부 수정 및 s3 적용 완료(서버 실행은 문제없음)api 부분 트랜젝션 및 검증 부분 추가 수정할 예정 생존자들 만의 채팅방 구현생존자 채팅 검증예정, 사망자 채팅 채팅방에 전달하는 기능 구현 예정 밤 채팅 부분 코드 작성채팅방방 삭제 기능 완료방 조회 기능 구현 예정 방 생성 기능 구현완료방생성 검증 및 수정 예정 룸 채팅방 접속 웹소켓 구현 완료, 인원 초과시 진입 불가능 기능 구현 완료룸 진입 불가시 메시지 전송오류 수정 및 웹소켓 리팩토링 예정공통내용초기 설계 단계에서 웹소켓을 2개로 기능구현 > 웹소켓을 1개로 기능구현대원님이 작성하신 웹소켓 기능을 기반으로 나머지 소켓 기능들을 구현할 예정

카테고리 없음 2025.02.19

내일배움캠프 17주차 화요일 TIL

웹소켓(WebSocket)웹소켓은 클라이언트(보통 웹 브라우저)와 서버 간에 지속적인 양방향 통신 채널을 제공하는 프로토콜HTTP와 달리, 초기 핸드셰이크 후에는 연결이 유지되며, 실시간 데이터 전송에 최적화Socket.IOSocket.IO는 웹소켓을 통해 클라이언트와 서버 간의 실시간 통신을 쉽게 구현할 수 있도록 도와주는 JS 라이브러리구형 브라우저 같이 클라이언트가 WebSocket을 지원하지 않거나, 네트워크 환경이 WebSocket 연결에 제한이 있을 때 자동으로 폴백(fallback) 방식(예: Long Polling)으로 전환폴백 메커니즘: 최상의 방식( Socket.IO 에서는 WebSocket)을 사용할 수 없을 때, 다른 대체 수단으로 "fallback"하여 연결을 유지하게 하는 기능최..

카테고리 없음 2025.02.18

내일배움캠프 17주차 월요일 TIL

로컬 레디스 서버를 활용하여 게임 서버에 존재하는 채팅 테스트- 게임 진행 자체가 룸에 있는 채팅창을 통해 진행되기 때문에, 게임 서버 로직 적용, 테스트를 위한 채팅방 임시 구현 필수- 룸 id 별로 접속한 유저들만 채팅 가능게임서버가 아닌 API 서버의 룸 생성 API 호출 시 레디스에 룸 데이터 저장될 것으로 가정해당 API 개발 전이므로, 로컬 레디스에 강제로 룸 데이터를 생성하여 테스트 진행- http://localhost:3000/room/1와 같은 형태로 룸 id를 파라미터로 사용한다.// src/rooms/room.controller.tsimport { Controller, Get, Param, Res, NotFoundException } from '@nestjs/common';import..

카테고리 없음 2025.02.17

내일배움캠프 16주차 WIL

이번주 계획, 실행한 것1. 프로젝트 방향 설정웹소켓을 활용한 실시간 마피아 게임 진행 결정다양한 기능(도커, 레디스, 소켓 등) 활용 계획2. 기술 학습 및 사전 준비 도커, 레디스, 소켓 등 프로젝트에 활용될 기술을 개별적으로 자습하기로 결정마피아 프로젝트에 대한 ERD 작성 및 튜터님과의 검증 예정3. API 및 소켓 명세서 작성 마피아 게임 관련 API를 세분화하여 담당자 배정웹소켓 명세서 작성 계획 및 기존 명세서 보완 (불필요 항목 삭제, 채팅 토글 기능 추가)4. 인프라 및 서버 구성 계획 인프라 옵션 비교: EC2와 ECS당장은 EC2 내에서 API 서버와 게임 서버(도커 컨테이너) 분리 운영추후 방 개수 증가에 따라 개선 검토도커 오토스케일링:스크립트를 통해 자원 사용량 모니터링 후, 자..

카테고리 없음 2025.02.14