Cashbook 8
CASHBOOK-8
우아한 테크 캠프에서 진행한 세 번째 프로젝트, 우아한 가계부
Package Manager
yarn
.gitignore
- vscode/
- DS_Store
.github
- ISSUE_TEMPLATE.md
- PULL_REQUEST_TEMPLATE.md
Backend
Dependencies
- typescipt v4.3.5
- eslint v7.31.0
- eslint-config-standard
- eslint-plugin-import
- eslint-plugin-node
- eslint-plugin-promise
- express v4.17.1
- dotenv v10.0.0
- mysql2 v2.2.5
- typeorm v0.2.34
- class-validator v0.13.1
- node-fetch v2.6.1
- jsonwebtoken v8.5.1
- cors v2.8.5
scripts
"lint": "eslint src/**/*.ts",
"start": "tsc && node dist/server.js",
"build": "tsc"
디렉토리 구조
### server.ts
entry file
database connect 후 서버 실행
### app.ts
express 미들웨어 설정
/api router 설정
### routers
router 설정
### controllers
request 데이터 검증
service 호출
response 보냄
### services
repository 호출 후 필요한 경우 데이터 반환
에러 핸들링
### repositories
typeorm을 이용해서 db에 쿼리 날린 결과 반환
### entities
typeorm에서 사용할 엔티티 설정
### database
database options 설정
connection을 만들어 반환
### middlewares
express custom middleware 작성
* auth middleware: oauth 인증 관련 요청 처리와 에러 응답
* error middleware: request에 대한 에러 분기 처리하여 응답
### third-party
다른 서버에 보낼 api 요청
### request
class-validator 사용한 request 데이터 검증
### errors
에러 타입 정의와 메시지 설정
### config
* dotenv: .env에서 가져올 설정 데이터를 export하고 없는 경우 에러 핸들링
### types
* express.d: typescript에서 request의 데이터 타입 설정을 위한 declare
### enums
enum 정의
### lib
* wrap-async: 비동기 함수 에러 핸들링
### utils
자잘한 유용한 것들
Oauth 2.0
/api/auth/callback 으로 들어온 request에서 code를 가져온다.
이 code를 사용해서 github oauth 서버에서 access token을 받아온다.
이 access token을 사용해서 github api 서버에서 사용자 정보를 가져온다.
이 사용자 정보로 jwt를 발급 받아서 response cookie에 넣고, client를 redirect해준다.