본문 바로가기

verdantjuly/Today I Learned

TIL 20230706

728x90

 

Event

9:30 산삼 팀 회의

 

생활 계획표

 

AM 6:00 체조, 아침식사, 산책, 샤워, 설거지, 세탁

AM 7:00 입실, 알고리즘 공부

AM 9:00 본 공부 시작

PM 1:00 ~ 2:00 점심 식사

PM 6:00 ~ 7:00 저녁식사

PM 7:00 TIL, WIL 제출

PM 9:00 퇴실 (카톡 확인)

PM 11:00 취침

 

이번 주 목표

목요일 : 노드 심화 강의 듣기 (테스트 코드?), 프로그래머스 1문제, 알고리즘 2-2까지

금요일 : 노드 심화 과제 Lv.3 리팩토링 (피드백 반영), Lv.4 ERD, 프로그래머스 1문제, 알고리즘 2-3까지

토요일 : 노드 심화 과제 Lv.4 댓글, 프로그래머스 1문제, 알고리즘 2-6까지

일요일 : 노드 심화 과제 Lv.4 좋아요, 좋아요 게시글 조회, 검토, 제출, 프로그래머스 1문제, 알고리즘 2-10까지,알고리즘 2주차 숙제

오늘 목표

TIL 작성

TIL 리뷰

노드 심화 강의 듣기 (테스트 코드 1-21 ~ 1-32)

프로그래머스 1문제

알고리즘 2-2까지

페어 프로그래밍

오늘 한 것

TIL 작성

TIL 리뷰

알고리즘 2-2까지

프로그래머스 1문제 풀기

노드 심화 강의 듣기 (테스트 코드 1-21 ~ 1-25)

페어 프로그래밍 : lv.3 migration models

주사위의 개수 : https://verdantjuly.tistory.com/284

1. jwt에 대하여

문제

우준호 튜터 님 : 왜 db에서 검색하는데 토큰에서 한번 더 검색하는가?

시도

나의 답변 :

우리가 진행하는 프로젝트에서는 그렇게 하지 않아도 됩니다.

필요한 정보가 userId밖에 없기 때문에 token에 저장된 userId를 그대로 res.locals.user에 저장하면 됩니다.

해결

// 우준호 튜터 님의 질문과 답변
// 같은 조였던 서원 님께서 정리해 주셨다

jwt > 면접 단골질문

왜 db에서 검색하는데 토큰에서 한번 더 검색하는가?

jwt로 미들웨어 구현
jwt 장점: 암호화/보안/검증된 라이브러리?
> 따로 저장하지 않아도 된다.
> 쿠키안에 키랑 정보가 다 들어있어서 저장공간이 별도로 필요 없다.
> 인증에 대한 정보가 담겨 있다.

>>>jwt의 장점 
암호화
DB에 저장한 데이터를 보지 않아도 이 토큰이 암호화/복호화를 통해 위변조 되었는지를 알 수 있다. 

위변조를 토큰만 보고도 검증할 수 있다.
그런데 왜 유저아이디로 DB를 한번 더 검증해서 가져올까?
> 토큰이 만료되기 전에 유저 DB의 정보가 변경되었을 경우 한번 더 비교하기 위해?
>>> 사실은 필요없다. (이 로직에서는)

>>> 필요할 때가 언제인가?
> 유저 정보의 모든 정보가 필요한 로직이 있다고 가정하고, 유저 정보를 조회하기 위해 필요하다.
> ex)닉네임을 조회하기 위해 db를 조회했다.
>> 닉네임이 보여져도 상관없다면 해당 닉네임을 jwt에 포함시킨다.

ex)작성자의 연락처가 필요하다.
>> 전화번호는 보여지면 안되는 정보이기 때문에 해당 상황에서 조회한다.

경우에 따라서 넣어야 될 필요는 있지만, 넣지 않는 편이 좋다.
> 우리 팀의 로직에서는 DB조회 부분이 필요가 없다.

