---
# System prepended metadata

title: 20220113 Frontend 일일 개발일지
tags: ['20220113']

---

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]해당 컨벤션 모두 적용 완료!
