20220113 Frontend 일일 개발일지 === ###### tags: `20220113` # 개발 내용 ## HeaderTop 관련 ![](https://i.imgur.com/J8jM5Md.png) 위사진에 GNB, 이 부분을 구현할 것이다! ### 고민거리 저 사진에 4개의 버튼의 구성이 ++조건에 따라 다르다!++ 1. 회원이 로그인이 된 상태 > 고객센터 / 관심상품 / 마이페이지 / 로그아웃 이라고 보여야 할 것이고, 2. 로그인 되지 않은 유저라면 > 고객센터 / 관심상품 / 마이페이지 / 로그인 이 보여야 할 것이다. ##### ==따라서 해당 `HeaderTop` 은 렌더링 될때마다 로그인 여부를 알고 있어야 한다.== > 그렇다면.. 매번 post 날려서 확인을 하는데, `axios` 로 할수야 있겠는데, 매번 하는게 좋을까? ##### Axios default 설정이라는 것을 해보자! ![](https://i.imgur.com/JBaEuuD.png) 이렇게 `customAxios` 를 만들어 놓으면, 1. 매번 ENDPOINT 를 접근 안해도 된다. 추가적인 url 만 붙이면 된다. 2. headers 에 token을 자동으로 넣어준다. 이런 장점이 있더라! #### 하지만... 그 과정에서 에러 발생. 1. `window` 객체 접근 불가능 이슈 ![](https://i.imgur.com/wJzN2jp.png) `window` 가 없다고 한다... > [color=#5bf7ae]nextJs는 SSR이라, 서버사이드에서 렌더링할때는 브라우저의 `window` 객체를 모르기 때문에 `window` 객체에 접근을 못한다고 나온다. ```typescript= typeof window !== 'undefined' ? window.localStorage.getItem('creamToken') : '' ``` 이런식으로 먼저 `window` 타입 체킹을 해주고 넘어가는것이 해결법! ##### 근데 Axios default setting 을 하는 모듈에서 토큰을 `get` 하는 것도 좋지만, 토큰 관련 util을 모듈화하는게 좋겠다 생각했다. > 왜?) `token` 은 자주 get하는 경우가 많을 것이라 판단했다. E-commerce 서비스 특성상 유저 토큰을 자주 줄거라 생각했기 때문이다! 따라서, 모듈화를 했다! ![](https://i.imgur.com/Qi5kI9A.png) 위와 같이 `getToken`, `setToken` 모듈화를 진행! ![](https://i.imgur.com/61S0vJ1.png) **모듈화한 내용을 위처럼 반영했다!** --- ## 폰트 설정 ![](https://i.imgur.com/L8YT9Ey.png) 보기만 해도 넘나 못생겼다. ![](https://i.imgur.com/mtAg6Us.png) `pages/_app.tsx` 를 작성하고, ![](https://i.imgur.com/m2EwfH7.png) 이렇게 global.css를 적어두었더니, ![](https://i.imgur.com/Z9YFqpG.png) 깔끔하게 적용 완료! --- ## HeaderMain ![](https://i.imgur.com/RWkbwjC.png) ==너무 이쁘다== 아주 간단하게 구현했다. 1. 미리 만들어 놓은 `HeaderMainItem` 3개와 `Logo`, `Icon` 컴포넌트를 조합했다. 2. 필요한 `Link` 를 바인딩하고, 3. 반응형을 살포시 얹었다. ```css= @media screen and (max-width: 770px) { > li { display: none; } } ``` #### 따라서 최종 GNB는! ![](https://i.imgur.com/pEaFJiH.png) 이렇게 구성했다~! --- ## 컴포넌트 내부 `import` 순서 정리 순서가 너무 중구남방인 `import` 순서가 너무 보기 싫었다. ![](https://i.imgur.com/UsqcOAr.png) 1. React, Nextjs 관련 라이브러리 2. 필요한 컴포넌트들 3. 스타일링에 필요한 라이브러리 > [color=green]해당 컨벤션 모두 적용 완료!