오늘은
공연 예매 프로젝트를 진행하며 발생한 트러블 슈팅 내용을 첨부합니다.
3. UTC, KST 기준 시간
1. 개요
프로젝트 기간이 끝나 배포를 마쳤습니다. 배포된 서버에서 API 테스트를 해보기로 하였습니다.
이번 프로젝트에서는 공연 예매와 관련된 티켓팅 웹서비스를 만들었습니다.
해당 서비스를 테스트 중 발생한 에러에 관해 다뤄보겠습니다.
2. Trouble Shooting
2.1 배경
배포된 서비스를 Insomnia로 테스트 중이였습니다.
각각의 API를 호출하며 정상 작동하는지 확인했습니다.
2.2 발단
특정 API들만 작동이 안되는 경우를 발견합니다.
데이터베이스와의 연동에 문제는 없었고 해당 API가 로컬에서는 정상 작동하였습니다.
터미널을 확인하니 값이 NULL로 반환되고 있었습니다.
2.3 전개
같은 코드임에도 로컬에서는 작동이 되고 서버에서는 작동이 안되는 이유를 파악하기 위해 몇 가지 방법을 진행했습니다.
- 서버 상에 프로젝트 삭제하고 다시 clone 받아 띄우기
- 해결되지 않았습니다.
- 어느 부분에서 NULL 값을 반환하는지 확인을 위해 console.log로 일일이 확인하기
- 어느 코드에서 문제가 발생하는지 알았지만 해결책은 고안하지 못했습니다.
2.4. 위기
vim으로 문제의 코드에 console.log를 달고 있는 모습입니다.
NULL 값이 어느 부분에서 나오는지는 확인했으나 왜 NULL 값을 반환하는지 알아내지 못했습니다.
2.5 절정
Insomnia에서 해당 호출에 필요한 데이터를 보내고 있습니다.
일정 정보를 특정하기 위해 showDate라는 시간 정보를 보내고 있는데 이는 데이터베이스 상에 아래와 같이 저장되어 있습니다.
필요한 데이터는 위에서 세 번째 데이터입니다.
제가 보낸 데이터와 찾으려는 데이터의 시간이 9시간 차이가 나는 걸 알 수 있습니다.
문제는 KST UTC 시간 차이 때문이였습니다.
시간 정보를 확인하면 제 로컬에서는 KST 기준 시간을 반환하고 실제 데이터베이스와 서버에서는 UTC 기준 시간을 저장, 반환하고 있습니다.
서버에서는 실제 데이터베이스에 저장된 UTC 시간 기준 그대로 데이터를 검색해야 올바르게 데이터를 특정할 수 있었습니다.
2.6 결말
로컬 환경에서 서버에서 서비스를 띄워보는 것은 사소한 부분부터 차이가 있는 것 같습니다. 앞으로도 여러가지 에러와 문제들을 방지하기 위해서는 각각의 환경에서 충분한 테스트를 거치는 시간이 필요하다고 느꼈습니다.
3. 마무리
- 로컬과 서버에서 API가 다르게 동작하는 에러 발견
- 시간 정보를 검색하는데 KST, UTC 기준 시간 차이에서 비롯된 검색 오류였다.
- 충분한 테스트 + 충분한 경험으로 오류가 발생하는 경우를 최소화 시켜야한다.
4. Redis 버전 이슈
1. 개요
Redis를 사용하여 좌석 개수 정보를 저장하기 위해 Redis를 설치하고자 하였습니다.
설치 중 의존성 간에 버전 에러가 발생하였고 해결한 방법에 대해 다뤄보겠습니다.
2. Trouble Shooting
2.1 배경
제 프로젝트는 Nest 10버전을 사용하고 있습니다.
2.2 발단
@liaoliaots/nestjs-redis는 @nestjs/common의 버전 9를 요구했습니다.
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: ticketing-page@0.0.1
npm ERR! Found: @nestjs/common@10.3.10
npm ERR! node_modules/@nestjs/common
npm ERR! @nestjs/common@"^10.0.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer @nestjs/common@"^9.0.0" from @liaoliaots/nestjs-redis@9.0.5
npm ERR! node_modules/@liaoliaots/nestjs-redis
npm ERR! @liaoliaots/nestjs-redis@"*" from the root project
2.3 전개
버전 이슈를 해결하기 위해 여러가지 방법들을 찾았습니다.
- npm install --force or npm install --legacy-peer-deps
- -force를 하면 package-lock.json에 몇가지의 다른 의존 버전들을 추가한다.
- -legacy를 하면 peerDependency가 맞지 않아도 일단 설치한다.
- npm info @liaoliaots/nestjs-redis
- 호환되는 최신 버전을 찾고 해당 패키지를 재설치한다.
- @nestjs/common 버전 낮추기
- package.json 에서 @nestjs/common의 버전을 9로 낮춘 뒤 재설치한다.
이후 npm install --legacy-peer-deps 명령어를 통해 Redis 설치에 성공하였습니다.
2.4. 위기
문제는 배포 시 ubuntu 환경에서 git clone 해온 프로젝트 버전 오류 때문에 패키지가 정상적으로 설치되지 않았습니다.
2.5 절정
현재 프로젝트에서 Redis를 사용하지 않기로 했기 때문에 Redis와 관련된 코드를 전부 주석처리 하거나 삭제함으로써 문제를 해결했습니다. 마찬가지로 package.json 파일에서 또한 Redis에 관한 의존성을 삭제하면서 새로 Install 해줬습니다.
2.6 결말
제가 사용한 방법은 버전 에러에 관한 근본적인 해결 방법은 아닙니다. 아마 Redis를 프로젝트에서 사용해야해서 무조건 설치를 해야했다라면 package.json 내에 nest 버전을 낮추거나 다시 한번 npm install --legacy-peer-deps 과 같은 명령어를 통해 버전 에러를 해결할 수 있지 않을까 ? 생각하고 있습니다.
3. 마무리
- Redis와 Nest JS의 버전 에러 발생
- npm install --legacy-peer-deps 를 통해 프로젝트 상 해결
- 배포 시 다시 문제 발생
- Redis 삭제하여 해결
'Web' 카테고리의 다른 글
Trello - member 테이블을 통하는 인증, 인가 (0) | 2024.07.16 |
---|---|
공연 예매 프로젝트 - 후기 (0) | 2024.07.11 |
공연 예매 프로젝트 - TroubleShooting : 검색 기능, 연간 관계 (0) | 2024.07.08 |
공연 예매 프로젝트 - 해보고 깨닫기.. (0) | 2024.07.06 |
NestJS Interceptor (0) | 2024.07.05 |