ํ† ์ด ํ”„๋กœ์ ํŠธ: ๋ฒ„์Šค์•ผ ์–ด๋””์žˆ๋‹ˆ? ์ง„ํ–‰ ์ƒํ™ฉ ์ •๋ฆฌ

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

์‚ฌ์šฉ์ž ์œ„์น˜ ์ขŒํ‘œ ์กฐํšŒ

  1. HTML5 Web API > geolocation API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ์ขŒํ‘œ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  2. Kakao ์ง€๋„ API๋กœ ์ขŒํ‘œ๋ฅผ ๋„๋กœ๋ช… ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
  3. 1๋ฒˆ ๊ณผ์ •์—์„œ ์–ป์–ด๋‚ธ ์ขŒํ‘œ๋Š” localStorage์— ์ €์žฅ๋œ๋‹ค. ํ™”๋ฉด์ด ๊ฐฑ์‹ ๋˜๋ฉด API ์‘๋‹ต ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์šฐ์„  ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  4. ํผ ์ œ์ถœ ์‹œ ์ขŒํ‘œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด, hidden ์ธํ’‹(lat, lng)์—๋„ ์ขŒํ‘œ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

์ด๋ฏธ์ง€

์‹ค์‹œ๊ฐ„ ๋…ธ์„  ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰

  1. ๊ณต๊ณต API > ๋ฒ„์Šค๋…ธ์„  ์กฐํšŒ ์„œ๋น„์Šค > ๋…ธ์„  ๋ฒˆํ˜ธ ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.
  2. ํ‚ค๋ณด๋“œ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค keyup ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ, ์ž…๋ ฅ๋œ ์ˆซ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋…ธ์„  ๋ชฉ๋ก์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค. ๊ธ€์ž ์ˆ˜+1 ๊ธธ์ด์˜ ๋…ธ์„ ๊นŒ์ง€ ์ œ๊ณตํ•œ๋‹ค.

    • ์˜ˆ: ํ•œ ์ž๋ฆฌ ์ˆ˜ โ€˜3โ€™ ์ž…๋ ฅ ์‹œ, ์ตœ๋Œ€ ๋‘ ์ž๋ฆฌ ์ˆ˜ ๋ฒˆํ˜ธ๊นŒ์ง€ ์ œ๊ณต โ€˜3โ€™, โ€™30โ€™, โ€™31โ€™ โ€ฆ
  3. ๋ชฉ๋ก์—์„œ ๋…ธ์„ ์„ ์„ ํƒํ•˜๋ฉด, ์ธํ’‹์— ํ•ด๋‹น ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜๊ณ  hidden ์ธํ’‹(routeId, routeName)์—๋„ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  4. ๋…ธ์„  ๋ฒˆํ˜ธ ์ˆ˜์ •์„ ์œ„ํ•ด ์ธํ’‹์„ ํด๋ฆญํ•˜๋ฉด, ์ง€์—ญ ๋ฐ ๋ฒ„์Šค ์œ ํ˜• ์ •๋ณด๊ฐ€ ์ง€์›Œ์ง€๊ณ  ๋…ธ์„  ๋ฒˆํ˜ธ๋งŒ ๋‚จ๊ฒŒ ํ–ˆ๋‹ค.

    • hidden ์ธํ’‹ routeName์˜ value๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • ์ˆ˜์ •์— ์šฉ์ดํ•˜๋ฉด์„œ, ๋ฐฑ์ŠคํŽ˜์ด์Šค ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” keyup ์ด๋ฒคํŠธ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  5. ๋…ธ์„  ๋ชฉ๋ก์ด 4๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ์Šคํฌ๋กค ๋ฐ”๋ฅผ ์ œ๊ณตํ•˜๊ณ , 3๊ฐœ ์ดํ•˜์ผ ๋• ๊ฐœ์ˆ˜๋งŒํผ select ํƒœ๊ทธ์˜ ๋†’์ด๋ฅผ ์กฐ์ •ํ–ˆ๋‹ค.

์ด๋ฏธ์ง€

