Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
과제 체크포인트
배포 링크
기본 : https://jeongmingi123.github.io/front_6th_chapter4-1/vanilla/
심화 : https://jeongmingi123.github.io/front_6th_chapter4-1/react/
기본과제 (Vanilla SSR & SSG)
Express SSR 서버
<!--app-html-->,<!--app-head-->)서버 사이드 렌더링
클라이언트 Hydration
window.__INITIAL_DATA__스크립트 주입Static Site Generation
심화과제 (React SSR & SSG)
React SSR
renderToString서버 렌더링React Hydration
Static Site Generation
구현 과정 돌아보기
가장 어려웠던 부분과 해결 과정
심화과제인 react 구현중에, router.query = { current: undefined }; 로 인해 렌더링 이슈가 발생하였고,
해당 코드를 지우면서 timeout이 계속 발생하여 react 심화과제 CSR 렌더링 이슈가 발생하여 CSR react 테스트 코드가 다 실패하였습니다.
router.query = { current: undefined };를 제거하면
라우터의 초기 상태가 빈 객체 {}가 되고, API 호출 시 current 파라미터가 전달되지 않아 서버와 동일한 기본값(1)이 사용됨.
SSR과 CSR의 결과가 일치하게 되어 하이드레이션 이슈가 해결되었음. (이걸로 한 6시간쓴듯..)
구현하면서 새롭게 알게 된 개념
성능 최적화 관점에서의 인사이트
사실 과제 이해하는데 오래걸려서 .. 성능 최적화까지는 하지 못했음
학습 갈무리
Q1. 현재 구현한 SSR/SSG 아키텍처에서 확장성을 고려할 때 어떤 부분을 개선하시겠습니까?
현재 아키텍처의 한계점
개선 방안
마이크로서비스 아키텍처 도입
캐싱 계층 구축
비동기 렌더링 및 스트리밍
CDN 통합
Q2. Express 서버 대신 다른 런타임(Cloudflare Workers, Vercel Edge Functions 등)을 사용한다면 어떤 점을 수정해야 할까요?
Cloudflare Workers로 마이그레이션 시 고려사항
런타임 제약사항
Cold Start 최적화
메모리 제한 대응
Vercel Edge Functions 활용
Edge Runtime 최적화
ISR (Incremental Static Regeneration) 활용
Q3. 현재 구현에서 성능 병목이 될 수 있는 지점은 어디이고, 어떻게 개선하시겠습니까?
주요 병목 지점
서버 렌더링 시 CPU 집약적 작업
메모리 누수 위험
번들 크기 최적화
성능 모니터링 도입
Q4. 1000개 이상의 상품 페이지를 SSG로 생성할 때 고려해야 할 사항은 무엇입니까?
빌드 시간 최적화
병렬 처리 구현
증분 빌드 구현
메모리 사용량 관리
CDN 캐시 무효화 전략
부분 재빌드 구현
Q5. Hydration 과정에서 사용자가 느낄 수 있는 UX 이슈는 무엇이고, 어떻게 개선할 수 있을까요?
주요 UX 이슈
인터랙션 차단 시간
레이아웃 시프트 (CLS) 방지
로딩 상태 표시
Islands Architecture 적용
Q6. 이번 과제에서 학습한 내용을 실제 프로덕션 환경에 적용할 때 추가로 고려해야 할 사항은?
모니터링 및 로깅 체계
성능 모니터링
에러 핸들링 및 Fallback 전략
A/B 테스트 적용
보안 고려사항
XSS 방지
CSP (Content Security Policy) 설정
Q7. Next.js 같은 프레임워크 대신 직접 구현한 SSR/SSG의 장단점은 무엇인가요?
직접 구현의 장점
학습 효과와 깊은 이해
커스터마이징 자유도
번들 크기 최적화
직접 구현의 단점
유지보수 비용
생태계와 커뮤니티 지원 부족
안정성과 검증 부족
하이브리드 접근법
Q8. Next.js를 이용하여 SSG 방식으로 배포하려면 어떻게 해야 좋을까요?
Next.js SSG 최적화 설정
getStaticProps와 getStaticPaths 활용
ISR (Incremental Static Regeneration) 활용
빌드 최적화
배포 전략
Vercel 배포
다른 플랫폼 배포
CDN 설정
성능 모니터링
코드 품질 향상
자랑하고 싶은 구현
없음
개선하고 싶은 부분
이번에 과제를 하면서, 에러가 어떻게 발생하는지 제대로 처리를 못해서 에러 처리를 제대로 못한거같습니다. 로깅을 추가하고, 에러 페이지 컴포넌트 및 에러 타입에 따른 응답에 대한 내용도 더 추가할 것 같습니다.
또한 환경 설정함수나 유틸 함수도 적절하게 분리를 못해서 코드가 난잡해지고 중복 현상도 많이 발생했던거 같아 다음과 같이 바꿀 것 같습니다.
구조적 분리
환경 설정 분리: config/ 폴더에 환경별 설정 파일 분리
미들웨어 분리: SSR 렌더링 로직을 별도 미들웨어 파일로 분리
유틸리티 함수 분리: URL 정규화, 에러 처리 등을 별도 모듈로 분리
에러 처리 개선
에러 타입별 처리: 404, 500 등 에러 타입에 따른 다른 응답
에러 로깅: 구조화된 로깅 시스템 추가 도입
에러 페이지: 에러 페이지 컴포넌트 추가
리팩토링 계획
ServerRouter.ts 부분을 함수형으로 리팩토링을 진행할 것 같습니다.
개인적으로 클래스도 좋아하지만, typescript는 함수형으로 많이 만들기에 다음과 같이 변경할 것 같습니다.
학습 연계
다음 학습 목표
Google Lighthouse와 같은 것을 사용하여, 사용자가 페이지를 실제로 보고 상호작용까지의 과정을 한번 측정해보고싶습니다.
이런 것을 사용했을 때 얼마나 사용자가 성능 체감이 되는지 한번 체크를 해보고싶습니다.
실무 적용 계획
회사에서 이전에 만든 인수인계 사이트를 SSR, SSG를 적용하여 마이그레이션 하여 만들어 보고 싶습니다. SSG와 SSR을 적절히 사용하여, 이 보다 웹 속도처리부분에서 팀원들에게 향상된 부분을 보여주고 싶음.
리뷰 받고 싶은 내용
심화과제 react 구현중에 처음에는 다 CSR 관련 테스트코드가 통과했으나, SSR 및 SSG 구현하고 나니까 CSR (port 5175번) dev 테스트 코드만 전체 실패되었습니다.
그리하여, loadProductsAndCategories 함수에서 router.query = { current: undefined }; 로 인해 테스트 코드가 계속 렌더링 이슈가 발생했다고 생각했습니다.
이 후 router.query = { current: undefined }를 제거하였고 다음과 같이 생각했습니다.
이는 초기 상태의 일관성을 똑같이 만들어서 서버와 클라이언트 간의 렌더링 결과를 동일하게 만든다고 생각하였는데 이게 맞을까요??