Skip to content

week1_output

gyim1345 edited this page Nov 20, 2020 · 12 revisions

🚀 Week 1 산출물 정리

🔖 MongoDB Collections & Mongoose schema

Collections

erd

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
  },
);

Db Collection sample

user

const user = [{
  "_id": 1,
  "authName": "name",
  "authId": 1234,
},]

accountBook

const accountBook = [{
  "_id": 1,
  "accountBookId": 1,
  "accountBookName": 'Name',
  "accountBookAuthorizedUsers": ['Name'],
},]

transactions

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",
},]

account

const account = [{
  "_id": 1,
  "name": "현대카드",
},{
  "_id": 2,
  "name": "네이버페이"
},]

category

const category = [{
  "_id": 1,
  "name": "food"
}, {
  "_id": 2,
  "name": "transportation"
}, {
  "_id": 3,
  "name": "education"
},]

tag

const tag = [{
  "_id": 1,
  "name": "분식집"
}, {
  "_id": 1,
  "name": "떡볶이"
},]
🔖 Work Flow

image

image

🔖 PR / ISSUE / BUG Template

ISSUE Template

## 🗣 설명

Github 이슈 설명
<br/>

## 📋 체크리스트

> 구현해야하는 이슈 체크리스트

- [ ] 체크 사항 1
- [ ] 체크 사항 2
- [ ] 체크 사항 3
- [ ] 체크 사항 4
<br/>

## 🚧 주의 사항

> 이슈를 구현할  유의깊게 살펴볼 사항

- 주의 사항 1
- 주의 사항 2

PR Template

##  작업 내용
- [ ] 작업 내역 1
- [ ] 작업 내역 2

## 🔨 변경 사항 (구현 사항)
- [ ] 구현 사항 1
- [ ] 구현 사항 2

## 📸 스크린샷 (Optional)

## 🔒 관련이슈 (Optional)
- (close #issueNumber) 형식으로 닫을 이슈를 명시해주세요.

BUG Template

### 🤔 Current behaviour (bug)

Write here

<br/>

### 😮 Expected behaviour (correct)

Write here

<br/>

### 😣 버그 재현방법

1. Write here
2. Write here

🔖 화면 설계 (기획서)
  • moqups를 활용해 기획서를 작성했습니다.

로그인 페이지

image

가계부 선택 페이지

image

대시보드(메인 페이지)

20201119_171157_36

수입/지출 페이지

20201119_171157_37

카드/계좌 페이지

20201119_171157_38

카테고리/태그 페이지

20201119_171157_39

달력 페이지

20201119_171157_40

보고서 페이지

보고서

설정 페이지

image

🤔 고민 요소

MMS -> Text Parsing

  • 문자 내용을 통해 지출 카테고리를 어떻게 확인할 수 있을까?
    • 핸드폰은 문자가 오는 이벤트가 있다면 -> 캐치한다 이런 느낌이 있는데
    • 웹은 문자 정보를 어떻게 받아들일까? 🤔🤔🤔
  • 웹 중심 개발을 고민했었는데, 모바일 중심 개발을 고려해야할까?
  • 아래와 같은 문자 형식으로 웹에 사용자가 넣어주도록 해야할까?
[Web발신]
8,000원 일시불
딸부자네11번출구점
💪 기타 논의

멘토님한테 물어볼 토픽

  • N-Screen란 무엇인가
    • Media Query를 통한 반응형 웹?
    • 멀티미디어를 여러 개의 디바이스에서 재생할 수 있는 동기화 기능?
  • csv import/export 를 직접 구현하는지 or npm module 사용 ?

추가할만한 기능

  • 가계부 내역 추가시에 이미지 업로드 기능
🛠️ 기술 논의

Javascript vs Typescript

  • 프론트 엔드 타입스크립트를 적용 해야 할지 말지 논의를 했습니다.
  • 도입 한다면 가질 수 있는 이점
    • TypeScript는 정적 타입을 지원하므로 컴파일 단계에서 오류를 포착할 수 있는 장점.
    • 명시적인 정적 타입 지정은 개발자의 의도를 명확하게 코드로 기술할 수 있다는 점.
    • 코드의 가독성을 높이고 예측할 수 있게 하며 디버깅이 쉬운점.
  • 단점/고민한 점
    • 모든 그룹원 들에게 처음 접하는 기술로 인하여 프로젝트 할때 생기는 추가적인 비용.
    • 현 프로젝트에서 처음 접하는 필수 기술 스택이 많다는 점.(redux/mobx, koa, react는 대부분 저번주 프로젝트로 처음 접함)
  • 결론
    • 필수로 구현 하는 스택이 거의 다 처음이라 5주 안에 서비스 출시를 못할 수 있어서 꼭 필요 한게 아닌 기술 스택이면 보류 하기로 했습니다.
    • 타입 스크립트는 일단 보류 하되, 나중에 여유나 꼭 필요 하다고 생각 되면 적용 하기로 했습니다.

MySQL vs NoSQL

  • 관계형 데이터베이스의 한계?

    1. 데이터 스키마가 고정적
      • 스키마: 어떤 형식의 데이터를 넣을지에 대한 정보
      • ex) 새로 등록하는 데이터 형식이 기존과 다른 경우, 기존의 데이터를 수정해야 새 데이터 등록 가능
      • 데이터양이 많을 때 데이터베이스의 스키마를 변경하는 작업이 힘들 수 있다.
    2. 확장성
      • 저장하고 처리해야 할 데이터양이 늘어나면 여러 컴퓨터에 분산시키는 것이 아니라, 데이터베이스 서버의 성능을 업그레이드 하는 방식
  • MongoDB는 이러한 한계를 극복한 NoSQL 데이터베이스

    1. 유동적인 스키마
    2. 여러 컴퓨터로 분산하여 처리할 수 있도록 확장하기 쉽게 설계되었음