์ฃผ๋ณ€ ์ •๋ฅ˜์žฅ์—์„œ ์„ ํƒ๋œ ๋…ธ์„ ์˜ ๋„์ฐฉ ์ •๋ณด ์ œ๊ณต

  1. ๊ณต๊ณต API > ์ •๋ฅ˜์†Œ ์กฐํšŒ ์„œ๋น„์Šค > ์ฃผ๋ณ€ ์ •๋ฅ˜์†Œ ๋ชฉ๋ก ์กฐํšŒ, ๊ณต๊ณต API > ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด ์กฐํšŒ ์„œ๋น„์Šค > ๋ฒ„์Šค ๋„์ฐฉ ์ •๋ณด ๋ชฉ๋ก ์กฐํšŒ๋ฅผ ์ด์šฉํ–ˆ๋‹ค.
  2. ์ขŒํ‘œ ๊ฐ’ ๊ธฐ์ค€์œผ๋กœ ์ฃผ๋ณ€ ์ •๋ฅ˜์†Œ ์กฐํšŒ ํ›„, ๊ฐ ์ •๋ฅ˜์†Œ์— ๋Œ€ํ•ด ์„ ํƒ๋œ ๋…ธ์„ (routeId ๋น„๊ต)์˜ ๋„์ฐฉ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  3. ์กฐํšŒ๋œ ๋„์ฐฉ ์ •๋ณด๋Š” res.render๋ฅผ ํ†ตํ•ด pug ํ…œํ”Œ๋ฆฟ์— ์ „๋‹ฌํ•˜๊ณ , pug ํ…œํ”Œ๋ฆฟ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ(li ํƒœ๊ทธ)๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

์ด๋ฏธ์ง€

์˜ค๋ฅ˜ ํŽ˜์ด์ง€ ์ œ๊ณต

  1. ์ฃผ๋ณ€์— ์ •๋ฅ˜์žฅ์ด ์—†์„ ๊ฒฝ์šฐ ๋˜๋Š” ์ฃผ๋ณ€ ์ •๋ฅ˜์žฅ์— ์„ ํƒํ•œ ๋…ธ์„ ์ด ์šดํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
  2. catch๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜ ์ผ€์ด์Šค๋ฅผ ์ธ์‹ํ•˜๊ณ , ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๋ฅผ pug ํ…œํ”Œ๋ฆฟ์— ์ „๋‹ฌํ–ˆ๋‹ค.

์ด๋ฏธ์ง€

๋งบ์Œ๋ง

์•„์ง ๋„์ฐฉ์ •๋ณด ์กฐํšŒ ํŽ˜์ด์ง€๋Š” ๋””์ž์ธ๋„ ๋ชป ์ž…ํžŒ ์ƒํƒœ๊ณ , ์—ฌ๋Ÿฌ๋ชจ๋กœ ๋” ๋””๋ฒจ๋กญํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ๋งŽ๋‹ค.
ํŠนํžˆ ๋…ธ์„  ๋ฒˆํ˜ธ ์„ ํƒ ์•ˆ ํ–ˆ์„ ๋•Œ ํผ ์ œ์ถœ ๋ง‰๊ณ  ์–ผ๋Ÿฟ ๋ฉ”์„ธ์ง€ ๋„์šฐ๋Š” ๊ฑฐ ๊ผญ ํ•ด์•ผ๊ฒ ๋‹ค. ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ ๊ธฐํš๋„ ๊ผญ ๋ณ€๊ฒฝํ•ด์•ผ๋  ๊ฒŒ ๋ณด์—ฌ์„œ ์ œ๋Œ€๋กœ ๊ธฐํš์„œ๋„ ๋งŒ๋“ค ์˜ˆ์ •์ด๋‹ค. 0.5 ๋ฒ„์ „ ๋ชฉํ‘œ๋กœ ๊ตฌํ˜„๋˜์–ด์•ผํ•  ๊ฒƒ, 1.0 ๋ฒ„์ „์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ž‘์„ฑํ•ด์•ผ๊ฒ ๋‹ค.
ํ•ด์•ผํ•  ๊ฒƒ๋„ ๋งŽ๊ณ  ์ƒˆ๋ฒฝ๊นŒ์ง€ ๋””๋ฒ„๊น…์„ ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์žฌ๋ฏธ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋‹ค. ๊ผญ ์™„์„ฑ๊นŒ์ง€ ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ๊ธธ ๐Ÿคฉ

โ† ์ด์ „ ๊ฒŒ์‹œ๋ฌผ2019/10/17 TIL(Today I Learn) - ๋ธ”๋กœ๊ทธ ๋ฆฌ๋‰ด์–ผ! IE CSS ์ด์Šˆ ํ•ด๊ฒฐํ•˜๊ธฐ, git branch ๋ถ„๋ฆฌํ•˜๊ธฐ
๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ โ†’Vanilla js / Ecma script / Typescript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ๋ช…์นญ ์ดํ•ดํ•˜๊ธฐ!
๋ชฉ๋ก