하루 지나서 쓰는 기록....
< 어제 오늘 한 작업!! >
[add&fix&bugfix] 아이템 구매&판매 API 구현
1. [add] 아이템 거래 라우터 추가
- app.js에서 경로 연결
2. [add] 구매 판매 api 구현
3. [fix] db 모델링 개편
- inventory와 equips 테이블 간소화
4. [bugfix] 아이템 류 API 오류 수정
- 캐릭터 테이블을 조회하는 녀석들을 정상화해주었다
[add&fix&refactor] 요구 기능 전부 구현 완료!!!
1. [add] 도전 기능 api 구현 완료
- 보유 아이템 목록 조회 api
- 장비 아이템 목록 조회 api
- 아이템 장착 api
- 아이템 탈착 api
- 돈 벌기 api
2. [fix] Inventory와 Equips 테이블 개편
- 과제 요구사항에 맞춰 name 컬럼 추가
- 변경에 따른 일부 db조회 응답 내용 수정
3. [refactor] 변수 통합 및 주석 수정
- 동일 기능 변수 통합 (isCharExist + isMyChar => checkChar)
- 로직 순서 번호 매김
[add&refactor] 에러알림미들웨어 구현
1. [add] 에러 알림 미들웨어 구현 및 적용
2. [refactor] 주석 및 변수명 정리
[add] 리드미 파일 기입!!
[gitignore] 프리티어 숨기기!!
< 어제 오늘 만난 오류!! >
Headers 전송 오류
평화롭게(?) 아이템 구매와 판매 api를 구현하던 중, 생전 처음 보는 오류를 만나게 됐다!!
유효성 검사를 테스트하느라, 일부러 에러를 발생시켜보고 있었는데, 첫 오류는 정상적으로 상태코드와 응답 메세지를 받는데, 같은 오류를 다시 발생시키자 서버가 꺼지면서 이 에러가 발생했다!!
좀 읽어보니 헤더를 또 설정하고 있어서 문제가 발생하고 있는 거 같았다. 그런디, 내 코드 전체에서 헤더를 설정해주는 건 로그인 API가 유일했고, 문제가 생긴 열을 확인해보면 모두 reture res.status(~~~).json({) 였고, 그래서 이 오류에 대해 조사를 해보니 예상되는 원인은 res.json의 중첩이었다!
구매는 body에 객체를 요소로 갖는 배열을 입력받기 때문에, 여러 개를 구매하기 위한 처리가 필요했다!! 그래서 for...of 문을 통해 루프를 만들었고, 그 안에 db 조작 무결성을 위한 트랜잭션이 있었다. 트랜잭션은 소지품 테이블에 내역 추가, 캐릭터 보유재화 감소 두 기능을 묶고 있었고, 그 중간중간 보유재화와 비용을 비교해 돈이 모자르면 res.json을 하는 검사 로직이 있었다.
처음엔 반복문 내부의 return이 반복문만 빠져나가서, 함수 마지막의 return을 또 발동시키느라 res.json이 중첩된 건가 했는데, 내 상식 선에서 그럴리가 없었구... 실제로 반복문이 돌아가는 다른 API를 확인해봤을 때, 도중에 return이 있어도 정상 작동하고 있었다!!! 그래서 비슷한 로직의 API를 전부 확인한 결과, 유일한 차이를 알게 됐는데...
바로 트랜잭션 내부에 res.json이 있는지 여부였다!!! 문제가 없었던 API들은 트랜잭션이 있더라도, 그 안에서 유효성 검사를 하는 로직이 없었다! 그래서 트랜잭션 구문 안에 있던 검사 로직을 모두 그 이전으로 빼주었고, 확인해보자 정상적으로 서버가 유지되는 걸 확인할 수 있었다!! 조에 같은 오류를 겪은 분이 있는데, 그 분은 또 next()와 관련된 원인이 있었다고 한다!! 기억에 잘 남을 거 같다!!
'TIL&WIL' 카테고리의 다른 글
241203 TIL - 구조분해할당 기본값설정 및 alias (0) | 2024.12.03 |
---|---|
241202 TIL - prisma.update 쿼리 활용 (0) | 2024.12.02 |
241127 TIL - 개인과제02 (0) | 2024.11.27 |
241126 TIL - 개인과제01 (0) | 2024.11.26 |
241125 TIL - JWT (0) | 2024.11.25 |