# Day 6
## 이번주 죽어도 할 것
1. 이슈 만들어 둔 것들
1) core SDK 구현
2) DB 설정 및 core SDK 관련 API 구현
3) error 조회
2. swagger 설정
3. ReadMe 추가
1) 이쁘고 멋있고 보기좋게
4. Wiki 수정
5. Backend API
6. NPM 배포 시도
7. 1-6까지하면 코드리뷰해달라고하자
8. 핵심 기술 뭐할지 생각하기 !
9. test coverage 관리하기
#### 핵심기술에 대해서
- 핵심 기술 : https://jiransnc.com/index.php/logcenter 의 밑 특장점과 같이 우리만의 특장점 하나를 정해서 그거 위주로 하자 .
## 오늘은 못 자도 할 것
1. Express에 Swagger 추가
2. server 에 사용하는곳 정보 받아오기
3. SDK 에서 메세지 보내기
4. mongodb 설정
- 추가할 API이 있다면 이슈 추가하기
## 내일(화요일)할 거
1. NPM 배포
2. 나머지 API 만들기
3. 나머지 테스트 코드 만들기
## 수요일할 거
1. test-coverage 측정하기
2. API, 테스트 코드 못만든거 있으면 만들기
---
## 🙋🏻♀️ 우리의 논의 ! 🙋🏻♂️
### 협업 방식에 대한 논의
> SDK와 서버 개발 작업을 어떻게 진행할 것인가!
>
1안) sdk 마무리 - 1명 , server - 3명
2안) sdk, server 2명 2명
3안) server sdk 모두 다 같이
- 석민: SDK 같은경우 라이브 쉐어로 아직 푸쉬를 안해서 다같이 하는게 좋을거 같고, 서버같은 경우 내가 폴더구조를 어느정도 나눠놔서 빠르게 할거 같다.
- 원호: 2:2 보다는 4:0 4:0 이 좋아서
- 혜라: 서버를 먼저 만들어야 sdk 나머지기능을 테스트 해보면서 만들 수 있을 거 같다!/ 그리고 초기 구조는 모두의 의견이 중요하다고 생각한다.
- 은빈: 서버는 같이 하는게 좋다고 생각함. 초기 구조 모두의 의견이 중요하다는 것 동의 +
4안) server 4 sdk 2명 / => 2명 다른 뭔가!
5안) 초기구조만 4명 붙고 API 만들때 4명 붙을 필요 없다 + sdk -> 4명 붙으면 안돼 !! (1~2 명이 적당하다고 본당.! )
... 두개를 합치면!
결론: server 초기 폴더구조 | db 연결 | swagger 설정 + API 한 개 ( pagination ): 다같이
이후, SDK: 2명 + 나머지 2명 ?!!
### test coverage 에 대해서
> test coverage는 어떻게 문서화 할 것이고, 언제 확인할 것인가
>
- jest --coverage 로 테스트하자
- 파일에 대한 어느정도의 coverage 가 나오는지 test coverage 를 작성하면서 알아보자
### swagger 사용법
> 주말동안 사용해본 swagger 기능에 대한 공유
- postman 처럼 기능이 있어서 전부 테스트하면 됨! (postman 을 쓰지 않고 테스트 할 수 있음! )
- 목록도 뜬다
- 나누는 법을 같이 찾아보자!
- JWT 토큰과 같이 로그인 상태를 유지할 경우를 알아보자.
### production과 development env에 따라 swagger route 구분 방법
Q. API Key -> .env 파일에 넣어두면 되지 않을까?!!
### MongoDB only vs MongoDB + Mongoose
> MongoDB를 처음 사용하는데 Mongoose를 같이 사용해도 괜찮을까? MongoDB가 더 헷갈려지지는 않을까?
>
- collection 을 생성할 때 Sequelize와 같이 모델을 만들어 사용한다.
- MongoDB는 모든언어 (java, python 등)에 대한 문서가 있어서 그 문서를 참고하여 javascript에서 사용하기 편하게 만든것이 Mongoose이다.
- typescript 와 같이 사용하기에 mongoose 가 더 편한 거 같다
- Sequelize처럼 Collections마다 변수가 있어서 new db.user({name: 'Santry'})와 같이 쉽게 선언 가능
- MongoDB의 경우 mysql2처럼 해당 쿼리를 그대로 넣어 사용해야 한다.
-> SDK를 class 써서 Server도 SDK와 일관성이 있게 구현할 수 있을 거 같다.
### 어떤 server를 쓸 것인가
>
pm2 clustering : stateless 하게 만드는게 중요함.( 서버에 변수를 못씀 ?!/ state 를 저장할 수 없음 ) -> Session을 사용하지 않고 token 을 이용해서 하는 login 으로 해야할 거 같다.
-> core 8개 8GB ram vs core 4개 16GB ram
-> Quad-core, 8GB ram 낙찰 (석민아 고마워~ )
석민의 생각 : 처음부터 좋은 서버를 빌려서 ㅎㅎ 성능을 높여보쟈!! 낮은 성능에서 돌아가는건 스트레스 테스트로 가능!
### Token 저장: Local storage vs Cookie
- 결론 안났다. 수요일에 다시 결론 내기로 !
> login에 따른 token 어디에 저장할 것인가
>
#### Local Storage
- 장점
- 쿠키에 비해 많은 정보를 저장할 수 있음 (쿠키에 4KB, localStorage 는 MB 단위)
- 쿠키와 달리 필요할 때만 Request를 담아 보낼 수 있다.
- 단점
- 보안성이 취약하며, 이를 해결하기 위해 토큰에 Origin IP정보를 담아 보내지만 구현이 복잡하다.
- token: asdf23923j239f1j3f
- {
user: 1,
ip: 111.111.111.111 // client IP // 이동중에 이사이트를 쓰면? 바뀜
}
->-> req.header.originIp === token.ip
request.ip / token.ip
로그인할 때마다 내 기기 IP 의 토큰을 새로 준다.
그럼 ? 내가 이동해서 IP가 바뀌면 (wifi 바뀜) request IP != token. ip
- OAuth의 경우 토큰방식으로 구성되어 있어서, passport를 사용하지 않고 직접 구현해야 한다.
- 이동중에 originIP가 바뀔경우 다시 로그인해야한다.
#### Cookie
- 장점
- 구현이 간단하며, Passport-OAuth를 사용하기 쉽다.
- 단점
- 원하지 않을때도 request에 쿠키정보를 계속 담아서 보낸다.
- 저장공간이 부족하다.
- 로그아웃 API를 따로 만들어야한다.
[로컬스토리지 취약성](https://snyk.io/blog/is-localstorage-safe-to-use/)