MongoDB를 선택한 이유

  • 구체적인 서비스 및 기능들이 기획이 되지 않아 데이터의 구조가 바뀔 수 있는점을 감안할 때 MongoDB를 사용한다면 스키마를 유동적으로 바꿀 수 있기 때문에 유리하다.
  • 가계부 서비스의 특성상 데이터가 빈번하게 변경되기 보다는 읽고 쓰는 경우가 압도적으로 많기 때문에 (join문 사용으로 인해 성능저하가 있을 수 있는) RDBMS보다 모든 데이터가 이미 하나의 컬렉션 안에 저장되어 있는 MongoDB가 큰 장점을 갖는다.

Test

  • tdd는 무리일것 같지만 test 부분적용은 좋을것 같다는 생각이 들었습니다
  • test를 적용 했을때의 장점
    • 수동으로 입력값을 넣어서 출력값을 확인 할 필요 없다는점.
    • 한번 작성하면 테스트가 확인 해주니 어디 수정 하다가 터질 고려를 할 필요가 없다는점.

BE Test

  • jest + superTest(통합테스트)
  • 테스트용 DB가 필요하다!
  • mocking 데이터를 생성해서 -> 단위테스트도 가능하다.
  • 단위테스트: moking을 통해 다른 파일과 분리해준다.
  • 모두 테스트 하는 것이 좋고, 중요한 부분이라고 생각했습니다.
  • 그런데 구현할 기능이 많아서 전체 부분에 테스트를 진행하기는 부담이 있다고 판단했습니다.
  • 그래서 테스트가 꼭 필요한 부분부터 테스팅을 진행하고 -> 점차 확대하기로 결정했습니다.

FE Test

  • react testing library
  • 렌더링 만 확인할지, event(click 등), e2e 도 다 할지 아직 미정.
  • 비즈니스 로직 보다 ui testing이 훨신 시간이 많이 들어서 어떻게 어느 부분까지 적용 할지 아직 정하지 않았습니다.

Clone this wiki locally