-
Notifications
You must be signed in to change notification settings - Fork 5
week1_output
gyim1345 edited this page Nov 20, 2020
·
12 revisions
🔖 MongoDB Collections & Mongoose schema

const user = new Schema(
{
authName: String,
authId: Number,
},
);
const accountBook = new Schema(
{
accountBookId: Number,
accountBookName: String,
accountBookAuthorizedUsers: [String],
},
);
const transactions = new Schema(
{
accountBookId: Number,
date: Date,
category: String,
paymentMethod: String,
description: String,
cost: Number,
tag: [String],
imageUrl: String,
author: String,
},
);
const paymentMethod = new Schema(
{
name: String
},
);
const category = new Schema(
{
name: String
},
);
const tag = new Schema(
{
name: String
},
);
const user = [{
"_id": 1,
"authName": "name",
"authId": 1234,
},]
const accountBook = [{
"_id": 1,
"accountBookId": 1,
"accountBookName": 'Name',
"accountBookAuthorizedUsers": ['Name'],
},]
const transactions = [{
"_id": 1,
"accountBookId": 1,
"date": "2020-01-15 14:20",
"category": "food",
"card": "naver card",
"description": "분식집에서 떡볶이 먹엇으~",
"cost": 20000,
"tag": ["분식집", "떡볶이"],
"imageUrl": "https://www.asiatime.co.kr/news/data/20191217/p1065600532377147_587_thum.jpg",
"author": "name",
},]
const account = [{
"_id": 1,
"name": "현대카드",
},{
"_id": 2,
"name": "네이버페이"
},]
const category = [{
"_id": 1,
"name": "food"
}, {
"_id": 2,
"name": "transportation"
}, {
"_id": 3,
"name": "education"
},]
const tag = [{
"_id": 1,
"name": "분식집"
}, {
"_id": 1,
"name": "떡볶이"
},]
🔖 Work Flow


