나만의 작은 도서관
[TIL] 240614 캠프 61일차: docker를 사용하는 이유, redis가 좋은 이유 본문
오늘 배운 내용
docker를 사용하는 이유
이번에 개인 과제 해설 영상을 보다가 docker에서 redis를 사용하는 방식을 알게되었다. 그 중 docker를 정말 많이 들어봤는데 왜 사용하는 지는 몰라서 이번에 해설 영상에도 나온 겸 한 번 알아보았다. 마침 내가 자주 보던 유튜버가 정리해 둔 영상이 있어 영상을 보니 다음과 같았다.
- 원하는 개발 환경을 파일에 저장하면, docker는 이를 너가 원하는 어떤 머신에든 해당 환경을 시뮬레이션 해준다.
- 이러한 환경들은 각기 독립적으로 존재하기 때문에, 원하는 무슨 환경이든 모듈식으로 관리 가능하다. (그래서 파이썬 서버, 자바 서버, 데이터베이스 서버, 이렇게 막 추가 해서 살 필요가 없이 docker하나면 된다!)
이렇듯 서버와 로컬의 운영체제가 뭐든 항상 같은 환경에서 시뮬레이션하기 때문에 환경에 따른 오류가 발생하지 않다는 점이 docker의 강점인 듯 하다. 이번에 docker를 알아보면서 사람들이 왜 docker, docker하는 지 알게되었다.
참고한 유튜버 영상
https://www.youtube.com/watch?v=chnCcGCTyBg
redis가 좋은 이유
Redis는 Remote Dictionary Server의 약자로 키(Key) - 값(Value) 쌍의 해시 맵과 같은 구조를 가진 비관계형(NoSQL) 데이터베이스 관리 시스템(DBMS)이다.Redis는 오픈 소스 기반으로 인-메모리(In-memory) 데이터 구조 저장소로 메모리에 데이터를 저장한다. 따라서 별도의 쿼리문이 필요로 하지 않고, 인-메모리에 저장되기 때문에 상당히 빠른 속도로 처리할 수 있다.
출처: https://ittrue.tistory.com/317 [IT is True:티스토리]
한 마디로 인-메모리 구조라 따로 네트워크를 통해 DB에 접속하는 것이 아닌, 해당 컴퓨터에 존재하는 메인 메모리를 이용하는 방식이다. 이렇게 하면 네트워크를 통해 데이터를 가져오는 과정이 생략되고 쿼리문도 사용하지 않아 매우 빠르게 데이터에 접근 가능하다.
오늘의 Trouble Shooting
Problem 1. 오류 로직을 만들었지만 {status: 'success'}가 {status: 'fail'} 대신 뜨는 문제
비정상적인 방식으로 점수를 획득했는지 검증하는 코드를 짠 다음, 해당 검증 코드가 정상적으로 작동하는 지 확인하기 위해 아래와 같이 잘못된 코드를 일부러 넣어봤지만.. 너무나 당연하듯 검증 코드를 지나쳐 성공 메세지인 {status: 'success'}
가 출력되었다.
// 게임이 시작되면 끝날때까지 실행되는 코드. 100점이 되어야 다음 스테이지로 정상적으로 넘어간다.
update(deltaTime) {
this.score += deltaTime * 0.001;
if (Math.floor(this.score) === 10 && this.stageChange) { // Math.floor(this.score) === 100에서 100을 10으로 수정
this.stageChange = false;
sendEvent(11, { currentStage: 1000, targetStage: 1001 });
}
}
Solve. 게임 시작 시 timestamp설정 추가
게임을 시작했을 때 timestamp를 설정하는 코드가 누락되어 있었다. timestamp를 설정하는 부분이 누락되어 있으니 당연히 currentStage의 timestamp속성 값은 undefined가 되고, 이를 사용하는 elapsedTime또한 undefined가 된다. 그래서 아래 검증 코드를 항상 지나치고 success가 뜨는 것이였다. timestamp를 설정하는 코드를 넣었더니 정상적으로 fail이 떴다.
const serverTime = Date.now();
const elapsedTime = (serverTime - currentStage.timestamp) / 1000; // 초 단위로 계산
// elapsedTime은 serverTime - undefined이므로, undefined로 취급되어 항상 if문에 들어가지 않게 된다.
if (elapsedTime < 100 || elapsedTime > 105) {
return { status: 'fail', message: 'Invalid elapsed time' };
}
오늘 한 일
- 강의 영상 및 해설 영상 클론 코딩 -완-
- 과제 해설 영상 -완-
- 다음 주 팀 프로젝트 코드 컨벤션 및 깃헙 룰 결정회의 참여
'Today I Learn' 카테고리의 다른 글
[TIL] 240617 캠프 64일차: Socket.io의 on과 emit (0) | 2024.06.17 |
---|---|
[TIL] 240611~240613 58~60일차: 예비군으로 인한 불참 (0) | 2024.06.14 |
[TIL] 240610 캠프 57일차: 인터페이스, SOLID, 아키텍처 패턴, jest 사용 오류해결 (0) | 2024.06.10 |
[TIL] 240607 캠프 54일차: prisma: findFirst, findUnique, 그리고 유일성 조건에 따른 오류 (1) | 2024.06.07 |
[TIL] 240605 캠프 52일차: Prisma 배열과 객체의 반환 값 판정, Prisma NOT, gte, lte사용법 (0) | 2024.06.05 |