Skip to content

2022 11 21

Seyeon Ko edited this page Nov 21, 2022 · 1 revision

주말에 뭐하셨나요

  • 기종: 공부와 코딩… 왜 그랬어
  • 정욱: 드라마(재벌집 막내아들)
  • 종찬: 게임(갓오브워 라그나로크)이 나왔다
    • 수 : 오후 3시 반 ~ 저녁엔 돌아옴
    • 목 : 오후 1시~4시 후 돌아옴
    • 금 : 오후 1시~2시랑 4시 이후
  • 세연: 침착맨

오늘 할 스프린트 계획 회의

  • 전 주에 발생한 변경 사항에 따라 backlog를 보완합니다.
  • 이번 주의 우선순위, 구현할 기능(Feature), 작업 크기, 담당자를 결정한다.
  • 구현할 기능에 대한 데모 시나리오를 자세히 작성합니다.
  • 사전에 정의한 기능과 동작을 완성했는지 확인할 수 있도록 다음의 내용을 반드시 포함해야 합니다. (테스트 목적과 상황 / 시나리오 진행에 필요한 값 / 시나리오 진행에 필요한 조건 / 시나리오 완료 시 보장하는 결과)
  • 기능 목록 업데이트를 포함한 회의 내용을 프로젝트 저장소 Wiki에 작성하고 결과를 요약하여 Slack 분야 별 채널에 공유합니다. (매주 월 13:00까지)

기종이 적은 3주차 스프린트계획

기종님이 만드신 태스크맵

https://www.figma.com/file/hcKVcbrP4OphRRpwrPEqwU/%EC%8A%A4%ED%94%84%EB%A6%B0%ED%8A%B8-%ED%83%9C%EC%8A%A4%ED%81%AC%EB%A7%B5?node-id=0%3A1&t=uzFBTzJ2xW2uz5SD-0

3주차 태스크

플레이어 이동, 개인공간 맵 생성, Notion 데이터 가공

  • 월 : 공간 ID 추출, 개인공간 라우팅, 메인 비석-키워드 모음 렌더링, 각 게시글의 공간과 길 렌더링, 게시글 추출
  • 화 : 각 게시글 비석, 키워드 모음 렌더링, 자연어 처리, 게시글 그룹화, 맵 좌표 생성
  • 수 : 각 게시글 사진 파편, 하이퍼링크 렌더링, 이미지 픽셀 추출, 하이퍼링크 추출
  • 목 : 로딩, 플레이어 위치에 따른 렌더링 최적화, 맵 데이터 저장, 클라이언트상에서 API 불러오기, 개인공간 진짜 라우팅

3주차 목표

  • 최소 목표
    • 공간생성 확인화면(/create)의 버튼을 클릭하면 데이터를 받아오는 것이 아니라 POST /space(공간생성 요청 API)를 호출해야 하며, 그 결과가 완료되면 제작된 공간 페이지로 페이지를 리다이렉트해야 한다.
    • 개인공간의 라우팅이 완료되어야 한다.
    • 개인공간 페이지에서는 선택된 페이지에 해당하는 생성된 공간의 정보를 불러와서 렌더링을 할 수 있어야 한다.
    • 개인공간 페이지에서는 메인 비석과 각 공간의 비석이 보여져야 한다.
    • 메인 비석에 가까이 가면 모든 페이지의 키워드가 보여져야 한다.
    • 각 페이지 공간에는 제목, h1, 각 페이지에서 추출한 키워드가 보여져야 한다.
    • 중앙 비석과 각 페이지 공간을 잇는 길 역시 보여져야 한다.
    • 백엔드에서는 Notion OAuth 액세스 토큰으로 받아온 페이지의 데이터를 가공해서 맵의 형식으로 가공된 것을 DB에 저장해야 한다.
    • Python 서버는 자연어 처리로 각 페이지의 타이틀에서 따 온 키워드를 추출해 Node.js 서버로 보내줘야 한다.
    • 데이터베이스의 하위 페이지 역시 가공할 수 있어야 한다.
  • 추가 목표
    • 사용자가 로그인했을 때 사용자가 만든 개인공간이 존재하면 메인화면에서 자신 공간 이동-공간 동기화를 선택할 수 있어야 한다.
    • 각 페이지 공간의 하이퍼링크 패널이 보여져야 하며, 하이퍼링크 패널에 플레이어가 서면 해당하는 공간으로 새 페이지를 띄워주어야 한다.
    • 사용자가 선택한 테마에 따라 렌더링되는 오브젝트의 색상이 달라져야 한다.
    • 페이지에 첨부된 이미지의 픽셀을 추출해서 그 결과를 저장해야 한다.
    • 이미지 파편을 클릭하면 해당하는 이미지 파편이 합쳐져서 원본 이미지처럼 보여져야 한다.
    • 개인공간 페이지의 각 페이지 공간과 길 밖으로 플레이어가 이동할 수 없어야 한다.
    • 기타 아름다운 효과 및 인터랙션을 자유롭게 추가한다.