🔖 PR / ISSUE / BUG Template
## 🗣 설명
Github 이슈 설명
<br/>
## 📋 체크리스트
> 구현해야하는 이슈 체크리스트
- [ ] 체크 사항 1
- [ ] 체크 사항 2
- [ ] 체크 사항 3
- [ ] 체크 사항 4
<br/>
## 🚧 주의 사항
> 이슈를 구현할 때 유의깊게 살펴볼 사항
- 주의 사항 1
- 주의 사항 2## ✅ 작업 내용
- [ ] 작업 내역 1
- [ ] 작업 내역 2
## 🔨 변경 사항 (구현 사항)
- [ ] 구현 사항 1
- [ ] 구현 사항 2
## 📸 스크린샷 (Optional)
## 🔒 관련이슈 (Optional)
- (close #issueNumber) 형식으로 닫을 이슈를 명시해주세요.### 🤔 Current behaviour (bug)
Write here
<br/>
### 😮 Expected behaviour (correct)
Write here
<br/>
### 😣 버그 재현방법
1. Write here
2. Write here🔖 화면 설계 (기획서)
-
moqups를 활용해 기획서를 작성했습니다.
🤔 고민 요소
- 문자 내용을 통해 지출 카테고리를 어떻게 확인할 수 있을까?
- 핸드폰은 문자가 오는 이벤트가 있다면 -> 캐치한다 이런 느낌이 있는데
-
웹은 문자 정보를 어떻게 받아들일까?🤔🤔🤔
웹 중심 개발을 고민했었는데, 모바일 중심 개발을 고려해야할까?- 아래와 같은 문자 형식으로 웹에 사용자가 넣어주도록 해야할까?
[Web발신]
8,000원 일시불
딸부자네11번출구점
💪 기타 논의
- N-Screen란 무엇인가
- Media Query를 통한 반응형 웹?
- 멀티미디어를 여러 개의 디바이스에서 재생할 수 있는 동기화 기능?
- csv import/export 를 직접 구현하는지 or npm module 사용 ?
- 가계부 내역 추가시에 이미지 업로드 기능
🛠️ 기술 논의
- 프론트 엔드 타입스크립트를 적용 해야 할지 말지 논의를 했습니다.
- 도입 한다면 가질 수 있는 이점
- TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 오류를 포착할 수 있는 장점.
- 명시적인 정적 타입 지정은 개발자의 의도를 명확하게 코드로 기술할 수 있다는 점.
- 코드의 가독성을 높이고 예측할 수 있게 하며 디버깅이 쉬운점.
- 단점/고민한 점
- 모든 그룹원 들에게 처음 접하는 기술로 인하여 프로젝트 할때 생기는 추가적인 비용.
- 현 프로젝트에서 처음 접하는 필수 기술 스택이 많다는 점.(redux/mobx, koa, react는 대부분 저번주 프로젝트로 처음 접함)
- 결론
- 필수로 구현 하는 스택이 거의 다 처음이라 5주 안에 서비스 출시를 못할 수 있어서 꼭 필요 한게 아닌 기술 스택이면 보류 하기로 했습니다.
- 타입 스크립트는 일단 보류 하되, 나중에 여유나 꼭 필요 하다고 생각 되면 적용 하기로 했습니다.
-
관계형 데이터베이스의 한계?
- 데이터 스키마가 고정적
- 스키마: 어떤 형식의 데이터를 넣을지에 대한 정보
- ex) 새로 등록하는 데이터 형식이 기존과 다른 경우, 기존의 데이터를 수정해야 새 데이터 등록 가능
- 데이터양이 많을 때 데이터베이스의 스키마를 변경하는 작업이 힘들 수 있다.
- 확장성
- 저장하고 처리해야 할 데이터양이 늘어나면 여러 컴퓨터에 분산시키는 것이 아니라, 데이터베이스 서버의 성능을 업그레이드 하는 방식
- 데이터 스키마가 고정적
-
MongoDB는 이러한 한계를 극복한 NoSQL 데이터베이스
- 유동적인 스키마
- 여러 컴퓨터로 분산하여 처리할 수 있도록 확장하기 쉽게 설계되었음
- 구체적인 서비스 및 기능들이 기획이 되지 않아 데이터의 구조가 바뀔 수 있는점을 감안할 때 MongoDB를 사용한다면 스키마를 유동적으로 바꿀 수 있기 때문에 유리하다.
- 가계부 서비스의 특성상 데이터가 빈번하게 변경되기 보다는 읽고 쓰는 경우가 압도적으로 많기 때문에 (join문 사용으로 인해 성능저하가 있을 수 있는) RDBMS보다 모든 데이터가 이미 하나의 컬렉션 안에 저장되어 있는 MongoDB가 큰 장점을 갖는다.
- tdd는 무리일것 같지만 test 부분적용은 좋을것 같다는 생각이 들었습니다
- test를 적용 했을때의 장점
- 수동으로 입력값을 넣어서 출력값을 확인 할 필요 없다는점.
- 한번 작성하면 테스트가 확인 해주니 어디 수정 하다가 터질 고려를 할 필요가 없다는점.
- jest + superTest(통합테스트)
- 테스트용 DB가 필요하다!
- mocking 데이터를 생성해서 -> 단위테스트도 가능하다.
- 단위테스트: moking을 통해 다른 파일과 분리해준다.
- 모두 테스트 하는 것이 좋고, 중요한 부분이라고 생각했습니다.
- 그런데 구현할 기능이 많아서 전체 부분에 테스트를 진행하기는 부담이 있다고 판단했습니다.
- 그래서 테스트가 꼭 필요한 부분부터 테스팅을 진행하고 -> 점차 확대하기로 결정했습니다.
- react testing library
- 렌더링 만 확인할지, event(click 등), e2e 도 다 할지 아직 미정.
- 비즈니스 로직 보다 ui testing이 훨신 시간이 많이 들어서 어떻게 어느 부분까지 적용 할지 아직 정하지 않았습니다.