---
# System prepended metadata

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

---

20220118 Frontend 일일 개발일지
===

###### tags: `20220118`

# 개발 내용

## Login 화면 구성

==로그인 화면이 드디어! 추가되었다 😛==

![](https://i.imgur.com/u2ruy1W.png)

:::success
>[color=magenta] `Login` 컴포넌트를 만들면서 느낀점이 많다.
1. 정말 정말 미리 만들어놓은 `atom` 들 덕분에 수월하다.
    - 해당하는 하위 컴포넌트들을 쏙쏙 빼서 CSS만 건드려주면 빠르더라.
2. 확실히 그래도 처음에 진행 속도가 느린점은 단점.

###### 다 좋지만, 팀으로 일할때의 `Atomic Design Pattern은...`

- API call를 어디다가 붙일건지에 대한 컨벤션,
- 각 단계에 대한 기준

등 정말 모호한 부분이 많겠다, 생각이 들었다.

:::

#### 고민했던 사항들.

1. 사용자가 입력한 email의 형식 확인에 어떤 방법이 좋을까?

    a. `input` 태그에서 type을 `email` 로 해준다.
    b. 모든 입력에 대해서 `onChange` 이벤트를 통해 확인을 해준다.
    
**내가 선택한 방법은 b번!**
- `input` 태그에서 자동으로 지원해주는 validation 기능은 원하는대로 커스터마이징이 어렵다.
- 무엇보다, 이쁘지 않다.

-> 라는 이유로 정하게 되었다.

![](https://i.imgur.com/R6ZEGKi.png)

`inputeEmail` 를 통해서 모든 판단을 시작한다.

1. 먼저 일단은 이메일 관련 입력 검증 flag에 문제가 있다고 설정하고,
2. 검증한 후,
3. 괜찮다면 flag를 다시 풀어주거나 / 안괜찮다면 냅두는 형식으로 진행했다.

#### 더 발전해야 하는 것들

설정한 로직은 다음과 같은 이메일도 통과시킨다.

- `testnaver@.com`
- `@com`

이런 인풋도 통과시킨다.

:::danger
이거.. 막아야한다. 로직 추가 예정이다!
:::

#### API 통신

![](https://i.imgur.com/aXBI67Z.png)

정말 무난하게 구현했다. 
> 아직 서버에서 CORS 처리가 되지 않아 try문 안에서 콘솔만 찍는다.

##### 궁금한 점

:::info
위와 같은 `try-catch`문에서의 에러 핸들링은 보통 어떤 방법으로 처리하는지 궁금하다.
:::

## Delivery 컴포넌트 생성

![](https://i.imgur.com/QY8dG5I.png)

- 정말 깜쯱한 컴포넌트를 생성했다

>[color=lightgreen] 참고사항
- KREAM에 실존하는 빠른배송 기능은 제외하기로 했다!
- 따라서 해당 컴포넌트는 정말 만들기만 해서 원할때 슥 쓰는 용도로 만들었다.

## 상품 상세 정보 컴포넌트 구성

![](https://i.imgur.com/739eNkh.png)

##### 제품의 이름 / 브랜드 / 이름 번역이 아닌 컴포넌트를 생성했다.

이 컴포넌트 또한 위에 `Delivery` 와 같이 같아 붙일 수 있게 생성했다.

```typescript=
type ProductDetail = {
	modelNum: string;
	releasedAt: string;
	color: string;
	price: number;
};
```

위와 같은 props를 받으며, 눈에 보이는 4가지 정보만을 받아 렌더링한다!

## Floater 컴포넌트 작성

![](https://i.imgur.com/BmbOAou.png)

`Product` 페이지에 들어갔을때, 스크롤을 내리다 보면 쨘 생기는 `floater` 를 생성했다.

==**특별한 로직이 있는 컴포넌트는 아니다!*==
~~CSS가 매우 깨대로웠을 뿐...~~

```typescript=
type FloaterProps = {
	imgSrc: string;
	backgroundColor: string;
	productName: string;
	productNameKor: string;
	isWishProduct: boolean;
	wishes: number;
	productId: string;
	buyPrice: number;
	sellPrice: number;
};
```

상당히 많은 props가 필요할 것 같았다.

1. 좌측에 보이는 신발 이미지 - `imgSrc`,
2. **심지어 그 이미지 뒤에는 backgroundColor속성을 가진 div이므로**, 배경색 - `backgroundColor`,
3. 제품의 이름과 번역이름 - `productName`, `productNameKor`,
4. 해당 제품이 이미 찜 목록에 있는지에 대한 여부 - `isWishProduct`,
5. 얼마나 많은 인원이 찜을 했는지 - `wishes`,
6. 구매나 판매 버튼을 누르면 해당 상품에 대한 구매 판매 링크로 넘어가야하기 때문에 - `productId`,
7. `Knob` 컴포넌트에 가격정보를 내려줘야 하므로, `buyPrice`, `sellPrice`!

이렇게 제작했다. ==나름 이유가 다 있다!==

#### 고민사항

:::warning
*문제는, 해당 `Floater` 는 스크롤이 460px 정도 되면 보이고, 아니면 보이지 않는다는 점이다.*

>[color=darkgreen] **해당 기능을 어떻게 구현할까?**
1. `Floater` 를 사용하는 컴포넌트에서 `useEffect` 로 scroll 감지.
2. `observer` 패턴 사용.

-> 해당 기능은 추가할 **예정**이므로, 아직은 확정은 아니지만 1번을 선택할것 같다!
:::