์ผ์ธ ํ๋, ์ด์๊ณผ์ ์ํต์ ์ ๋ํ๋ ๋
๋ฐ๋จน๊ธฐ ๊ฒ์
๊ฐ์ ๋์์ ์๋ก ๋ค๋ฅธ MBTI ์ฑ๊ฒฉ์ ๊ฐ์ง ์ฌ๋๋ค์ด ๋ชจ์ฌ ๋ ๋ฐ๋จน๊ธฐํ๋ฉฐ ์ด์๊ณผ์ ์ํต์ ์ ๋ํ๋ ๊ฒ์์ ๋๋ค.
- 2022.04.29 ~ 2022.06.03
๊น์ฌํ | ๋ฐ์ฉํ | ๋ฐ์ฌ์ฒ | ๊ธฐ์ฐ์ | ๋ฐ์ธ๋ช |
Frontend | Frontend | Backend | Backend | Backend |
- ์นด์นด์ค๋ฅผ ํตํ ์์ ๋ก๊ทธ์ธ์ผ๋ก ๊ฐ๋จํ๊ฒ ๊ฐ์ ํ ์ ์์ด์. ์ด๋ฉ์ผ ํ์๊ฐ์ ์์๋ ์ค๋ณต ๊ฐ์ ์ด ์๋๋๋ก ์ค๋ณตํ์ธ์ ๋๋ฌ์ผ ํฉ๋๋ค. ๋ณธ์ธ์ mbti ๋ฅผ ์ ํํ์ค ์ ์์ต๋๋ค
-
ํผ๋ ์์ฑํ๊ธฐ, ๋ชฌ์คํฐ ์ฒ์นํ๊ธฐ, ํ์์ดํ 3๊ฐ์ง ์ข ๋ฅ์ ํ์คํธ๊ฐ ์ง๋ ์์ ๋ฟ๋ ค์ ธ์. ํด๋น ์์น ๊ทผ์ฒ์์ ํ์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
-
๋ชฌ์คํฐ ํ์คํธ๋ ๋ชฌ์คํฐ์ ์ง์ ๊ฒ์์ ํตํด์ ์ ์๋ฅผ ์ฌ๋ฆด ์ ์์ต๋๋ค
- ํ์คํธ๋ฅผ ์ผ์ ํ์ ์ํํ๋ฉด ๋ฑ์ง๋ฅผ ๋๋ ค์. ๋ง์ดํ์ด์ง์์ ์์ ์ด ๋ฌ์ฑํ ์ ์ ์ ํ์คํธ ํ์ ๋ณ๋ก ํ์ธํ ์ ์์ด์.
- ํน์ ์ง์ญ์์ ํผ๋๋ฅผ ๋จ๊ฒจ๋ณด์ธ์. ๋ค๋ฅธ ์ฌ๋์ด ์ฌ๋ฆฐ ํผ๋์ ๋๊ธ๋ก ์ํตํ๊ณ ์ข์์๋ฅผ ๋๋ฌ๋ณด์ธ์.
-
์ข ๋ ์ฆ๊ฐ์ ์ธ ์ํต์ ์ํด์ ์ฑํ ๋ฐฉ์ ์ด์ฉํ์ธ์. ๋๋ค์์ด ๊ณต๊ฐ๋์ง ์๋ ์ต๋ช ์ฑํ ์ ๋๋ค.
-
์ข ๋ ์ฆ๊ฐ์ ์ธ ์ํต์ ์ํด์ ๋๋ค ์ฑํ ๋ฐฉ์ ์ด์ฉํ์ธ์.
- ์์ ์ด ์์ ํฌ์ธํธ๋ก ๋ญํนํ์ด์ง์์ top 10 ๋ญํน์ ํ์ธํ ์ ์์ต๋๋ค.
์ธ๋ถ API ์ฌ์ฉ์ ๋ฐ๋ฅธ ์ง์ฐ ์๊ฐ ๋ฐ์
- ํ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด Kakao API, ๊ณต๊ณต ์ฃผ์ API 2๊ฐ์ง API ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
- ์ง์ญ๋น ํ์คํธ ๊ฐ์๋งํผ์ API ์์ฒญ์ ๊ฐ๊ฐ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
- ex. ํ์คํธ ๊ฐ์๊ฐ 50๊ฐ์ธ ๊ฒฝ์ฐ Kakao API ์์ฒญ 50ํ, ๊ณต๊ณต ์ฃผ์ API ์์ฒญ 50ํ ํ์
- API ์์ฒญ์ ์์๋๋ก ํ๊ฒ ๋ ๊ฒฝ์ฐ API ์์ฒญ๋น 1์ด ์ ๋์ ์๊ฐ์ด ๋ฐ์ํฉ๋๋ค.
- ex. 10๊ฐ์ ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ๋ณด๋ผ๊ฒฝ์ฐ 9์ด ๋ด์ธ์ ์๊ฐ ์์
- API ์์ฒญ ๋ณ๋ ฌํ
- API ์์ฒญ์ ์์ฐจ์ ์ผ๋ก ๋ณด๋ด์ง ์๊ณ Promise.all์ ํ์ฉํ์ฌ ๋ณ๋ ฌ์ ์ผ๋ก ๋ณด๋ ๋๋ค.
// src/quests/quests.service.ts const roadAddrs = await Promise.all([ ..addrIndex.map(({ curPage, idx }) => this.getRoadAddress(curPage, address, idx) ), ]);
- ์นด์นด์ค 429 ์๋ฌ ๋ฐ์์ ๋ฐ๋ฅธ ์์ฒญ ํ์ ์ ํ
- ์นด์นด์ค API๋ ํ๋ฒ์ ๋ค์์ ์์ฒญ์ ๋ณด๋ผ ๊ฒฝ์ฐ 429 Too Many Request ์๋ฌ๋ฅผ ๋ณด๋ ๋๋ค.
- ์ฐ์ , ์ ํ์ด ์๋ ๊ณต๊ณต ์ฃผ์ API๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
- ์นด์นด์ค API์ ๊ฒฝ์ฐ์๋ ์์ฒญ ํ์์ ์ ํ์ ๋์์ต๋๋ค.
// src/quests/quests.service.ts const limits = 20; // kakaoAPI 429 ์๋ฌ(Too Many Requests) ๋ฐฉ์ง๋ฅผ ์ํด ์์ฒญ๋น ํธ์ถ์ ์ ํ for (let begin = 0; begin < pageCount; begin += limits) { // ์นด์นด์ค API ์์ฒญ ๋ก์ง }
- ํ์คํธ๋ฅผ ์ฌ์ ์ ์์ฑ (์ค์ผ์ค๋ง)
- ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก๋ 50์ฌ๊ฐ์ ํ์คํธ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ ํ 4~5์ด์ ์๊ฐ์ด ์์๋์์ต๋๋ค.
- ํ์คํธ ์ต์ด ์์ฑ์์๋ ๋ถ๋์ดํ๊ฒ ๋ฐ์ํ๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
- ๋ค๋ง, ์ดํ์ ์์ฒญ์์๋ API ์์ฒญ์ ์ฌ์ฉ์๊ฐ ์ง์ ํ์ง ์๋๋ก ์ฌ์ ์ ํ์คํธ๋ฅผ ์์ฑํ์์ต๋๋ค.
- ์ฌ์ฉ์์ ํ๋์ด ์ ์ ์๋ฒฝ 1์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ผ์ฅด๋งํ์์ต๋๋ค.
// src/quests/quests.service.ts @Cron('0 0 1 * * *', { timeZone: 'Asia/Seoul' }) async preCreateQuests() { ... }
์ฑํ ์ ๊ตฌํํ๋ ์ค ์ ์ํ ๋๋ง๋ค ๋ฐ๋๋ socket์ id๋ฅผ ์ด๋ป๊ฒ ๊ธฐ์กด ์ฌ์ฉ์๋ก ์ธ์ํ ์ ์์์ง๋ฅผ ๊ณ ๋ฏผํ์์ต๋๋ค.
socket ํต์ ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ์ธก socket์ id๊ฐ์ด ์ ์ํ ๋๋ง๋ค ๋ฐ๋๊ฒ ๋ฉ๋๋ค. ์ด ๋ ๊ธฐ์กด์ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํด์ผ ํฉ๋๋ค.
- userId๋ฅผ ๊ณ ์ ๊ฐ์ผ๋ก ํ๊ธฐ ์ํด์ users๋ผ๋ ํ ์ด๋ธ์ ๋ง๋ค์ด userId์ socketId๋ฅผ ์ ์ฅํด ๋์ต๋๋ค.
- socket id๊ฐ ๋ฐ๋์ด ๋ค์ด๊ฐ ๋ usersํ ์ด๋ธ์ userId๋ฅผ ํ์ธํ๊ณ socketId๋ฅผ updateํ์ฌ ๊ธฐ์กด์ ์ฌ์ฉ์์์ ํ์ธํฉ๋๋ค.