Coder Social home page Coder Social logo

4th-week-rakuten-symphony-task's Introduction

라쿠텐심포니 코리아 Frontend Developer 기술 과제

url= https://62190ffe18b09e0007065e11--naughty-wescoff-ff743b.netlify.app/

Member

신원규(팀장) 김서윤
FE Developer FE Developer

팀원 역할
신원규 프로젝트 매니지먼트 / 링크 목록 화면
김서윤 링크 상세 화면


이 문제의 저작권은 라쿠텐 심포니 코리아에 있으며, 지원자는 오로지 채용을 위한 목적으로만 이 문제를 활용할 수 있습니다. 안내사항에 따라 과제를 완성해주세요.

.
├─ 유의사항
├─ 문제
│   ├─ 화면1: 링크 목록 화면
│   └─ 화면2: 링크 상세 화면
└─ API 명세



  • 문제를 꼼꼼히 살펴보고, 요구 사항을 충실히 구현해주세요.
  • 필요한 라이브러리가 있다면 자유롭게 사용할 수 있습니다.


  • - 링크로 공유한 파일(들)을 다운로드 받을 수 있는 링크 목록을 확인할 수 있습니다.

  • 1. 서버에서 제공한 링크 데이터를 화면에 표시합니다.

  • 2. 링크 아이템을 클릭하여 상세페이지로 이동합니다.

  • 3. 제목 아래 URL을 아래와 같이 표시합니다.

    • 3-1.유효기간 이내: 도메인 주소를 포함한 상세페이지로 이동하는 전체경로를 표시합니다.
    • 3-2.유효기간 만료: 만료됨으로 표시합니다.
  • 4. URL을 클릭한 경우 아래와 같이 동작합니다.

    • 4-1. 유효기간 이내: URL를 클립보드에 복사하고 ${링크 제목} 주소가 복사 되었습니다.를 내용으로 가지는 브라우저 기본 Alert을 표시합니다.
    • 4-2. 유효기간 만료: 아무동작도 하지 않습니다.
  • 5. 파일 개수의 숫자에 3자리 단위마다 콤마를 표시합니다.

  • 6. 파일 사이즈를 읽을 수 있도록 표시해주세요.

    • 6-1. 소수점 둘째 자리까지 표기합니다.
    • 6-2. 단위는 숫자 뒤에 B, KB, MB, GB, TB로 표기 (ex. 10.86KB)
  • 7. 유효기간을 아래와 같이 표시하되 실시간으로 반영합니다.

    • 7-1. 48시간 미만: XX시간 XX분
    • 7-2. 48시간 이상: X일
    • 7-3. 만료: 만료됨
  • 8. 받은 사람이 있을 경우 받은 사람 텍스트를 미리 주어진 코드베이스와 같이 <Avatar />컴포넌트를 이용합니다.


  • - 링크가 가지고 있는 파일 목록을 확인하고 공유 받을 수 있습니다.

  • - App.tsx 에서 <LinkPage /> 를 주석 처리하고, <DetailPage /> 화면을 주석 해제하면 확인할 수 있습니다.

  • 1. 링크 정보를 표시합니다.

  • 2. 받기 버튼을 누르면 다운로드 되었습니다.를 내용으로 가지는 브라우저 기본 Alert을 표시합니다.

  • 3. 링크의 유효기간이 만료 되지 않았을 경우에만 파일 목록을 표시합니다.



[
  {
    "created_at": 1641860565,
    "key": "15PMXQPE",
    "expires_at": 1642033365,
    "download_count": 0,
    "count": 1,
    "size": 11117,
    "summary": "logo.png",
    "thumbnailUrl": "https://storage-fe.fastraffic.io/homeworks/thumbnails/15PMXQPE/1641860565.jpg",
    "files": [
      {
        "key": "662f2b22920a10dbb4cbd819d6f0786937208.jpg",
        "thumbnailUrl": "https://storage-fe.fastraffic.io/homeworks/thumbnails/15PMXQPE/662f2b22920a10dbb4cbd819d6f0786937208.jpg",
        "name": "fab-lentz-mRMQwK513hY-unsplash.jpg",
        "size": 115916
      }
      /* ... */
    ],
    "sent": {
      "subject": "로고파일",
      "content": "로고파일 전달 드립니다.",
      "emails": ["[email protected]"]
    }
  }
  /* ... */
]

