Skip to content

moto4321/ddang-ddang-backend

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์•ผ์™ธ ํ™œ๋™, ์ด์›ƒ๊ณผ์˜ ์†Œํ†ต์„ ์œ ๋„ํ•˜๋Š” ๋•…๋”ฐ๋จน๊ธฐ ๊ฒŒ์ž„

๋‹ˆ๋•…๋‚ด๋•… ์†Œ๊ฐœ

MBTI ๊ทธ๋ฃน ๋•…๋”ฐ๋จน๊ธฐ ๐Ÿ‘จโ€๐Ÿ’ป


๊ฐ™์€ ๋™์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ MBTI ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์ด ๋ชจ์—ฌ ๋•…๋”ฐ๋จน๊ธฐํ•˜๋ฉฐ ์ด์›ƒ๊ณผ์˜ ์†Œํ†ต์„ ์œ ๋„ํ•˜๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

  • 2022.04.29 ~ 2022.06.03

๐Ÿ˜Ž ํŒ€ ๋ฉค๋ฒ„

๊น€์žฌํ˜ ๋ฐ•์šฉํƒœ ๋ฐ•์žฌ์ฒ  ๊ธฐ์šฐ์„ ๋ฐ•์„ธ๋ช…
Frontend Frontend Backend Backend Backend


ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“ฒย ์นด์นด์˜ค ๋กœ๊ทธ์ธ / ์ด๋ฉ”์ผ ๋กœ๊ทธ์ธ

  • ์นด์นด์˜ค๋ฅผ ํ†ตํ•œ ์†Œ์…œ๋กœ๊ทธ์ธ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฉ”์ผ ํšŒ์›๊ฐ€์ž…์—์„œ๋Š” ์ค‘๋ณต ๊ฐ€์ž…์ด ์•ˆ๋˜๋„๋ก ์ค‘๋ณตํ™•์ธ์„ ๋ˆŒ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ์ธ์˜ mbti ๋ฅผ ์„ ํƒํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ•นย 3๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ€˜์ŠคํŠธ ์ˆ˜ํ–‰

  • ํ”ผ๋“œ ์ž‘์„ฑํ•˜๊ธฐ, ๋ชฌ์Šคํ„ฐ ์ฒ˜์น˜ํ•˜๊ธฐ, ํƒ€์ž„์–ดํƒ 3๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ€˜์ŠคํŠธ๊ฐ€ ์ง€๋„ ์œ„์— ๋ฟŒ๋ ค์ ธ์š”. ํ•ด๋‹น ์œ„์น˜ ๊ทผ์ฒ˜์—์„œ ํ€˜์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชฌ์Šคํ„ฐ ํ€˜์ŠคํŠธ๋Š” ๋ชฌ์Šคํ„ฐ์™€ ์ง์ ‘ ๊ฒŒ์ž„์„ ํ†ตํ•ด์„œ ์ ์ˆ˜๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ†ย ๋‹ฌ์„ฑํ•œ ์—…์  ํ™•์ธ

  • ํ€˜์ŠคํŠธ๋ฅผ ์ผ์ • ํšŸ์ˆ˜ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฑƒ์ง€๋ฅผ ๋“œ๋ ค์š”. ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์ž์‹ ์ด ๋‹ฌ์„ฑํ•œ ์—…์ ์„ ํ€˜์ŠคํŠธ ํƒ€์ž…๋ณ„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿฅณย ํ”ผ๋“œ์™€ ๋Œ“๊ธ€์„ ํ†ตํ•ด ์ด์›ƒ์‚ฌ์ดŒ๋“ค๊ณผ ์†Œํ†ตํ•˜์„ธ์š”

  • ํŠน์ •์ง€์—ญ์—์„œ ํ”ผ๋“œ๋ฅผ ๋‚จ๊ฒจ๋ณด์„ธ์š”. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์˜ฌ๋ฆฐ ํ”ผ๋“œ์— ๋Œ“๊ธ€๋กœ ์†Œํ†ตํ•˜๊ณ  ์ข‹์•„์š”๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด์„ธ์š”.

๐Ÿ“ฑ ์ฑ„ํŒ…ํŽ˜์ด์ง€

  • ์ข€ ๋” ์ฆ‰๊ฐ์ ์ธ ์†Œํ†ต์„ ์œ„ํ•ด์„œ ์ฑ„ํŒ…๋ฐฉ์„ ์ด์šฉํ•˜์„ธ์š”. ๋‹‰๋„ค์ž„์ด ๊ณต๊ฐœ๋˜์ง€ ์•Š๋Š” ์ต๋ช…์ฑ„ํŒ…์ž…๋‹ˆ๋‹ค.

  • ์ข€ ๋” ์ฆ‰๊ฐ์ ์ธ ์†Œํ†ต์„ ์œ„ํ•ด์„œ ๋™๋„ค ์ฑ„ํŒ…๋ฐฉ์„ ์ด์šฉํ•˜์„ธ์š”.

