-
Notifications
You must be signed in to change notification settings - Fork 4
1주차 회의록
DongHwan Kim edited this page Nov 4, 2021
·
10 revisions
- 팀원 모두가 완전히 이해할 수 있는 코드를 작성하자!
- 4주 꽉 채울 수 있는 프로젝트 (5주 동안 할일을 만들면 4주 빡빡하게 갈 수 있지 않을까?)
- 경매 방식을 결합한 중고거래? ( 사용자 인증 같은 기능을 덧붙이자!)
- 캐치마인드
- 소켓을 사용한 실시간 서비스가 들어있으면 좋겠다.
- 클라우드 스토리지 ( 너무 어렵나? 이 아이디어 좋아보이는데....)
- 사진 gif로 만들어주는 사이트
- 메타버스(부캠타운에서 업그레이드 된)
- 라이브커머스 (비디오 송출, 댓글)
<후보>
캐치마인드
경매인데 어떤 경매..
클라우드 스토리지 (파일 종류는 vscode 처럼..)
- boombox
- booStack
- BooStore
- geekbox
- boostup!
- wherever
- storeshare
- 유저 스토리 및 Task 작성
- 백로그 작성
- 와이어프레임 제작 (테마 컬러..로고 포함)
- FE, BE 프로젝트 설계
- 프로젝트 구조(디렉토리 구조 등?)
- DB 선정
- 스키마 설계
- 프로젝트 환경 구축
- prettier
- typescript
- node version
- package manager
- 배포 환경 구축
- Github action CI/CD
- nCloud Server
- nCloud Object Storage
구글 스프레드 시트로 관리하면 좋을 것 같다. 구글 스프레드 시트
- NCloud Object Storage
- 실제 파일들이 위치
- NCloud Server
- MongoDB, MySQL과 같은 DB
- 여기다 폴더 구조를 저장
-
사용자는 업로드 버튼을 눌러 파일을 업로드한다.
- 업로드 버튼을 누르면 업로드 타입(파일, 폴더) 선택창을 표시한다.
- 확인 버튼을 누르면 클라이언트에서 파일 유효성 검사를 한다.
- 클라이언트 유효성 검사를 통과했으면, 서버에 파일 메타데이터를 전송하여 유효성 검사를 한다.
- 클라이언트의 유효성 검사에 통과하지 못한다면, 사용자에게 업로드가 불가함을 알리고 원인을 표시한다.
- 클라이언트가 서버로 부터 상태코드(업로드 불가)를 응답받으면 사용자에게 업로드가 불가함을 알리고 원인을 표시한다.
- 서버는 수신한 메타데이터를 기반으로 업로드 가능 여부를 클라이언트에 전송한다.
- 서버의 유효성 검사를 통과하였으면, 실제 파일을 서버에 전송한다.
- 서버에 요청을 처리하는 동안 로딩화면을 보여준다.
- 응답이 성공하면, 화면에 업로드한 파일을 보여준다.
- 응답이 실패하면, 실패 메시지를 표시한다.
-
사용자는 스토리지에 올라온 파일들을 선택할 수 있다.
- 마우스 선택으로 여러 개의 개별 파일을 선택할 수 있다.
- 파일을 우클릭하여 모달을 통해 수행할 동작을 선택할 수 있다.
- 마우스로 범위를 선택하면 내부의 모든 파일들이 선택된다.(선택사항)
- shift + 방향키 조합으로 똑같이 여러 파일들을 선택할 수 있다.(선택사항)
-
사용자는 스토리지에 올라온 파일을 다운로드 받을 수 있다.
- 사용자는 파일을 선택한다.
- 올리기 버튼이 다운로드 버튼으로 변경된다.
- 다운로드 받을 위치를 선택한다.
- 확인 버튼을 눌러 다운로드 받는다.
-
사용자는 업로드 버튼을 눌러 폴더를 업로드한다.
- 업로드 버튼을 누르면 업로드 타입(파일, 폴더) 선택창을 표시한다.
- 확인 버튼을 누르면 클라이언트에서 폴더 내 파일들의 유효성 검사를 한다.
- 클라이언트 유효성 검사를 통과했으면, 서버에 파일들의 메타데이터를 전송하여 유효성 검사를 한다.
- 클라이언트의 유효성 검사에 통과하지 못한다면, 사용자에게 업로드가 불가함을 알리고 원인을 표시한다.
- 클라이언트가 서버로 부터 상태코드(업로드 불가)를 응답받으면 사용자에게 업로드가 불가함을 알리고 원인을 표시한다.
- 서버는 수신한 메타데이터를 기반으로 업로드 가능 여부를 클라이언트에 전송한다.
- 서버의 유효성 검사를 통과하였으면, 실제 폴더를 서버에 전송한다.
- 서버에 요청을 처리하는 동안 로딩화면을 보여준다.
- 응답이 성공하면, 화면에 업로드한 파일을 보여준다.
- 응답이 실패하면, 실패 메시지를 표시한다.
- 클라이언트에서 Multipart/form-data로 서버에 파일을 보내준다.
- 서버에서 Multer 미들웨어를 사용하여, 데이터를 수신한다.
- 이 과정에서 임시로 파일로 저장할지, 메모리에 저장할지는 내일 결정
- 해당 파일을 Object Storage에 저장한다.
- 저장 후 받은 URI를 서버의 데이터베이스에 메타데이터와 함께 저장한다.
- 메타 데이터들?
- 용량
- 파일 이름
- Object Storage URI
- 파일 타입 등등
- 메타 데이터들?
- Multer
- Multipart/form-data
- Object Storage (시간 남으면..?)
- 디자인과 기획을 같이 볼 수 있도록?
MongoDB
- Object Storage
- 유저 별로 폴더를 생성
- 해당 유저 폴더안에 실제 파일을 저장
- nCloud MongoDB
- 유저 콜렉션
- 스키마
- _id : Object ID (UserId)
- loginId : String
- password : String
- directoryId : root DirId
- maxCapacity : Number
- currentCapacity : Number
- 스키마
- 클라우드 콜렉션
- 스키마
- _id: ObjectId
- children: this[]
- osLink: String,
- name: String,
- size: Number, (byte단위)
- ownerId: ObjectId, (FK)
- contentType: String (EX. Dir, image/JPEG)
- createdAt: Date,
- updatedAt: Date
- 스키마
- 유저 콜렉션
- MongoDB
- mongoose : ODM
- AWS S3
- nCloud의 SourcePipeline, SourceBuild, SourceDeploy를 사용하여 CI/CD를 구현할 것이다.
- Docker
- Nginx
- nCloud의 SourcePipeline, SourceBuild, SourceDeploy
- 드래그 & 드랍
- Object Storage
- 유저 별로 폴더를 생성
- 해당 유저 폴더안에 실제 파일을 저장
- nCloud MongoDB
- 유저 콜렉션
- 스키마
- _id : Object ID (UserId)
- loginId : String
- password : String
- directoryId : root DirId
- limitCapacity : Number
- currentCapacity : Number
- 스키마
- 클라우드 콜렉션
- 스키마
- _id: ObjectId
- children: Element[]
- osLink: String,
- name: String,
- size: Number, (byte단위)
- ownerId: ObjectId, (FK)
- contentType: String (EX. Folder, image/JPEG)
- createdAt: Date,
- updatedAt: Date
- 스키마
- 유저 콜렉션
Element
{
_id: ObjectId,
children: Element[],
osLink: String,
name: String,
size: Number, (byte단위)
ownerId: ObjectId, (FK)
contentType: String (EX. Folder, image/JPEG)
}
ShareList (나중에......3주차)
{
ownerId: ObjectId,
elementId: ObjectId,
accessCode,
password,
startPath,
}
- 공유기능 디자인 및 기획서에 추가해야함 (나중에...아마 3주차)
url objectID encoding 된 것..?
mongoose 2단 SubDocument 사용법(with koa) mongodb 버리고 관계형 db로 갈아타자
mongoDB와 같은 NoSQL의 특성을 살릴려면, FK를 쓰지않는게 좋다... 한 유저당 디렉토리 및 파일이 지나치게 많은 것이 아니라면, 서브 도큐먼트로 쓰는게 좋지않을까??
아니면 MySQL을 사용하면서 Join을 쓰는 것도 방법이긴 한데, 이경우도 Join이 많이 발생하면 성능상 불리할 것 같다...