API 정의

개인공간 페이지 주소

GET /gallery/(사용자 uuid)/(공간 uuid)

/gallery/(사용자 uuid)/gallery/(사용자 uuid)/(가장 최근에 동기화한 공간 uuid) 로 리다이렉트

해당 주소에 해당하는 페이지는 동일한 html을 반환해야 함

서버쪽에서 올바르지 않은 사용자 uuid, 공간 uuid가 있을 때 404 에러를 띄워줄 수 있음

접근하는 쪽이 비공개 페이지일 때는 로그인된 사용자+사용자 uuid가 일치하는지를 파악해서 일치하지 않으면 403 에러를 띄워줘야 함

각 페이지의 데이터를 불러오는 API

GET /api/gallery/(사용자 uuid)/(공간 uuid)

//res.body
{
  "uuid" : <uuid>,
  "totalKeywords" : <Dict<String, Number>>, //전체 맵 키워드 통계
  // 3개 키워드, 1개는 해당 키워드들이 아예 없는 것들  
  "pages" : [
    {
      "position" : [<Number>, <Number>], // x좌표, z좌표. 인덱스 말고 포지션 데이터
      "title" : <String>,
      "subTitle" : <String[]>,
      "keywords" : <Dict<String, Number>>, //페이지 당 키워드 통계
      "links" : [
        {
          "href" : <String>, // 외부 링크 url
          "favicon" : <String> // 외부 링크 url의 favicon url
        }
      ],
      "imagePixel" : <Number[]>, // 첫번째로 나오는 이미지, 2개이상 [Optional]
    }],
		"nodes": [[0,1],[0,2]] // 페이지간 관계성 표현에 쓰임 -1:(루트 페이지) 0~99999999:각 페이지 번호
  }

image

export interface IKeywordMap {
  [keyword: string]: number;
}

export interface IGallaryPageData {
  position: Array<number>;
  title: string;
  subtitle: Array<string>;
  keywords: IKeywordMap;
  links?: {
    href: string;
    favicon?: string;
  };
  imagePixel?: Array<Array<number>>;
}

export interface IGallaryMapData {
  uuid: string;
  totalKeywords: IKeywordMap;
  pages: Array<IGallaryPageData>;
  nodes: Array<Array<number>>; // 도당체 왜 타스는 [12,34]를 [number,number]로 인식을 못할까요 거지같은타스
}

자연어 데이터 가공 API

POST /preprocess

//req.body
pages : {
  pageid : {
       title : string,
       h1 : string[],
       h2 : string[],
       h3 : string[],
       paragraph : string[],
       
       ...
  },
  ...
//res.body
totalkeywords: dict{
         keyword1: 23,
         keyword2: 2
         ...
      }
pages : {
  pageid : {
      keywords : dict{
         keyword1: 23,
         keyword2: 2
         ...
      }
       title : string,
       h1 : keywords[],
       h2 : keywords[],
       h3 : keywords[],
       paragraph : keywords[],
       ...
  },
  ...

논의사항

노드 표현방식

  • 각 페이지 내부에 nodes가 들어가는 이유는 길을 표현하려고 만든 건데 중복처리가 힘들 수 있다
  • 아예 중복을 제거한 nodes를 pages 밖으로 빼서 보내주는 게 나을 수 있음
  • 각 노드의 숫자는 배열로 표현된 영역의 인덱스를 의미함
  • -1은 중앙 영역을 의미(0, 0)

이미지 프로세싱

  • 픽셀단위로 저장하는 까닭은 클라이언트에서 렌더링을 용이하게 함
  • 클라이언트에서 이미지 프로세싱을 하면 렌더링하기도 벅찬데 이미지 프로세싱까지 끼얹으면 클라이언트에 부담이 증가함
  • 클라이언트 상에서 이미지 픽셀 데이터를 axios로 요청하는 거다 보니 cors 에러가 뜰 수 있음

종찬님 이슈

종찬님이 수/목요일이 자리비우는데 ㅠㅠ (수:3:307:00 목:14시 → 졸업 이슈)

금에는 오후 1시~2시랑 4시 이후부터 자리에 없을 것 같습니다

스프린트 계획 회의
🕖 데일리 회의
week1
week2
week3
week4
week5
week6
📔 팀 회고
🗓 개인 회고
🏝️Ground Rule
⚙️ Tech Spec
Clone this wiki locally