Podo - Dev Log (3)
12์ 6์ผ (์)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- ์๋ฒ ๋ฐฐํฌ ํ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ํ ์คํธ
- ๊ณ์ข์กฐํ ๋ฐ ์นด๋๊ฒฐ์ API ๊ฒ์
- ์์ํฌํธ, ์ด๋์์ค API ๊ณต๋ถ
- API Docs์ Callback ์ญ์ ๋ฐ Response ์์
- ์ฝ๋ ์ฃผ์ ์ถ๊ฐ
์ค๋์ ํ๋ก์ ํธ์์ ํ๋ ์ ์ ๋ฌด์์ธ๊ฐ์?
- ํ๋ก์ ํธ ์ ๊ฒฐ์ API๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ ์ง ๊ฐ์ ์ก๋๋ฐ ํ๋ค์์ต๋๋ค.
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- ์์ํฌํธ API ์ ์ฉ
12์ 7์ผ (ํ)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- ์ด๋์์ค ์ผ๋ฐ ๊ฒฐ์ ํ ์ค์ค
- ์์ํฌํธ API ์ด์ฉ ๋ฐ ๊ณ์ข์ค๋ช ์กฐํ Function ๊ตฌํ
- ant-design ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- ๊ธฐ์กด์ ๋์์๋ ๊ฒฐ์ ๊ด๋ จ ์ฝ๋๋ฅผ ์คํํด๋ณด๊ธฐ ์ํด ant-design library๋ฅผ ์ฌ์ฉํด์ผํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ์์์ต๋๋ค.
Attempted import error: 'Icon' is not exported from 'antd'.
๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์คํ์ ์ํ๋ ๊ฒ ๊ฐ์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น ๋ฌธ์ ์ธ๊ฐ ํด์ ์ฌ์ค์นํด์ฃผ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
ํ ๋๊ธ์ ๋ณด๋ Ant Design์ด v4๋ก ์ ๊ทธ๋ ์ด๋ ๋ ์ดํ๋ก Icon ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ฐ๋์ด ์์ด์ฝ ํ๋ํ๋๋ฅผ ์ง์ import๋ฅผ ํด์ค์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค.
Before
import Icon from '@ant-design/icons';
...
<Icon type='CaretDownOutlined />
After
import { CaretDownOutlined } from '@ant-design/icons';
...
<CaretDownOutlined />
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- ์นด๋๊ฒฐ์ Function ๊ตฌํ
- ์นด๋์ค๋ช ์กฐํ Payment์์ ํ์ฉ
- Headers Sent Error ์ฒ๋ฆฌ
12์ 8์ผ (์)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- ๊ณ์ข ์ค๋ช ์กฐํ Function์ผ๋ก ๋ณ๊ฒฝ ๋ฐ enrollCard, changeCard์ ์ ์ฉ
- ์ฝ๋์คํ ์ด์ธ Codeplay ํ๊ณผ ๋ฏธํ : ์งํ ์ํฉ ๋ฐ ๊ฐ๋ฐํ๋ฉด์ ํ๋ค์๋ ์ ๊ณต์
- API document ์์
- Client API test
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- async, await๋ฅผ ์ฌ์ฉํด์ Promise ํํ๋ก ๊ณ์ข ์ค๋ช ์กฐํ๋ฅผ ํ๋ ๊ตฌ์กฐ๋ก Function์ ๋ง๋ค์์ต๋๋ค. ์ด function์ Controller์ธ enrollCard, changeCard์ ์ ์ฉํ๊ธฐ ์ํด Promise ์์ ์๋ ๊ฐ์ ๋ณ์์ ๊ฒฐ๊ณผ๊ฐ์ ํ ๋นํด์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์๋ฌ๊ฐ ๋ฌ์ต๋๋ค. .then์ ํ์ฉํ์ฌ ์๋ฌ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ค๋์ ํ๋ก์ ํธ์์ ํ๋ ์ ์ ๋ฌด์์ธ๊ฐ์?
- ์์์ต๋๋ค.
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- Client API test
- Edge Case ์ฒ๋ฆฌ
12์ 9์ผ (๋ชฉ)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- Client API Test
- Party
- Payment
- User
- Edge Case ์ฒ๋ฆฌ
- controller/party/joinParty: ๋์ผ ์ ์ ๊ฐ ๊ฐ์ ํํฐ์ ์ค๋ณต ๊ฐ์ ๋ชปํ๋๋ก ์ฒ๋ฆฌ
- controller/user/deleteUser: ์ ์ ๊ฐ ํํด ์์ฒญ ์ ๋ชจ๋ ํํฐ์ ํํด๋์๋์ง ํ์ธ ํ ํํด
- API Document ๊ทธ์ ๋ง๊ฒ ์์
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- API Test์์ Party ํ
์คํธ๊ฐ ์ ์งํ๋๋ค๊ฐ ์ ์ฌ์๊ฐ์ด ์ง๋๊ณ ์๋ํ๋ ์๋ฌ๊ฐ ๋ฌ์ต๋๋ค.
์ด์ ๊ณผ ๊ฐ์ ์์ฒญ์ ํด๋ ์๋ํฌ์ธํธ /party๊ฐ ๋ค์ด๊ฐ์ง ์๋ ์๋ฌ์์ต๋๋ค.
์ฝ๋์ ๋ฌธ์ ๊ฐ ์๊ธด๊ฑด ์ค ์๊ณ ๋ค์ํ ์๋๋ฅผ ํ๋๋ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก server๋ฅผ ๊ป๋ค ๋ค์ ์ผ๋ ํด๊ฒฐ๋์์ต๋๋ค.
์ค๋์ ํ๋ก์ ํธ์์ ํ๋ ์ ์ ๋ฌด์์ธ๊ฐ์?
- ์์์ต๋๋ค.
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- Node Schedule ํ์ฉํด์ ๋ฐฑ๋จ ์ ์ฐ ์์คํ ๊ตฌํ
12์ 10์ผ (๊ธ)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- Edge Case ์ฒ๋ฆฌ: ์ด๋ฏธ ๊ฐ์ ํ ํํฐ์ OTT ์ข ๋ฅ์ ๋์ผํ ํํฐ๋ฅผ ๋ ๋ค์ ๊ฐ์ ํ๊ฑฐ๋(join) ๋ง๋ค๋ ค๊ณ (create)ํ ๋, 422 ์๋ฌ ์ฒ๋ฆฌ
- API Test์ response ๋ฐ error ๋ฉ์ธ์ง๊ฐ ๋จ๋๋ก JSON.stringify( ) ์ถ๊ฐ
- getAllParties, getFilteredParties, updateProfileImage
- API docs ๋ฐ์
- DB Schema column ์ถ๊ฐ
- Wiki ๋ฐ์
- Model column ์ถ๊ฐ
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- ํด๋ผ์ด์ธํธ ๋ฐฐํฌ ํ ๋ก๊ทธ์ธ ์ดํ์ ์ค์ ์ด ๋ฐ์๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
์์ธ์ ๋ก์ปฌ๊ณผ ๋ฐฐํฌ๋ฒ์ ์ ํ๊ฒฝ๋ณ์๊ฐ ๋ฌ๋๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค.
์์ผ๋ก ๋งค์ผ ์์นจ๋ง๋ค ๋ฐฐํฌ๋ฅผ ์๋ก ํด์ค์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ์ต๋๋ค. - sequelize ์ฌ์ฉ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ด Promise { }์ผ๋ก ์ถ๋ ฅ๋จ (#212 ์ฐธ๊ณ )
์ค๋ ์๋ก ๋ฐฐ์ด ์ ์ ๋ฌด์์ธ๊ฐ์?
- prettierrc: json ํํ์์๋ ์ ๋๋ก ๋ฉ์ธ์ง๊ฐ ๋ถ๋ ค์ง์ง ์์ ์ฒ์์ ๋ฐ์ดํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง prettierrc ์ค์ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ์ ์ฅํด๋ ์๋์ผ๋ก ๋ฐ์ดํ๊ฐ ์ฌ๋ผ์ก์ต๋๋ค. ๊ทธ ์ค์ ์ ํด์ ํ๊ธฐ ์ํด "quoteProps"๋ฅผ preserve๋ก ๋ฐ๊ฟ์ค์ผ ํ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋๋ message๋ ๋ถ๋ฌ์์ง์ง ์์์ต๋๋ค.
๋ ํผ๋ฐ์ค: prettierrc ์ค์ - response ๋ฐ error message๊ฐ ์ ๋๋ก ๋ถ๋ ค์ค๊ฒ ํ๊ธฐ ์ํด์๋ JSON.stringify( )๋ฅผ ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- getAllParties, getFilteredParties, updateProfileImage
- ๊ฐ controller ์ฝ๋ ๋ณ๊ฒฝ
- ์ต์ข ๊ฒฐ๊ณผ ๋ฐ์ํด์ API docs ์์
12์ 11์ผ (ํ )
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- getAllParties, getFilteredParties ์์
- ํด๋ผ์ด์ธํธ ์ฌ๋ฐฐํฌ
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- sequelize์ Op๋ฅผ ์ด์ฉํด์ ์ฟผ๋ฆฌ๋ฌธ์ ์ฐ๋ ค๊ณ ํ์ง๋ง ํด๋น ์ฟผ๋ฆฌ๊ฐ ์ ์์ฑ๋์ง ์๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์๊ณ ๋ณด๋ ์ผ๋ฐ sequelize์ ๋ฌ๋ฆฌ Op์ ๊ฐ์ ์ต์ ์ ์ถ๊ฐ์ ์ผ๋ก ์ฐ๊ธฐ ์ํด์๋ const { Op } = require("sequelize");์ ์๋จ์ ๋ฃ์ด์ค์ผํ์ต๋๋ค.
- ๋น์ผ ๋ ์ง๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์์ผ ํ๋๋ฐ Javascript ์์ ๊ธฐ๋ณธ ์์ฑ์ Date()์๋ ๋น์ผ ๋ ์ง๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ด ์์์ต๋๋ค. ๊ตฌ๊ธ๋ง์ ํตํด moment๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๊ฒ๋์ด ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ์ต๋๋ค.
const date = moment().format("YYYY-MM-DD");
let allPartiesInfo = await Party.findAll({
where: { start_date: { [Op.gt]: date }, ott_id },
raw: true,
});
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- updateProfileImage controller ๊ตฌํ
- ์ฃผ์ ์ถ๊ฐ
- ํด๋ผ์ด์ธํธ ์ฌ๋ฐฐํฌ
12์ 12์ผ (์ผ)
์ค๋์ ์ด๋ป๊ฒ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋์?
- updateProfileImage ๊ตฌํ
- ํด๋ผ์ด์ธํธ API ํ ์คํธ
- ํด๋ผ์ด์ธํธ ์ฌ๋ฐฐํฌ
์ค๋์ ํ๋ก์ ํธ์์ ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์?
- ํด๋ผ์ด์ธํธ ํ ์คํธ params ์ฌ์ฉ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ์ด ์ ํด์ ธ์๋ ๊ฒฝ์ฐ query๋ณด๋ค๋ params๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด ๋๋์ด์ ์ฌ์ฉํ์ง๋ง ๋ฐ๋ก ์ ์ ์ฉ์ด ๋์ง ์์์ต๋๋ค.. ์ด์ ๋น์ทํ ์๋ฌ๊ฐ ์ด์ ๋ถํฐ getAllParties๋ getFilteredParties์์๋ ๋์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ํ์ ํด๊ฐ๋ฉฐ ์๋ฌ ์์ธ์ ๋ถ์ํ์ต๋๋ค. ์์ธ์ ์๋ฒ์์ req.params.id๋ก ํด์ผํ๋๋ฐ req.params.ott_id๋ก ํด๋์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ๋๋ก ๋ฐ์๋ค์ด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด์์ต๋๋ค. params ์ด๋ฆ์ ์ ๋๋ก ๋ฐ๊พธ๋ ํด๊ฒฐ๋์์ต๋๋ค.
๋ด์ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ๋ฌด์์ ํด์ผ ํ๋์?
- ์ ์ฐ์์คํ ๊ตฌํ
- ํด๋ผ์ด์ธํธ ์ฌ๋ฐฐํฌ