일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 프로미스
- 자바스크립트
- OSI7계층
- docker
- 스코프
- pm2
- rebase
- on_delete
- node
- status code
- westagram
- django westagram
- 트랜잭션
- TypeError: this.boardRepository.createBoard is not a function
- manytomanyfield
- bcrypt
- 노드
- Django
- 실행 컨텍스트
- crud2
- 호이스팅
- nodeJS
- 장고초기세팅
- async/await
- Jest
- javascript
- wecode
- CORS
- typescript
- JWT
- Today
- Total
될때까지
((과제2)) 프리온보딩 DAY 1 본문
1차 프로젝트 제출하고 2분있다가? ㅋㅋㅋㅋ 다시 시작하는 2차 프로젝트 모델링
1차때는 SQL문도 어색해 온라인도 어색해 버벅거렸지만, 2차에는 보여줄께 달라진 나
이번에는 팀원들과 데이터 모델링 관련 내 의견도 제시하고, raw query로 타이핑하면서 많이 도왔다. 뿌듯뿌듯
이번 과제에서는 리프레시 토큰, 엑셀파일 다운로드, JSON 데이터 파싱 후 DB에 집어넣는 API가 있었다.
3가지 기능 모두 해보고 싶었는데 1차때 받았던 스트레스가 아직 가시지 않아 회원단을 맡았다. 회원 업데이트!.!
프리온보딩이 종료되고 나서 친했던 멤버들과 해당 과제 다시 구현해보고 싶다. 2번 과제는 꼭 다시 도전하겠어!!
그럼 2차 프로젝트 시작합시당 🔥
# 테이블 생성 시 필요한 SQL
대충 아래의 레이아웃을 벗어나지 않으니까 외워두자
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`account` VARCHAR(20) UNIQUE NOT NULL,
`password` VARCHAR(256) NOT NULL,
`name` VARCHAR(20),
`lng` DECIMAL(30,10),
`type_id` INT NOT NULL,
`created_at` DATETIME DEFAULT NOW(),
`updated_at` DATETIME DEFAULT NOW() ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (type_id) REFERENCES user_type (id),
);
# 초기 작업
1. 프로젝트를 진행할 로컬 디렉토리로 이동한다.
2. git 저장소의 주소를 깃허브에서 복사 한 뒤 명령어 git clone 뒤에 붙이고 엔터
git clone 깃허브주소
3. 담당 기능으로 브랜치 생성
git checkout -b 브랜치이름
4. 패키지 설치
npm install
5. MySQL Workbench에서 데이터베이스 생성
6. .env 파일 생성 및 DB접속 정보 입력
DATABASE_URL = mysql://root:비밀번호@127.0.0.1:3306/DB이름
TYPEORM_CONNECTION = mysql
TYPEORM_HOST = 127.0.0.1
TYPEORM_PORT = 3306
TYPEORM_USERNAME = root
TYPEORM_PASSWORD = 비밀번호
TYPEORM_DATABASE = 데이터베이스이름
TYPEORM_LOGGING = TRUE
7. dbmate로 생성한 마이그레이션 파일이 존재한다면 바로 아래 명령어 실행한다.
dbmate up
8. 그럼 스키마.sql 파일이 생성되고, 연결한 DB에 테이블이 자동 생성된다.
# 회원정보 수정전에?
- 로그인했나?
- 로그인한 유저가 정보 수정 권한이 있나?
를 확인하는 로직이 먼저 필요했다.
로그인 기능은 다른 팀원이 담당해서 구현하고 있는데 해당 기능이 완료될때까지 기다리고 있을 순 없지
그래도 jwt는 사용해봤기에 토큰 생성 및 복호화 방법에 대해 복습할 겸
혼자 테스트 파일을 만들어서 토큰에 담긴 값을 어떻게 추출하더라~ 시도해봤다.
const jwt = require("jsonwebtoken")
const creatToken = async () => {
const token = jwt.sign({id : 4}, 'secretKey', { expiresIn: '1h' });
console.log('토큰인가요', token)
return token
}
const verifyToken = async (token) => {
const verifyToken = jwt.verify(token, 'secretKey')
console.log('이러면 뭐찍히나', verifyToken)
}
creatToken()
const token = '위에서 생성한 토큰값 넣어라'
verifyToken(token)
난 여기서 verify부분만 필요할듯!! jwt를 공식문서에서 찾아보다가 재미난 부분을 발견했다.
jwt.verify(token, secretKey)
jwt.decode(token)
verify는 시크릿키가 필요하고 토큰의 서명부분까지 검증하고,
decode는 시크릿키가 없어도(누군가 위변조해도) 페이로드 정보를 디코드해 얻어낼 수 있다.
보안이 안좋잖아 그럼? 그래서 서명까지 확인하는 verify를 사용했드아.
# 수정하면 안되는 상황
- 로그인 안했을 때
- 유저가 대표 관리자가 아닐 때
- 키가 이름, 연락처, 담당 지역이 아닐 때
- 벨류값이 안들어왔을 때
- 유효성 검사(이름, 연락처)
- 존재하는 유저가 아닐 때
- 존재하지 않는 지역 id 일때
- 똑같은 데이터로 수정하려고 할 때
# 수정 가능
일단 수정되는 코드를 다 작성했다.
내일 작업해야할 코드는 스웨거 적용, 업데이트 트랜잭션 처리, 에러핸들링 미들웨어!!
'프로젝트 > 프리온보딩' 카테고리의 다른 글
((과제2)) 프리온보딩 DAY 3 (0) | 2022.10.09 |
---|---|
((과제2)) 프리온보딩 DAY 2 (0) | 2022.10.09 |
((과제1)) 프리온보딩 DAY 3 (0) | 2022.10.06 |
((과제1)) 프리온보딩 DAY 2 (1) | 2022.10.05 |
((과제1)) 프리온보딩 DAY 1 (0) | 2022.10.04 |