๐Ÿจ ๋žญํ‚น์‹œ์Šคํ…œ

  • ์ž์‹ ์ด ์Œ“์€ ํฌ์ธํŠธ๋กœ ๋žญํ‚นํŽ˜์ด์ง€์—์„œ top 10 ๋žญํ‚น์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Architecture



๐Ÿ›  Tools

Frontend




Backend

Infrastructure

Dev tools

Design



๐Ÿ”ฅ Trouble Shooting

Issue1

์™ธ๋ถ€ API ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ

์›์ธ

  • ํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Kakao API, ๊ณต๊ณต ์ฃผ์†Œ API 2๊ฐ€์ง€ API ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ญ๋‹น ํ€˜์ŠคํŠธ ๊ฐœ์ˆ˜๋งŒํผ์˜ API ์š”์ฒญ์„ ๊ฐ๊ฐ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ex. ํ€˜์ŠคํŠธ ๊ฐœ์ˆ˜๊ฐ€ 50๊ฐœ์ธ ๊ฒฝ์šฐ Kakao API ์š”์ฒญ 50ํšŒ, ๊ณต๊ณต ์ฃผ์†Œ API ์š”์ฒญ 50ํšŒ ํ•„์š”
  • API ์š”์ฒญ์„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ API ์š”์ฒญ๋‹น 1์ดˆ ์ •๋„์˜ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ex. 10๊ฐœ์˜ ์š”์ฒญ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๋‚ผ๊ฒฝ์šฐ 9์ดˆ ๋‚ด์™ธ์˜ ์‹œ๊ฐ„ ์†Œ์š”

ํ•ด๊ฒฐ ๊ณผ์ •

  1. API ์š”์ฒญ ๋ณ‘๋ ฌํ™”
    • API ์š”์ฒญ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ  Promise.all์„ ํ™œ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    // src/quests/quests.service.ts
    const roadAddrs = await Promise.all([
      ..addrIndex.map(({ curPage, idx }) =>
          this.getRoadAddress(curPage, address, idx)
      ),
    ]);
  2. ์นด์นด์˜ค 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 ์š”์ฒญ ๋กœ์ง
    }
  3. ํ€˜์ŠคํŠธ๋ฅผ ์‚ฌ์ „์— ์ƒ์„ฑ (์Šค์ผ€์ค„๋ง)
    • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ 50์—ฌ๊ฐœ์˜ ํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์—ฌ์ „ํžˆ 4~5์ดˆ์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ํ€˜์ŠคํŠธ ์ตœ์ดˆ ์ƒ์„ฑ์‹œ์—๋Š” ๋ถ€๋“์ดํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹ค๋งŒ, ์ดํ›„์˜ ์š”์ฒญ์—์„œ๋Š” API ์š”์ฒญ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ์ „์— ํ€˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž์˜ ํ™œ๋™์ด ์ ์€ ์ƒˆ๋ฒฝ 1์‹œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์Šค์ผ€์ฅด๋งํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    // src/quests/quests.service.ts
    @Cron('0 0 1 * * *', { timeZone: 'Asia/Seoul' })
    async preCreateQuests() { ... }

Issue2

์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š” ์ค‘ ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๋Š” socket์˜ id๋ฅผ ์–ด๋–ป๊ฒŒ ๊ธฐ์กด ์‚ฌ์šฉ์ž๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์„์ง€๋ฅผ ๊ณ ๋ฏผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์›์ธ

socket ํ†ต์‹ ์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์ธก socket์˜ id๊ฐ’์ด ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๊ธฐ์กด์˜ ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๊ณผ์ •

  1. userId๋ฅผ ๊ณ ์ •๊ฐ’์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด์„œ users๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด userId์™€ socketId๋ฅผ ์ €์žฅํ•ด ๋†“์Šต๋‹ˆ๋‹ค.
  2. socket id๊ฐ€ ๋ฐ”๋€Œ์–ด ๋“ค์–ด๊ฐˆ ๋•Œ usersํ…Œ์ด๋ธ”์˜ userId๋ฅผ ํ™•์ธํ•˜๊ณ  socketId๋ฅผ updateํ•˜์—ฌ ๊ธฐ์กด์˜ ์‚ฌ์šฉ์ž์ž„์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

About

hh99-final

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 99.5%
  • Other 0.5%