필요한 경우
서비스에 어드민이 있다. 
악질 사용자가 있을 떄 사용 금지 시키고 싶음
ex) 활동정지, 임시차단 

jwt로만 인증하면 이 유저를 악성 사용자인지 알 수가 없다. 
근데 db로는 악성 사용자인지 구분을 할 수 있기 때문에 이런 상황에서는 필요하다.

ex)
jwt로 검증은 가능하다. 그러나 jwt 안에있는 정보만으로는 권한을 주는것을 판단하기 어려운 상황일 때 db조회로 권한 설정 여부를 판단해야 한다.

알게 된 점

필요 없는 과정을 줄이면 실행 속도를 높일 수 있다.

jwt의 장점 : DB에 저장한 데이터를 보지 않아도 이 토큰이 암호화/복호화를 통해 위변조 되었는지를 알 수 있다. 

 

 

2. SequelizeMeta

문제

table을 drop 쿼리를 이용해서 하나 삭제한 뒤에 migration을 수정하고 다시 migrate하였을 때 

uptodate 로 나오면서 migrate 가 다시 진행되지 않음

시도

delete 쿼리로 SequelizeMeta 를 초기화 하고 다시 migrate함

해결

migrate가 성공함

알게 된 점

SequelizeMeta에 기록이 남아 있으면 migration을 할 수 없다.

이해에 도움이 되는 자료 : https://puppypaw.tistory.com/245

 

3. Unrecognized datatype for attribute 

문제

node app.js를 시도하면 다음과 같은 에러가 발생한다.

C:\Users\admin\Desktop\코딩\NODE\4th Week\Sequelize-Relations (Lv.4)\node_modules\sequelize\lib\model.js:726
throw new Error(`Unrecognized datatype for attribute "${this.name}.${name}"`);
^

Error: Unrecognized datatype for attribute "CommentLikes.PostId"

시도

type:INTEGER을 적어야 하는 자리에 PostId:INTEGER를 적어서 type으로 수정함.

해결

잘 됨

알게 된 점

오타 주의

 

3. migration 순서

문제

1:N 관계로 Users와 Posts 테이블을 생성하여 migrate할 시에 진행 되지 않음.

시도

migration 뒤의 숫자를 바꿔 migrate 순서를 바꿔 준다.

해결

잘 해결 됨

알게 된 점

migrate 파일명 순으로 migrate 순서가 결정된다.


정리

필요 없는 과정을 줄이면 실행 속도를 높일 수 있다.

jwt의 장점 : DB에 저장한 데이터를 보지 않아도 이 토큰이 암호화/복호화를 통해 위변조 되었는지를 알 수 있다. 

 

SequelizeMeta에 기록이 남아 있으면 migration을 할 수 없다.

 

오타 주의

체크리스트

[ O ] 예쁜 말로 협업하였는가?

예쁜 말로 하긴 했는데 의견이 강해서 의견 일치를 이루기 힘들었다.

[ O ] 12시간 동안 몰입하였는가?

[ O ] 코딩 시 복사 + 붙여넣기를 하지 않았는가?

[ O ] 친절한 개발자였는가?

[ O ] 오늘을 평가하였을 때 주니어 개발자가 될 수 있겠는가?

 

KPT

Keep

목표를 열심히 실천하려고 노력한다.

 

Problem

초반에 비해 TIL의 내실이 빈약하다. 의무적으로 채우려고 하고 있다.

 

Try

매일 가장 상위에 노출되는 TIL 을 다시 보며 과거로 돌아가자.

무조건 문시해알 양식을 지키자. 알게 된 점만 있는 게 아니라 모르는 것 자체가 문제에 해당한다.

소감

협업은 중요하다. 언젠가 의견을 일치하고 서로를 이해하는 과정이 익숙해지고 이해가 되고 짧아지길 바란다. 산삼 파이팅!!!

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20230708  (0) 2023.07.08
TIL 20230707  (0) 2023.07.07
TIL 20230705  (0) 2023.07.05
TIL 20230704  (0) 2023.07.04
TIL 20230703  (0) 2023.07.03