-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[팀 서비스 클론 코딩] 가브리엘(윤주현) 미션 제출합니다. #24
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 가브리엘! 이번 미션에 대해서 어떻게 리뷰하면 좋을지 고민하다 리뷰가 늦어서 죄송해요 😅
SSG에 대한 설명
단일 페이지에다가 CSR에 적합한 프로젝트여서 이번 미션을 진행하면서 많은 고민을 하셨을텐데요!
SSG라고 설명해주셨는데 getStaticProps라던지 async로 된 컴포넌트는 확인하지 못하였어요 😭
SSG에 대한 공식문서에서 나온 예제와 같은 컴포넌트를 찾지 못하였는데 혹시 설명해 주실 수 있을까요?!
또한 메인페이지 자체가 클라이언트 컴포넌트라서 그 이하의 모든 컴포넌트가 클라이언트 컴포넌트일텐데요!
SSG에서는 클라이언트 컴포넌트가 이렇게 많아도 되나요?! (잘 몰라서 물어보는거에요!)
미션을 진행하면서 코난이 느낀점
개인적으로 이번 미션을 진행하면서 느낀점은 클라이언트 컴포넌트를 최대한 작게 쪼개서
필요한 부분만 클라이언트 컴포넌트로 만드는게 렌더링 방식의 이점을 이용하는 것 같았는데요!
여기서 필요한 부분은 동적으로 렌더링이 필요하다던지 사용자와 상호작용이 많다던지 여러 기준이 있을 것 같더라구요!
이런 부분도 고민해보면 추후 next를 사용하면서 도움이 되지 않을까 싶어요!
수정사항은?
현재는 완전 CSR로 이루어진 SPA와 다를바가 없는 것 같아요😭
야미와 센트는 지도가 로딩되기 전 서버 사이드로 탭을 렌더링 시켜서 보내주더라구요?!
이 부분을 도전해봐도 좋을 것 같고,
시간이 부족하시다면은 SSG로 하신 부분이 어떻게 되는지만 설명해주셔도 좋을 것 같아요!
가브리엘 초기 렌더링
센트, 야미 초기 렌더링
"react": "^18", | ||
"react-dom": "^18", | ||
"react-icons": "^4.11.0", | ||
"styled-components": "^6.0.4", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 렌더링 방식을 SSR로 정하고 미션을 진행했는데요!
SSR의 장점을 최대한 살리려다보니 css-in-js 방식의 컴포넌트를 최대한 안쓰려고 하게 되어 CSS module로 진행했습니다!
아래 글들도 참고해보면 좋을 것 같아요!
Shopify에서 vanilla-extract를 선택한 이유
Runtime stylesheets와 Static CSS extraction의 차이
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아무래도 자바스크립트가 로드 된 이후에 무언가 그릴 수 있다보니 초기 페이지에서도 css가 빠진 상태로 보여서 네트워크가 느린 환경에서는 다소 이상한 것 같아요 ㅠㅠ
코드량이 상당하다보니 이를 이식하는 것이 쉽지 않았지만 만약에 처음부터 nextjs를 사용했다거나, 시간이 충분히 주어졌다면 css module, vanilla-extract를 선택했을 것 같아요.
유일한 페이지이자 루트 페이지에서 'use client'를 사용한 이유초기 로딩 컴포넌트 따라서 csr과 크게 다를바가 없는게 맞습니다. 하지만, 몇 가지 이유에 의해서 이 방식을 포기하기 어려웠습니다.
|
공식 문서의 data fetching 방식을 확인하면 next 13의 app router에서는 fetch api 기반으로 하려는 것 같아요. 저는 이번에 학습하면서 app router에서는 렌더링을 위한 함수가 따로 있는 것이 아니라 step1 고생 많으셨고 step2에서 다시 뵈요 👍 |
🎨 1단계 - 팀 서비스의 일부 페이지 클론 코딩
🚀 구현한 페이지의 주소와 방식
✅ 체크리스트
선택한 렌더링 방식의 이유
코드 재사용
안녕하세요 코난?
카페인 서비스를 next.js 13으 마이그레이션 해봤습니다.
일단 저희 서비스를 소개하겠습니다.
저희 카페인 서비스는
실시간 전기자동차 충전소 지도 및 통계 조회 서비스
로, 원래 서비스 부터가 단일 페이지로 서비스되고 있었습니다.별도의 페이지가 존재하지 않고, 단일 페이지 내에서 동적으로 렌더링 하는 구조로 설계되어 있습니다.
(단, 로그인을 위한 리다이렉트 페이지가 존재하였으나 기준 url 연결이 되어있지 않아 이번 미션에서는 로그인 기능을 제거하였습니다.)
별도의 페이지도 존재하지 않는데다가 매번 다른 데이터를 받아올 수 밖에 없는 형태의 웹앱이다 보니 ISR을 고려하는 것은 사실상 불가능하였습니다.
서버 측에 정보를 요청 보낼 때 현재 스크린의 위치(위도, 경도), 스크린 사이즈에 따른 화면 변화량(위도/경도 델타 값) 이 매번 다르기도 하며, 페이지의 역할을 하는 부분들도 전국 6만여 개의 충전소를 대상으로 하기에 특정한 부분을 서버 컴포넌트로 둔다는 것은 굉장히 어려웠습니다.
심지어 CSR 이던 시절과 SSG인 시절 모두 큰 성능차이도 보이지 않습니다. (최초 로드 시점이 약간 빠르지만, 체감하기 어려운 수준이었습니다.)
따라서 기존 서비스를 거의 그대로 마이그레이션한 상태입니다.
[기존]
[next js 13]
언제나 렌더링에서 SSG가 이점을 보이긴 하지만, 그 시간이 크게 차이가 나지 않아 체감하기 어렵습니다 ㅠㅠ
참고로 로그인을 제외한 기존 서비스에서 구현한 컴포넌트나 기능들을 100% 재활용 하였습니다.