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 |