각 아이템이 프로퍼티로 가지는 값의 의미는 다음과 같습니다.

  • created_at: 링크가 생생된 날짜 (number)

  • key: 링크의 KEY (string | undefined)

  • expires_at: 링크의 유효기간 (number)

  • download_count: 링크의 다운로드 횟수 (number)

  • count: 링크의 파일 개수 (number)

  • size: 링크의 파일 사이즈 (number)

  • summary: 링크의 첫번째 파일 이름 (string)

  • thumbnailUrl: 링크의 썸네일 URL (string)

  • files: 링크의 파일 목록 {

    • key: 파일의 KEY (string)
    • thumbnailUrl: 파일의 썸네일 URL (string)
    • name: 파일의 이름 (string)
    • size: 파일의 사이즈 (number) }[]
  • sent: {

    • subject: 링크를 공유한 메일 제목 (string)
    • content: 링크를 공유한 메일 내용 (string)
    • emails: 링크를 공유한 메일 목록 (string[]) }

이슈정리


⚡구현 중 기술적 이슈들

  • SVG 이미지를 렌더하려 시도했던 노력들
  • CRA-proxy
    API 서버에서 데이터를 가져오는데, CORS 정책위반 경고가 발생했습니다.
    이를 해결하기 위해 프록시 서버를 배포해야하나 고민중에, CRA 에서 CORS 해결을 위한 프록시 서버 기능을 지원하는것을 알게되었습니다.
    이를 이용해, CRA 프로젝트에서 https로 시작하는 절대경로가 아닌 모든 상대경로 url을 "https://storage-fe.fastraffic.io"로 리다이렉트 시키는 프록시 옵션을 활성화하며 해결했습니다.
  • 이벤트 버블링
    components/FileTableRow.tsx에서 LinkUrl을 선택했을 때 이 요소에 할당된 핸들러(handleClipBoard())가 동작하고, 부모 요소의 핸들러(handleLink())가 동작하여 페이지가 이동됐습니다. 이것은 버블링(bubbling) 원리로 인해 생긴 문제였습니다. 버블링은 한 요소에 이벤트가 발생하면, 해당 요소의 이벤트부터 가장 최상단 조상요소를 만날 때 까지 과정이 반복되어 각각에 할당된 핸들러가 동작합니다. 이 문제는 해당 타겟 이벤트 핸들러에 클릭이벤트가 상위 요소로 전달되지 않게 처리하는 event.stopPropagation()을 사용해서 해결할 수 있습니다.

🛰배포 중 기술적 이슈들

  • 프록시 서버
    netlify를 이용해 배포를 진행하였습니다.
    개발단계에서 사용했던 CRA의 프록시 기능이 배포시에 정상적으로 기능하지 못해서,
    heroku에 cors-everywhere를 클론해서 CORS 이슈를 해결하였습니다.

  • 프로젝트 후기

    🎹신원규 : 결과적으로 클라이언트 단의 문제는 아니라고 판명이 났지만,
    svg 이미지를 랜더하려고 webpack 설정을 변경했었던 경험은 상당히 높은 난도의 경험이였던 동시에 매우 흥미로웟던 경험이였습니다.

    🎇김서윤 : 과제 요구사항을 구현하고 팀원과 소통하는 과정에서 다양한 구현 방법에 대해 고민할 수 있었던 시간이었습니다.

    4th-week-rakuten-symphony-task's People

    Contributors

    wongueshin avatar yunred avatar

    Forkers

    yunred

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.