Skip to content

Commit

Permalink
๐Ÿ“ [#3] Search Feature Retrospective ์•„ํ‹ฐํด์„ ์ถ”๊ฐ€ํ•œ๋‹ค
Browse files Browse the repository at this point in the history
  • Loading branch information
hyoungqu23 committed Feb 4, 2024
1 parent 1dcaa59 commit 2c7a9fb
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions contents/articles/search-feature-retrospective.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
title: ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 
description: ๊ฒ€์ƒ‰์–ด ์ถ”์ฒœ, ํ‚ค๋ณด๋“œ ์ธํ„ฐ๋ ‰์…˜์„ ํฌํ•จํ•œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ธฐ์—… ๊ณผ์ œ
createdAt: 2022-09-30
category: React
tags:
- React
- TypeScript
- Team Project
- Retrospective
- Wanted PreOnBoarding Frontend Course
---

## ์‹œ์ž‘

https://github.com/wanted-pre-onboarding-fe-6th-team2/pre-onboarding-assignment-week-5-1-team-2

๋งˆ์ง€๋ง‰ ๊ณผ์ œ๋Š” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ œ๋‹ค. ๋งŽ์€ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋œ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— 2๋ช…์”ฉ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด๋ฒˆ ์ฝ”์Šค์—์„œ ํ•œ๋ฒˆ๋„ ๋‹ด๋‹นํ•˜์ง€ ์•Š์€ API ๋กœ์ง ๊ด€๋ จ ํŒŒํŠธ๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์–ด API ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๋ฉด์„œ ๋ถ„๋ฆฌํ•  ์ง€์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค.

## ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„

API ๋กœ์ง ๊ด€๋ จ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

- API ํ˜ธ์ถœ๋ณ„๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ ์บ์‹ฑ์„ ๊ตฌํ˜„
- ์ž…๋ ฅ๋งˆ๋‹ค API๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋„๋ก API ํ˜ธ์ถœ์„ ์ค„์ด๋Š” ์ „๋žต ์ˆ˜๋ฆฝ
- API ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜ธ์ถœ๋งˆ๋‹ค `console.info` ์ฒ˜๋ฆฌ

์ด ์ค‘ API ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ์ž์ฒด์™€ ํ˜ธ์ถœ ํšŸ์ˆ˜ ํŒŒ์•… ๊ด€๋ จ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋‹ด๋‹นํ–ˆ๊ณ , ์ตœ์ ํ™”์™€ ๋กœ์ปฌ ์บ์‹ฑ์€ ๋‹ค๋ฅธ ํŒ€์›๋“ค์ด ๋‹ด๋‹นํ–ˆ๋‹ค.

## Axios API ๋กœ์ง ๊ตฌํ˜„ํ•˜๊ธฐ

ํ™•์žฅ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ณ ๋ คํ•ด Axios API ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ๊ฒƒ์ด๊ณ , Axios ๋กœ์ง ๋‚ด์—์„œ๋„ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด Axios ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์žฌ์‚ฌ์šฉ๋˜๋Š” `config`๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

```jsx
import axios from 'axios';

const BASE_URL = 'http://localhost:4000';

const http = axios.create({
baseURL: BASE_URL,
headers: { 'Content-Type': 'application/json' },
});

export default http;
```

์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ฉด

- API ๋กœ์ง ์ „์ฒด์— ํ™œ์šฉ๋˜๋Š” config๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๋‹ค.
- http๋กœ ์‰ฝ๊ฒŒ API ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋“ฑ์˜ ์žฅ์ ์ด ์žˆ๋‹ค.

์ดํ›„ Axios์˜ request interceptor๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋“  API ์š”์ฒญ์— ์š”๊ตฌ์‚ฌํ•ญย `console.info("calling api")`๋ฅผ ์‚ฝ์ž…ํ–ˆ๋‹ค.

```jsx
import axios from 'axios';

const BASE_URL = 'http://localhost:4000';

const http = axios.create({
baseURL: BASE_URL,
headers: { 'Content-Type': 'application/json' },
});

http.interceptors.request.use(
(config) => {
console.info('calling api');
return config;
},
(error) => {
return Promise.reject(error);
},
);

export default http;
```

๋งŒ๋“ค์–ด๋‘” Axios ์ธ์Šคํ„ด์Šค์™€ `json-server`์˜ Full Text Search๋ฅผ ํ™œ์šฉํ•ด ๊ฒ€์ƒ‰ API๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ด๋•Œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ณผ์ œ์—์„œ ๋ถˆํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด ์ œ๊ฑฐํ–ˆ๋‹ค.

```jsx
import http from '@/api';

export const searchBySickName = async (keyword) => {
try {
const response = await http.get(`/sick?q=${keyword}`);

return response.data;
} catch (error) {
throw new Error(error);
}
};
```

## ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•œ ์ฝ”๋“œ ๊ฐœ์„ 

Axios์˜ request interceptor๋ฅผ ejectํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ–ˆ์œผ๋‚˜, ์ด๋ฒˆ ๊ณผ์ œ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค. ํ•˜์ง€๋งŒ ํƒ€๋‹นํ•œ ํ”ผ๋“œ๋ฐฑ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์— ๋น„์Šทํ•œ ์œ ํ˜•์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ejectํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ๋„ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•ด๋ณด๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋˜ํ•œ ๋‹จ์ˆœ keyword๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ API ํ˜ธ์ถœ์„ ํ•˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ์œผ๋‚˜, ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•ด ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ธ์ž์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ, Full Text Search ํŠน์„ฑ์ƒ `๋ณ‘ ์ฝ”๋“œ` ๋˜ํ•œ ๊ฒ€์ƒ‰์ด ๋˜์–ด, JSON-Server์˜ like๋ฅผ ํ™œ์šฉํ•ด `๋ณ‘๋ช…`๋งŒ ๊ฒ€์ƒ‰๋˜๊ฒŒ๋” ์ถ”๊ฐ€์ ์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

```jsx
import http from '@/api';

export const searchBySickName = async ({ keyword }) => {
try {
const response = await http.get(`/sick?sickNm_like=${keyword}`);

return response.data;
} catch (error) {
throw new Error(error);
}
};
```

## ๋งˆ๋ฌด๋ฆฌ

ํ•œ๋ฒˆ๋„ ํ•ด๋ณด์ง€ ์•Š์•˜๋˜ API ํ˜ธ์ถœ ๋กœ์ง ๊ฐœ์„ ์„ ํ•ด๋ณด๋ฉด์„œ, ์ž์‹ ๊ฐ์„ ์–ป๊ฒŒ ๋๋‹ค. ์‹ฌ์ง€์–ด ์ข‹์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์ •๋ง ์„ฑ์ทจ๊ฐ์„ ๋Š๊ผˆ๋‹ค. ์ข‹์€ ํŒ€์›๋“ค์„ ๋งŒ๋‚˜ ์žฌ๋ฐŒ๊ฒŒ ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ค๋ ฅ์žˆ๋Š” ํŒ€์›๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•˜๋ฉด์„œ ์ •๋ง ์žฌ๋ฐŒ์—ˆ๋‹คโ€ฆ!

๋! ๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ

0 comments on commit 2c7a9fb

Please sign in to comment.