728x90
반응형
백엔드반 실전 프로젝트 어느덧 마무리…?
해야 하는데,, 기존에 코드들이 의존성 투성이라서 뭐 하나 건들면 우르르하는 느낌이 너무 강해서 수정사항 있을 때마다 고생이다,, 그 와중에 대전 방식 자체도 실시간 공격 방식으로 적용시키면서 과정이 줄어들었는데도 불구하고 매 과정 중에 조회, 가공, 수정, 삭제하는 로직이 많아 더욱 복잡해 보이기도 한다.
// pvp.service.ts 중 일부
// ...
// 유저가 방에 입장할 때 마다 입장 인원을 체크하여 시작할지 말지 결정하는 로직
async startValidation(req: Request, res: Response, next: NextFunction, roomName: string) {
console.log('startValidation');
const { socketId, CMD, userInfo, userStatus }: PostBody = req.body;
const getUsers = await this.getUsers(roomName);
const roomState = await redisCloud.hGetOne(roomName);
if (getUsers === maxUsers && roomState[roomName] === false) {
const pvpRoom = await redis.hGetPvpRoom(roomName!);
const users = Object.entries(pvpRoom)
for (let i = 0; i < maxUsers; i++){
const user = users[i][1].userStatus
i < maxUsers / 2 ? user.isTeam = 'B TEAM' : user.isTeam = 'A TEAM'
const inputPlayer:PvpUser = { [users[i][0]]: { socketId: users[i][1].socketId, userStatus: user }}
await redis.hSetPvpUser(roomName, inputPlayer)
}
const room = { [roomName]: 'true' }
await redisCloud.hSet('rooms', room)
const script = pvpScript.pvpRoomJoin(userStatus!.name) + '잠시 후 대전이 시작됩니다.\\n'
const field = 'pvpList';
PVP.to(roomName).emit('fieldScriptPrint', { script, field });
PVP.to(socketId).emit('printBattle', { field, userStatus });
const URL = `${FRONT_URL}/chat/pvpChatStart`
fetchPost({ URL, socketId: userStatus.frontId!, userInfo, option: roomName });
setTimeout(() => {
const request = { body: { socketId, userStatus } };
pvpController.pvpStart(request as Request, res, next);
}, 5000);
return undefined;
}
return 'done';
}
// ...
Worker threads
서버에 부담이 되는 로직을 개발자가 직접 thead를 분배하여 연산 처리 하는 것이라 이해했는데, 아무래도 직접 이해하려 하지 않고 팀원분의 코드만 보고 적용시켰다 보니 아직도 정확하게 어떤 로직으로 어떤 과정으로 이루어지는지 모르는 점이 많이 아쉽다.
한 주간 느낀 점
매주, 매번 프로젝트 때마다 느끼지만, 집중할 수 있는 시간을 늘리는 것과, 알고리즘 문제풀이, 클린코드, 주특기 기술 스택의 기초, 공식문서 등 아쉬운 점이 너무 많아 포트폴리오로 프로젝트를 늘리는 것도 좋지만, 기본기와 자료구조에 대해 배우고 공부하고 정리하면 좋을 것 같다.
특히, 이번에 절실히 느낀 것이 코드를 명확한 계획 없이 생각대로만 짜다 보니 반복되는 코드 + 서로 의존성이 심하다 보니 하나 수정하는데 너무 많은 것들을 손봐야 하는 과정이 정말 아쉬웠다. OOP에 대해 좀 더 공부하고 타입스크립트에 대해서도 좀 더 익숙해져야겠다.
앞으로 중요한 과제
- proxy
- worker thread
- docker, dockerhub, docker-compose
- auto saling
- load balancing
- 면접준비
- 멘탈관리
728x90
반응형