2์ฐจ ํ๋ก์ ํธ๋ ํด๋์ค101์ ๋ชจํฐ๋ธ๋ก ์งํํ๋ค. ํด๋์ค101์ ๋ด๊ฐ ํ๋ก์ ํธ ์์ด๋์ด๋ก ์ ์ํ ์๋น์ค์๋ค. ๋ค์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํจ์๋ UI๊ฐ ์ง๊ด์ ์ด๊ณ ๊น๋ํด ๊ฐ์ฅ ์ธ์ ๊น์๋ ์๋น์ค์๊ธฐ์, ์ด๋ฐ ์๋น์ค๋ฅผ ๋ชจํฐ๋ธ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๋ฉด ๋ฐฐ์ธ์ ์ญ์ ๋ง์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ์ปธ๋ค.
ํด๋์ค101์์๋ ๊ฐ์ ์๊ฐ ๋ฟ๋ง ์๋๋ผ ์คํ ์ด ์ํ์ ๊ตฌ๋งคํ ์๋ ์๊ณ , ๊ตฌ๋ ์์คํ ๋ ์๋ค. ์ฌ์ฉ์๊ฐ ํฌ๋ฆฌ์์ดํฐ๊ฐ ๋์ด ๊ฐ์๋ฅผ ๋ฑ๋กํ ์๋ ์๋ค. ์ฒ์ ์๊ฐํ๋ ๊ฒ๋ณด๋ค๋ ํ๋ํ๋ ๋ค์ฌ๋ค๋ณด๋ ๋ค์ํ ๊ธฐ๋ฅ์ด ์์ด ์ฒ์ ํ๋ก์ ํธ๋ฅผ ๊ธฐํํด๋๊ฐ ๋ ๊ฝค ๊ณจ์น ์ํ ์๋ค.
1์ฐจ ํ๋ก์ ํธ ๋๋ ์ฃผ๋ก ์ํ์ ๋ด๊ณ ๊ฒฐ์ ํ๋ ํ๋ฆ์ผ๋ก ํ๋ก์ ํธ๊ฐ ์งํ๋์๋ค. ๊ทธ๋์ 2์ฐจ ํ๋ก์ ํธ์๋ ์ฌ์ฉ์๊ฐ ์ํ(์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ๊ฐ์!)์ ๋ฑ๋กํ๊ณ ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ค์ ์ ์ผ๋ก ๊ตฌํํด๋ด๊ณ ์ ํ๋ค.
๐ ๊ธฐ๊ฐ
22.10.04 - 22.10.13
๐ฉ๐ปโ๐ง ๊ธฐ์
- Front-end
React
styled-component
โฝ CRA(Create-React-App)์ ํตํ ๋ฆฌ์กํธ ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ
โฝ ํจ์ํ ์ปดํฌ๋ํธ ์ฌ์ฉ
โฝ ESLint, Prettier ์ค์
- Back-end
Node.js
,Express.js
,MySQL
- Business Tool
Slack
,Trello
,Notion
๐ Github Link
- ๊ธฐ์กด : Github Repository
- ๊ฐ์ธ์ ์ธ ๋ฆฌํฉํ ๋ง ํ : Github Repository
์ผ์ ๊ด๋ฆฌ๋ 1์ฐจ ํ๋ก์ ํธ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก Trello
(ํธ๋ ๋ก)๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ์ฅ ์ฒ์ ํ๋ ์ผ์ ๊ฐ์ ๋งก์ ๊ธฐ๋ฅ์ ์ ๋ฆฌํ ํฐ์ผ๋ค์ Backlog์นธ์ ์ฎ๊ฒจ๋๋ ๊ฒ์ด์๋ค. ํ๋ก์ ํธ ์์ ์ , ๋นผ๊ณกํ Backlog์นธ์ ๋ณด๋ฉด ๊ฐ์ด์ด ์
์ฅํด์ง๋ท,,,
๋งค์ผ 10~11์ ์ฌ์ด์ Daily StandUp Meeting์ ๋น ์ง์์ด ์งํํ๋ค. ๊ณ ์ ๋ ์๊ฐ์ ๋ค ๊ฐ์ด ๋ชจ์ฌ ํ๋ก์ ํธ ์งํ์ํฉ์ด๋ ์์ ๋ ์ํฉ์ ๊ณต์ ํ๊ณ ํ๋ฃจ ์ผ์ ์ ์์ํด์์ธ์ง ํฐ์ผ ์ํ ์ ๋ฐ์ดํธ๊ฐ ๋น๊ต์ ์ ์ด๋ฃจ์ด์ก๋ ๊ฒ ๊ฐ๋ค.
ํฐ์ผ์ด ๋ฌด์ง๋ง์งํ๊ฒ ๋ง์์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ์ธ๋ถ ๊ธฐ๋ฅ์ ํฐ์ผ ๋ด๋ถ์ ์ฒดํฌ๋ฐ์ค๋ก ๋์ ํ๋ค. ํฐ์ผ์ ํ๋์ ํ์ ํ๊ธฐ์ ์ข์๋ ๊ฒ ๊ฐ๋ค.
๋๋ ๋ฉ์ธํ์ด์ง์ ๊ตฌ๋ ์ ์ฒญํ์ด์ง๋ฅผ ๋ด๋นํ๋ค.
1. ์์ ๋ก๊ทธ์ธ
2. ๋ฉ์ธ ํ์ด์ง
3. ์์ธ ํ์ด์ง
4. ํฌ๋ฆฌ์์ดํฐ ์ผํฐ ํ์ด์ง
5. ๊ฐ์ ์์ ํ์ด์ง
6. ๊ตฌ๋ ์ ์ฒญ ํ์ด์ง
7. ๊ฒฐ์ ํ์ด์ง
8. ์ฐ๋ชฉ๋ก ํ์ด์ง
[ react-icons์ ํธ๋ฆฌํจ ]
์๋จ๋ฐ์๋ ๊ฒ์
, ํ๋กํ
, ์ข์์
์ ๊ฐ์ ๋ค์ํ ์์ด์ฝ๋ค์ด ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ๊น์ง๋ ์ด๋ฏธ์ง ํ์ผ์ ํ๋ก์ ํธ ํด๋ ๋ด๋ถ์ ์ ์ฅํด ์ฌ์ฉํด์์๋ค. ํ์ง๋ง ํ๋ก์ ํธ ๋ด๋ถ์ ์ฌ๋ฌ ์์ด์ฝ ํ์ผ๋ค์ด ๋ด๊ธฐ๋ ๊ฒ์ด ๋ถํ์ํ๋ค๋ ์๊ฐ์ ํญ์ ํด์์๋ค. ๊ทธ๋์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ฒ์ react-icons
๋ผ๋ ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ๋์๊ณ ํธ๋ฆฌํ ์ ์ด ๋ง์๋ค.
react-icons
๋ฅผ ์ค์นํ๋ฉด ์์ด์ฝ์ ์ฌ์ฉํ๊ณ ์ ํ๋ ํ์ผ์ import
ํ์ฌ ์์ฝ๊ฒ ์ ์ฉํด๋ณผ ์ ์๋ค. ๋ํ, ๋ค๋ฅธ ์คํ์ผ(์์, ํฌ๊ธฐ ๋ฑ)์ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด className์ ๋ถ์ฌํ์ฌ ์ง์ ํด์ฃผ๋ฉด ๋๋ค, ์์์ ๋ด ๋ง์๋๋ก ๋ฐ๊พธ๊ธฐ ํ๋ ์ด๋ฏธ์ง ํ์ผ๋ณด๋ค ๊ทธ๋๊ทธ๋ ์ปค์คํ
ํ๊ธฐ ์ข์๋ค.
[ ์์๋ฐ์ดํฐ์ ๋ถ๋ฆฌ ]
Footer ์ ํ์ฌ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์์ ๋ฐ์ดํฐ๋ก ๋ง๋ค์ด ๋ฐ๋ก ํ์ผ์ ๋ถ๋ฆฌํด์ฃผ์๋ค. ์ด๋ฅผ ํตํด ์์๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๊ธธ์ด์ ธ ๊ฐ๋
์ฑ์ ํด์น๊ฑฐ๋, ํด๋น ์์๋ฐ์ดํฐ๊ฐ ์ฌ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๋ฐ๋ก ํ์ผ์ ๋ถ๋ฆฌํ๋ฉด ์ข๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ์ ํ์ผ๋ก ๋๋ ๊ด๋ฆฌํ ํ์์์ด, named Export
๋ก ํ ํ์ผ ๋ด์์ ์ฌ๋ฌ๊ฐ์ ๋ณ์๋ฅผ ๋ด๋ณด๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์ธ ์ ์์๋ค.
// Footer.jsx
import { INFO_LIST, SOCIAL_LIST } from './infoData';
// infoData.jsx
export const INFO_LIST = [
{
id: '0',
title: '์ด์ฉ์ฝ๊ด',
url: '#',
},
// ์ดํ ์๋ต
]
export const SOCIAL_LIST = [
{
id: '0',
title: 'IOI Korea',
url: '#',
},
// ์ดํ ์๋ต
]
[ react-slick์ ์ฌ์ฉํ ์บ๋ฌ์
๊ตฌํ ]
์ด๋ฏธ์ง ์ฌ๋ผ์ด๋๋ณด๋ค ์บ๋ฌ์
์ด๋ผ๊ณ ๋ง์ด ๋ถ๋ฆฌ๋ ๊ฒ์ ๋ณด๊ณ ์บ๋ฌ์
์ ์๋ฏธ๊ฐ ๊ฐ์ฅ ๋จผ์ ๊ถ๊ธํ์๋ค. ์บ๋ฌ์
์ ํ์ ๋ชฉ๋ง๋ผ๋ ๋ป์ด ์๋ค๊ณ ํ๋ค. ํ์ ๋ชฉ๋ง์ฒ๋ผ ์ผ๋ จ์ ์ฝํ
์ธ ๋ค์ด ์ํํ๋ ์ฌ๋ผ์ด๋๋ฅผ ๋งํ๋ ๊ฒ์์ ์ ์ ์์๋ค.
์ด๋ฏธ์ง ์ฌ๋ผ์ด๋๋ ์๊ธฐ์๊ฐ ์นํ์ด์ง๋ฅผ ๋ง๋ค ๋, Vanilla JavaScript
๋ก ๊ตฌํํ ์ ์ด ์๋ค. ์ฌ๋ฌ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๋ก๋ก ์ญ ๋ถ์ฌ์ ๊ฐ๋ก ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋งํผ ์์น๋ฅผ ์ด๋์์ผ์ฃผ์ด์ผ๋ง ํ๋ค. ํ์ง๋ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ ๋ง ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์๋ค. react-slick
์ผ๋ก๋ถํฐ importํด์จ Slider ์ปดํฌ๋ํธ ์์ ์ฌ๋ฌ ์ฅ์ ์ด๋ฏธ์ง ๋ฆฌ์คํธ๋ฅผ map
์ผ๋ก ๋ฐ๋ณต์์ผ์ฃผ๊ธฐ๋ง ํ๋ฉด๋๋ค.
Vanilla JavaScript
๋ง์ผ๋ก ๊ตฌํํด๋ณธ ์ ์ด ์๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธ๋ฆฌํจ์ ์ด๋ ๊ฒ ํฌ๊ฒ ๋๋ผ์ง ๋ชปํ์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋ฒํผ ๋ชจ์์ด๋ผ๋ ์ง ์คํ์ผ์ ์ธ ๋ถ๋ถ์ ๋ด ์
๋ง๋๋ก ์ปค์คํ
ํ๊ธฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ง์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ตฌํํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ๋ ๊ฒ ๊ฐ๋ค. ์ญ์ ๋ชจ๋ ๊ฒ์๋ ์ฅ๋จ์ ์ด ์๊ธฐ ๋ง๋ จ์ด๊ตฌ๋ง!
import Slider from 'react-slick';
<StyledSlider {...settings}>
{CarouselImgData.map(image => (
<ImageBox key={image.id}>
<Image src={image.url} alt="์ด๋ฏธ์ง ์ฌ๋ผ์ด๋" />
</ImageBox>
))}
</StyledSlider>
const StyledSlider = styled(Slider)`
/* ์๋ต */
`
[ ๊ณตํต๋ ๋ชจ๋ฌ์ ์ปดํฌ๋ํธํ ]
๋ฉ์ธํ์ด์ง์๋ ๊ฐ์๋ชฉ๋ก์ ํํฐ๋ง ๋ฐ ์ ๋ ฌ ํ ์ ์๋ค. Selectbox๋ฅผ ์ ํํ๋ฉด ๊ทธ ๋ฐ์ Dropdown์ผ๋ก ๋ชฉ๋ก์ด ๋์ค๋ ๊ตฌ์กฐ๊ฐ ์๋๋ผ, ๋ชจ๋ฌ์ ๋ชฉ๋ก์ ๋์ด๋ค. ๋ฉ์ธ ์นดํ
๊ณ ๋ฆฌ, ์๋ธ ์นดํ
๊ณ ๋ฆฌ, ์ ๋ ฌ, ์ด๋ ๊ฒ 3๊ฐ์ง ์ข
๋ฅ๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ฌ์ UI๋ ๋์ผํ๋ค. ๋ฐ๋ผ์ ์ด ๋ชจ๋ฌ์ ํ๋์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค์ด ์ฌ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง, ๋ฉ์ธ ์นดํ ๊ณ ๋ฆฌ์์ ์ด๋ค ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ํํ๋๋์ ๋ฐ๋ผ ์๋ธ ์นดํ ๊ณ ๋ฆฌ์ ๋ชฉ๋ก์ด ๋ฐ๋๋ฏ๋ก ์ด๊ฒ์ ํด๊ฒฐํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ! ์ด๋ ๋ชจ๋ฌ ์ปดํฌ๋ํธ์ props๋ก ์ฌ์ฉ์๊ฐ ์ด๋ค ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ํํ๋์ง ๊ทธ ๋ฆฌ์คํธ๋ฅผ ๋๊ฒจ์ค์ผ๋ก์จ ํด๊ฒฐํ ์ ์์๋ค. ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ๊ฐ์ props๋ฅผ ๋๊ฒจ์ฃผ๋ฉฐ ์ฝ๋์ ์ค๋ณต์ ์ค์ด๋ ๊ฒ์ ์ค์์ฑ์ ๊นจ๋ฌ์๋ค. ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
// *Main ์ปดํฌ๋ํธ*
<Container>
<FilterAndSortBox /> // ๋ฉ์ธ ์นดํ
๊ณ ๋ฆฌ
<FilterAndSortBox /> // ์๋ธ ์นดํ
๊ณ ๋ฆฌ
<FilterAndSortBox /> // ์ ๋ ฌ
</Container>
// *FilterAndSortBox ์ปดํฌ๋ํธ*
<FilterAndSortBox>
<CategoryWrap/> // SelectBox
<FilterAndSortModal/> // ๋ชจ๋ฌ
</FilterAndSortBox>
[ ์นดํ
๊ณ ๋ฆฌ ํํฐ๋ง ๋ฐ ์ ๋ ฌ ]
๊ฐ์ ๋ชฉ๋ก์ ์นดํ
๊ณ ๋ฆฌ์ ๋ฐ๋ผ ํํฐ๋งํ๊ณ , ๊ฐ๊ฒฉ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ filter
ํน์ sort
๋ฅผ ํตํด ํ๋ก ํธ์์๋ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง, ์๋น์ค๋ฅผ ํ๊ณ ์๋ ๋ค์ํ ์นํ์ด์ง๋ฅผ ๋ณด๋ฉด ํํฐ๋ง์ ํ๊ฑฐ๋ ์ ๋ ฌ์ ํ ๋๋ง๋ค ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๋ชจ์ต์ ๊ฐ๋ฐ์ ๋๊ตฌ Networkํญ์์ ํ์ธํ ์ ์์๋ค. ํ์ด์ง์ URL์ https://test.com/?category=0123456&sort=recommendOrder
์์๋ ์ ๋ ฌ์ ๋ํ ์ ๋ณด๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ์ฝ๊ฒ ํ์ธ ํ ์ ์๋ค.
ํํฐ๋ง ๋ฐ ์ ๋ ฌํ ๋๋ง๋ค searchParams
๋ฉ์๋๋ฅผ ํตํด URL์ ์ ๋ณด๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ , searchParams
๊ฐ ๋ฐ๋๋ค๋ ๊ฒ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ผํ๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ useEffect
์ ์์กด์ฑ ๋ฐฐ์ด์ searchParams
๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
// *๋์ ๊ฐ๊ฒฉ์ ์ ๋ ฌ*
const sortByHighPrice = e => {
setBoxName(e.target.innerText); // ์ ํํ ์ ๋ ฌ์ selectbox ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ธฐ
searchParams.set('sort', 'costHigh'); // searchParams๋ฅผ ํตํด sort=costHigh ์ถ๊ฐํ๊ธฐ
setSearchParams(searchParams);
setMainModalOpen(prev => !prev); // ์ ๋ ฌ ์ ํ ํ ๋ชจ๋ฌ ๋ซ๊ธฐ
};
// *๋ฉ์ธ ํ์ด์ง*
const fetchURL = searchParams.toString();
useEffect(() => {
fetch(`${BASE_URL}/main?${fetchURL}`)
.then(res => res.json())
.then(data => {
setClassList(data.getFilter);
});
}, [searchParams]);
์๋์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด, ๊ฐ๊ฒฉ ๋์ ์ ์ ๋ ฌ์ ํด๋ฆญํ์ ์ ํ์ด์ง URL์ sort=costHigh
๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํ์ด์ง๋ค์ด์
์ญ์ ์์ ์นดํ
๊ณ ๋ฆฌ ํํฐ๋ง๊ณผ ์ ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก searchParams
๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์๋ ํ์ด์ง๋ฅผ ์ด๋ํ๊ฒ ๋๋ฉด URL์ offset
๊ฐ์ด ๋ณํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ฐ์๋ชฉ๋ก์ 12๊ฐ์ฉ ๋ณด์ด๋๋ก limit
์ ์ค์ ํ๋ค๋ฉด, ์ฒซ ํ์ด์ง์ offset
์ 0์ด๋๊ณ ๊ทธ ๋ค์ ํ์ด์ง์ offset
์ 12, ๋ ๊ทธ๋ค์ ํ์ด์ง์ offset
์ 24๊ฐ ๋๋ค.
// Main ํ์ด์ง์ ์ปดํฌ๋ํธ
const LIMIT = 12;
const movePage = pageNumber => {
searchParams.set('limit', LIMIT);
searchParams.set('offset', (pageNumber - 1) * LIMIT);
setSearchParams(searchParams);
};
return (
<>
<BtnContainer>
<PageBtn onClick={() => movePage(1)}>1</PageBtn>
<PageBtn onClick={() => movePage(2)}>2</PageBtn>
<PageBtn onClick={() => movePage(3)}>3</PageBtn>
</BtnContainer>
</>
)
ํํฐ๋ง, ์ ๋ ฌ, ํ์ด์ง๋ค์ด์
๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ ๋ถ ๋ค๋ฅธ URL์ ์์ฒญํด์ผํ๋ค๋ฉด ๋ฐ๋ณต๋๋ ์ฝ๋๋ ๋ง์ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ๋นํจ์จ์ ์ด์์ ๊ฒ์ด๋ค. searchParams
๋ฅผ ํตํด URL์ ๊ตฌ์ฑ์์๋ฅผ ๋ฐ๊พธ๊ณ , ์ด๋ฅผ ํ ๋๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ฐฐ์ธ ์ ์์ด ์ข์๋ค.
๊ฐ์ฅ ์ฒ์ ๊ฐ์ ๋ชฉ๋ก์ ๋ถ๋ฌ์ฌ ๋, access token
์ด LocalStorage
์ ์ ์ฅ๋์ด์๋ ์ํ, ์ฆ ๋ก๊ทธ์ธ ์ํ๋ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ฐํ ๊ฐ์ ๋ชฉ๋ก์ ํํธ๊ฐ ์ฑ์์ง ์ํโค์ฌ์ผ ํ๋ค. ์ด๋ฅผ ์ํด ์ฌ์ฉ์๊ฐ ์ฐํ ๊ฐ์๋ชฉ๋ก์ ๋ฐ์์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐํ๊ธฐ๋ฅผ ๋๋ฅผ ๋๋ง๋ค ์ด๋ค ๊ฐ์ ๋ชฉ๋ก์ ์ฐํ๊ณ , ์ฐ์ ์ญ์ ํ๋์ง ์๋ฒ์ POST
๋ฐ DELETE
์์ฒญ์ ๋ณด๋ด ๋ง์ดํ์ด์ง ์ฐํ๊ธฐ ๋ชฉ๋ก์์ ์ฐํ ๊ฐ์ ๋ชฉ๋ก์ ํ์ธํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ์๋ค.
2์ฐจ ํ๋ก์ ํธ ๋ฐํ๋ ์ ์ ๋ ์์ ์ ์๋ ํ๋ฃจ์๊ธฐ ๋๋ฌธ์ ๊ผญ ๊ธฐ๋ก์ผ๋ก ๋จ๊ฒจ๋๊ณ ์ถ์๋ค.
2์ฐจ ํ๋ก์ ํธ ๋ฐํ ๋น์ผ์ธ ์๋ฒฝ 2์๊ฐ ๋์ด์์ผ ํ๋ก์ ํธ๊ฐ ๋ง๋ฌด๋ฆฌ๋๋ค. ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ์ง๊ธฐ ๋ฐ๋น ์ ๋ฐํ๋ ์๊ฐํ ๊ฒจ๋ฅผ๋ ์์๋ค. ๊ทธ๋์ ๋ฐํ ์๋ฃ๋ ๋ฌผ๋ก ์ด๊ณ ๋ฐํ ์ค๋น๊ฐ ํ๋๋ ๋์ด์์ง ์์ ์ํฉ์ด์๋ ๊ฒ. ๊ทธ๋ฐ๋ฐ ๊ทธ๋ฐ ๋ฐํ๋ฅผ ํด์ผํ๋ ๋ฐํ์๋ ๋๊ตฌ...? PM์ ๋๊ตฌ?
๋น์ฅ ์ค์ 10์๊ฐ ๋ฐํ์๋ค. 2์ฃผ๊ฐ ๋ฐค๋ฎ์์ด ๋ฌ๋ ค์จ ๋ง์ง๋ง๋ ์ด์๊ธฐ์ ์ฒด๋ ฅ์ ์ผ๋ก ์ฝ์ง ์์ ์ํฉ์ด์๋ค. ํ์ง๋ง ์ ๋ ์ด์๋ถ์ ๋์ถฉํ๊ณ ์ถ์ง ์์๋ค. ์ด๋ค ์ผ์ ํ๋ ์ ์ข
์ ๋ฏธ๋ฅผ ๊ฑฐ๋์ด์ผํ๋ค๋ ์๊ฐ์ ํญ์ ๊ฐ์ง๊ณ ์์๊ธฐ์ ์ ๋ ์์๋ค. ํ๋ฃจ์ ๋ ์์๋ ๊ด์ฐฎ๋ค๋ ์๊ฐ์ผ๋ก ๋ฐํ ์๋ฃ๋ฅผ ๋ง๋ค๊ณ ๋ฐํ ์ฐ์ต๊น์ง ๋๋ง์ณค๋ค. ์ค๋นํ๊ฒ ์์ผ๋ ๋๋ ค์ธ๊ฒ ์์๊ณ , ๊ทธ๋ ๊ฒ ๋ฐํ๋ ์ฑํฉ๋ฆฌ์ ๋ง๋ฌด๋ฆฌ๋์๋ค.๐๐ป๐๐ป๐๐ป
(1์ฐจ ๋๋ ๋ฐํํ๋ ์ฌ์ง ์ฐ์ด์ฃผ์๋๋
..2์ฐจ ๋๋ ์๋น..๊ด์๋ฆฌ ์ญ์ญ..)
์ด ๋ ์ ๊ฒฝํ์ ๋ด๊ฒ ๊ทผ๊ฑฐ์๋ ์์ ๊ฐ์ ๋ง๋ค์ด์ฃผ์๋ค. ๋๋ ์ด๋ค ์ํฉ์ด๋ ์ฑ ์๊ฐ ์๊ฒ ๋ด๊ฐ ๋งก์ ์ผ์ ํด๋ด๋, ๊ทธ๊ฒ๋ ์ ํด๋ด๋ ์ฌ๋์ด๋ผ๋ ๊ทผ๊ฑฐ๋ฅผ ๋ง๋ค์ด์ฃผ์๊ณ ์ด๋ก ์ธํด ์์ ๊ฐ์ด ์๊ฒผ๋ค. ๊ทธ๋์์ธ์ง ์งง๋ค๋ฉด ์งง์๊ณ ๊ธธ๋ค๋ฉด ๊ธด 2์ฃผ๊ฐ์ 2์ฐจ ํ๋ก์ ํธ๋ ๋ด๊ฒ ์ ๋ง ๋ป๊น์ ์๊ฐ์ด์๋ค.
๋ค๊ฐ์ค๋ ๊ธฐ์
ํ์
์ผ์ ์ผ๋ก ์ ์ฒด์ ์ธ ๋ถ์๊ธฐ๊ฐ ๊ฝค ์ด์์ ํ์๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ ํด๋์คIOI ํ์ ๋ถ์๊ธฐ์ ํฉ์ธ๋ฆฌ์ง ์๊ณ ๋๊น์ง ์ง์คํ๊ณ , ๋ชฉํ๋ก ํ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ผ ์ ์์๋ค. ํ๋์ ๊ฐ์น๋ ๊ทธ ํ๋์ ๋๊น์ง ์ด๋ฃจ๋๋ฐ ์๋ค
๋ ๋ง์ด ์๋ค. ์ฒ์์ ๋๊ตฌ๋ ์ด์ฌํ ํ๋ค. ๋ฌธ์ ์ง์ ์๋ถ๋ถ๋ง ๋๋๋๋ํ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ ํ์ ๋ชจ๋๊ฐ ๋ง์ง๋ง๊น์ง ๊ฐ์์ ์๋ฆฌ์์ ์ต์ ์ ๋คํจ์ผ๋ก์จ ๊ทธ ๊ฐ์น๋ฅผ ์ฆ๋ช
ํด๋๋จ ์๊ฐ์ด ๋ค์ด ๋ฟ๋ฏํจ์ด ํฌ๋ค.
์ธ๋ฆผ์ด ์๋ ํฌ์คํ ์ ๋๋ค.