-
Notifications
You must be signed in to change notification settings - Fork 38
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
[서버 사이드 렌더링 - 2단계] 에프이(박철민) 미션 제출합니다. #68
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.
API 요청 로직 파일 위치
기존에는 API 요청 로직이 서버에 있었는데, 첫 페이지만 SSR로 처리되고 이후 상호작용은 모두 CSR로 처리되고 있기 때문에 클라이언트가 요청의 주체가 되는 경우가 더 많을 것이라 판단했어요. 때문에 모든 API 요청 로직들을 클라이언트 폴더 내부로 옮겼습니다.
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.
오~ 파일구조 변경해주신 거 좋은 것 같아요!
파일 구조까지 생각하시다니... 깊게 고민하신게 느껴져요!
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.
에프이와 저의 코드가 react-router-dom을 사용하는 방법이 조금 다른 것 말고는 유사하네요! 그래서 코드에 관해서는 크게 질문드릴건 없네용.
대신 에프이가 미션을 진행하면서 하이드레이션이 되지 않아서 겪었던 문제가 있었는지 궁금하네요!
저 같은 경우는 2,3번 질문과 연관이 있는데요~ 저는 미션을 진행하면서 onClick이 작동하지 않는 문제가 발생했었어요. 이 말은 즉, 하이드레이션이 되지 않아서 event가 작동하지 않았던 거죠... 하이드레이션 에러가 발생하지 않는데 왜 안되는 걸까? 고민을 많이하고 주변 크루들의 도움을 받아서 해결했습니다.. (dotenv를 설치하지 않았던...)
그래서 onClick이 작동하지 않아서 Link를 사용하여 페이지를 이동하도록 했었어요. 이렇게 하니까 navigate를 활용해서 페이지를 이동할때와 다르더라구요. Link를 활용하여 Modal을 열었을 때는 Main 페이지 스크롤했던 것이 초기화되었던..
저는 미션을 진행하면서 이런 문제들이 발생했었어요! 에프이는 어떤 문제가 발생했었는지 궁금합니다 :)
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.
오~ 파일구조 변경해주신 거 좋은 것 같아요!
파일 구조까지 생각하시다니... 깊게 고민하신게 느껴져요!
); | ||
const initialData = window.__INITIAL_DATA__; | ||
|
||
const router = createBrowserRouter([ |
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.
저도 react-router-dom을 사용했지만, 사용방법이 다르네요!
같은 것을 사용해도 사람마다 다르게 하는 점이 재밌는 것 같아요!
}, []); | ||
|
||
if (!detailData) { | ||
return <div className='modal-background active'>Loading ...</div>; |
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.
로딩까지 고려하시다니... 👍
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.
안녕하세요, 에프이!
드디어 마지막 미션이네요~!
남겨주신 PR 내용 잘 확인했습니다~ 에프이 PR을 보면서 저번도 그렇고 이번에도 저에게 많은 도움이 됩니다!
딱 필요한 내용만 작성해주시는데, 그 내용들이 머릿속에 쉽게 그려지네요...! 많은 도움 받고 갑니당ㅎㅎ
리뷰는 개선점에 대해서 질문드릴 건 없고 간단한 질문하나 남겼습니다! 천천히 답 남겨주세요 :)
안녕하세요 소하!
|
다행이 하이드레이션이 잘 적용되어 Link에서 navigate로 이동하는 것으로 수정했어요! |
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.
남겨주신 코멘트 잘 봤어요! 에프이~!
이제 진짜 우테코 미션이 끝이 났네요..🥲
내일 데모데이와 남은 우테코 level5 건강하게 잘 보내시길 바라요! :) 화이팅~!
안녕하세요 소하~ 우테코의 마지막 미션이네요!
마지막까지 리뷰 잘 부탁드려요😊
라우팅 라이브러리
라우팅 라이브러리는
react-router-dom
을 사용했습니다.👀 리뷰를 통한 생각 나눔
1. SSR 환경에서 웹 브라우저는 어떤 과정으로 하이드레이션(hydration)을 진행하는지 상세히 서술하시오.
하이드레이션은 서버가 내려준 HTML을 클라이언트 측에서 React로 활성화시키는 작업입니다. 정적 HTML만 받은 상황에서는 이벤트 핸들러나 상태가 동작하지 않기 때문에 이 과정이 필요합니다.
<하이드레이션 과정>
<서버와 클라이언트에서 발생할 수 있는 차이점>
Date
와 같이 동적으로 변화하는 데이터를 사용하는 경우에도 불일치가 발생합니다. 이때 React는 DOM을 조정해서 불일치를 수정합니다.2. 다음 두 가지 상황의 동작 과정을 비교해 설명하시오.
사용자가 처음 영화 목록 페이지에 접속할 때
서버는 영화 목록 API 요청을 통해 받은 데이터로 HTML을 만들어서 클라이언트에 내려줍니다. 클라이언트는 받은 HTML을 파싱해서 화면에 그립니다. 다음으로 하이드레이션 과정을 거쳐 상호작용 가능한 페이지가 됩니다. 서버와 클라이언트 간 데이터 불일치를 막기 위해 서버는 전역 객체에 데이터를 담아 클라이언트에 보내줍니다.
하이드레이션 후, 사용자가 영화 목록에서 특정 영화를 클릭하여 상세 페이지로 이동할 때
첫 화면이 SSR로 처리된 이후 상호작용은 클라이언트 단에서 CSR로 처리됩니다. 특정 영화를 클릭하면 라우팅이 일어납니다. 서버로부터 새로운 HTML을 받아오는 것이 아니라, 클라이언트에서 상세 영화 데이터를 요청해서 JSON 형식의 파일을 받은 뒤 모달을 보여줍니다.
3. 다음 두 가지 상황의 동작 과정에서 라우팅의 차이점이 무엇인지 서술하시오.
사용자가 https://주소/detail/12345와 같이 브라우저에 직접 입력한 뒤 페이지로 이동할 때
서버 사이드 라우팅이 일어납니다. URL에 맞는 컨텐츠를 서버가 반환해줍니다.
detail/:id
경로로 요청을 보냅니다.하이드레이션 후, 사용자가 영화 목록에서 특정 영화를 클릭하여 상세 페이지로 이동할 때
이 경우에는 클라이언트 사이드 라우팅이 일어납니다. 서버에 새로운 HTML을 요청하지 않고 React가 페이지를 전환합니다.