Code Monkey home page Code Monkey logo

lol-mbti's Introduction

롤에서 알아보는 MBTI 테스트

🌟소개

logo

😁LOL(게임) 상황 속에서 알아보는 MBTI와 해당 유형에 적합한 포지션을 추천해주는 서비스😁

배포: https://lol-mbti.vercel.app

개발 배경에서 개발 중 시행착오, 설계 등 확인할 수 있습니다.

❗ What I Earned

  • 개발 전 와이어프레임, 기능명세서 작성의 필요성
  • 기능 단위 Issue 작성 후 Issue 단위로 개발 진행
  • 컴포넌트 구조 설계하기
  • 함수형 컴포넌트의 사용
  • 반응형 웹 디자인 적용
  • useStateuseEffect 사용
  • TypeScript 기본적인 사용 및 이해
  • Next.js의 getStaticProps에 대한 SSG 이해
  • SEO 최적화
  • Styled-Component 사용 및 이해
  • ThemProvider를 이용한 다크모드 지원
  • Google Analytics 적용
  • 오픈 API(카카오톡 공유) 적용 및 이해
  • html2canvas + file-saver로 DOM 캡쳐, 저장 기능 구현 및 이해

✅ styled-components ➡️ vanilla-extract 마이그레이션 (2024년 2월 25일)

관련포스팅

  • 강제적인 클라이언트 컴포넌트 문제 해결

  • CSS 런타임 환경 ➡️ 제로 런타임

  • 번들 크기 10% 감소

  • 시스템 색상에 따른 다크모드 추가

✅ Next.js 11 ➡️ 14 (app) 마이그레이션 (2024년 12월 18일)

관련 포스팅

  • 관련 종속성 업데이트
    • React 17.0.2 -> 18.2.0
    • styled-components 5.3.0 -> 6.1.1
    • TypeScript 4.3.5 -> 4.5.2
  • Link 태그 하위 태그로 a태그 있던 것 제거
  • 최신 app router 구조로 변경
    • styled-components 적용 로직 추가
    • 구글 애널리틱스 코드 변경
    • styled-components 코드 변경
    • 카카오톡 공유하기 코드 변경
  • getStaticPaths -> generateStaticParams
  • 폰트 최적화: @fontsource -> next/font
  • metadata 적용법 변경

🌟 주요 기능 및 페이지

SEO

  • SEO 최적화로 인해 '롤 MBTI', '롤 MBTI 테스트' 등 관련 검색어로 검색하면 1순위로 보여지고 있습니다. (구글, 네이버, 다음, 빙 등)

테마(다크모드)

darkmode
  • styled-component를 사용한 custom hook을 활용해서 상단에서 다크모드를 설정할 수 있습니다.
  • vanilla-extractnext-themes를 활용했습니다.
  • 사용자의 로컬 모드와 로컬 스토리지를 확인하여 다크모드를 적용할 수 있습니다.

카카오톡 공유하기

kakao-share

  • 카카오 API를 활용해서 카카오톡으로 해당 페이지를 공유할 수 있습니다.

문제 답변 페이지

question

  • 상단 화살표 버튼으로 문제를 전, 후로 이동할 수 있습니다.
  • 답변 클릭 시 다음 문제로 넘어가며 총 12문제 입니다.
  • Hash 자료구조를 활용해서 답변 클릭 시 답변에 맞는 MBTI 유형을 누적해서 도출하는 식으로 구성했습니다.

결과 보기

result

  • 결과 보기 클릭 시 결과 로딩 모달창 컴포넌트를 불러오며 setTimeOut으로 결과 페이지로 넘겨줍니다.

결과 페이지

result-page

  • 해당 유형의 특징을 보여줍니다.
  • 결과 저장하기 클릭 시 결과 내용을 html2canvas + file-saver를 사용해서 이미지로 저장할 수 있습니다.
  • 링크 복사하기 클릭 시 해당 링크를 클립보드로 복사할 수 있습니다.

📚 기술 스택

result-page

💻 프로젝트 실행 방법

1. .gitignore 파일

/* .env 파일 */
NEXT_PUBLIC_KAKAO_API_KEY=카카오 API Key

2. 개발 환경 실행

yarn dev

3. 배포 환경 실행

1. yarn build
2. yarn start

lol-mbti's People

Contributors

yongveloper avatar

Stargazers

 avatar

Watchers

 avatar

lol-mbti's Issues

결과 페이지 버튼들 기능 추가

  • 링크 복사하기 버튼 :클립보드 복사 기능 추가
  • 카카오로 공유하기 기능 추가
  • 공유를 위한 meta tag 추가
  • 다시하기 기능 추가

다크모드 기능 추가

다크모드 기능 추가하기
미리 작업을 해둬야 나중에 스타일링 할 때 편할 것 같아서 미리 해 놓기

styled-components -> vanilla-extract 마이그레이션 진행

마이그레이션 진행 이유

기존 styled-components의 문제

  • 서버컴포넌트를 지원하지 않는다.
  • 런타임 환경에서 실행하기 때문에 렌더링이 늦을 수 있다.
  • 다크모드 설정 후 새로고침 시 깜빡이는 것과 같은 현상을 해결하는 데 어려움이 있다.

vanilla-extract 선택 이유

  • 기존 CSS-In-JS 형식을 따라가면서 제로 런타임 환경에서 실행되는 이점
  • 서버 컴포넌트 지원
  • next.js에서 추천하는 tailwind-css를 사용하려 했으나 추가 문법을 의도치 않게 외워야 하는 상황 고려
  • TypeScript와 잘 통합되어 있어, CSS 작성 시 타입 안전성을 제공합니다. 이는 버그를 줄이고, 코드의 품질을 향상 시킬 수 있음

얻을 수 있는 이점

  • 서버컴포넌트 활용
  • 렌더링 속도 향상

SEO 최적화

  • 메인 화면 SEO 최적화
  • MBTI 결과 페이지들 SEO 최적화

질문 화면의 버튼들 기능 추가

  • 문제의 답변 클릭 시 다음 화면으로 넘어감
  • 문제 넘어갈 때마다 progressbar 진행
  • 이전, 다음 버튼 활성화,비활성화
  • 답변 유형 저장
  • 답변 선택 시 backgroound-color 변경 (유지)
  • 결과 보기 클릭시 결과 도출하여 해당 MBTI 페이지로 이동

배포하기

netlify vs varcel선택해서 프로젝트 배포하기

결과 저장하기 기능 개선 및 테스트

현재 결과 저장하기 버튼 클릭 시 새로운 창에서 열리도록 해놨는데,
기본 브라우저 (Chrome, Safari등) 외에 카카오,페이스북 등 앱 브라우저로 실행 시 새로운 창이 안 열림.

현재 창에서 열리도록 개선 및 테스트 진행

[개선] 결과 화면 저장하기 개선하기

현재 작동 방식은
html2canvas -> blob -> new link 인데,

전에 즉시 다운로드 가능하게 끔 했을 때는 모바일에서 대부분 지원이 안됐기 때문에 새로운 창이 열리도록 하는 작동 방식으로 했지만,
다시 좋은 다른 방법이 있다면 개선 해보자

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.