TIL 230513 클론코딩1
✅클론코딩 주차 시작
- 페이스북 클론코딩 프로젝트가 시작되었다.
- https://wood-art-566.notion.site/20-346f75ee10ea4ae4b930977de3521c10
✅오늘 겪은 문제 및 해결
access token & refresh token에 대한 개념을 익히고 처음으로 적용하느라 어려움이 많았다.
특히 refresh token을 저장하기 위한 기능을 구현하면서 아래의 오류들을 마주쳤다.
1.
TypeError: Cannot read properties of undefined (reading 'findOne') at TokenRepository.setRefreshToken (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\repositories\tokens.repository.js:6:44) at UserService.login (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\services\users.service.js:44:32) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async login (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\controllers\users.controller.js:87:24) POST /api/auth/login 400 109.022 ms - 54
주어진 오류 메세지를 보면 TokenRepository.setRefreshToken 함수에서 findOne을 호출할 때 오류가 발생하고 있다. Tokens 모델이 올바르게 정의되지 않았거나 findOne 메서드가 Tokens 모델에 없는 경우에 발생할 수 있는 문제라고 하는데.. migration과 model명이 각각 token.js로 되어있어서 token을 불러와줬는데,
위의 코드에서 보다시피 token안에서 Tokens의 모델을 불러와야했다. Tokens로 불러와주니 해결!
2.
riginal: Error: Unknown column 'user_id' in 'field list' at Packet.asError (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\packets\packet.js:728:17) at Query.execute (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\commands\command.js:29:26) at Connection.handlePacket (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\connection.js:489:32) at PacketParser.onPacket (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\connection.js:94:12) at PacketParser.executeStart (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\packet_parser.js:75:16) at Socket.<anonymous> (C:\Users\cryst\OneDrive\바탕 화면\sparta\NODE JS\주특기주차\facebookclone\99_facebookClone_Back\node_modules\mysql2\lib\connection.js:101:25) at Socket.emit (node:events:513:28) at Socket.emit (node:domain:489:12) at addChunk (node:internal/streams/readable:324:12) at readableAddChunk (node:internal/streams/readable:297:9) { code: 'ER_BAD_FIELD_ERROR', errno: 1054, sqlState: '42S22', sqlMessage: "Unknown column 'user_id' in 'field list'", sql: 'SELECT `user_id` FROM `Tokens` AS `Tokens` WHERE `Tokens`.`user_id` = 1 LIMIT 1;', parameters: undefined }, sql: 'SELECT `user_id` FROM `Tokens` AS `Tokens` WHERE `Tokens`.`user_id` = 1 LIMIT 1;', parameters: {}
오류 메시지를 보면 'Tokens' 테이블에서 'user_id'라는 컬럼을 찾을 수 없다는 내용이고, 해당 오류는 데이터베이스에 'user_id' 컬럼이 정의되지 않았기 때문에 발생한다..
컬럼을 추가하면 간단하게 해결될 에러였지만, 테이블을 생성하는 단계에서 조금 헤맸다.
나는 컬럼을 추가하는 방법이 아닌 db를 날리고 다시 생성하는 방법을 택했다.
migration과 model을 수정한 후에 db를 drop하고 다시 생성하면 테이블이 생성될 거라고 생각했는데,
Tokens라는 테이블은 생성되지만 원하는 모양의 table이 생성되지 않았다.
아래와 같이 테이블 명령어로 기본적인 컬럼을 지정하여 테이블을 생성한 후에
npx sequelize model:generate --name Tokens --attributes user_id:string,token:string
migration과 model을 수정해줘야 비로소 내가 원하는 모양의 테이블을 생성할 수 있었다.
✅오늘 알게된 점 및 추후 학습계획
이전에 CRUD API를 반복해서 만들었지만 아직도 익숙하지 않은 부분들이 있고, 특히 100% 완벽하게 이해하지 못하고 넘어갔던 부분들이 한두개씩 나온다. 이런 부분들은 반복학습을 하면서 더 확실히 이해하고 있다.
CRUD api의 근간이나 서버의 개념을 확실히 인지하고 넘어가야 refresh token, access token등의 기능들의 개념이 헷갈리지않고 원활히 진행할 수 있다는 것을 다시 한번 느꼈다.
token을 발급받는 것 까지 성공했으니 다음 단계에서 토큰의 validation에 따른 재발급, 처리등을 구현할 계획이다.
내일도 화 이 팅
'개발 > 차근차근 개발일지 TIL' 카테고리의 다른 글
TIL 230515 항해99 페이스북 클론코딩2 [Access/Refresh Token] (0) | 2023.05.15 |
---|---|
WIL 230514 협업을 진행하며 느낀 아쉬운 점, 뿌듯한 점 (1) | 2023.05.14 |
TIL 230510_TEST CODE란? (2) | 2023.05.10 |
TIL 230509_mini project(첫 협업!) (0) | 2023.05.09 |
TIL 230507_알기 쉽게 정리한 CORS/CORS에러! (0) | 2023.05.08 |