GraphQL, Prisma, Apollo ๊ณต๋ถ€


GraphQL? RESTful?

: GrpahQL๊ณผ RESTful์€ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ์žˆ์Œ.

RESTful

  • PDF, Excel File ์ „์†ก๊ฐ™์€ ๋‹จ์ˆœ Text๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ์š”์ฒญ์ด ์žˆ์„๋•Œ
  • ์š”์ฒญ์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ค์–‘ํ•˜์ง€ ์•Š๊ณ  ์ •ํ•ด์ ธ ์žˆ๋Š”๊ฒฝ์šฐ.
  • API๋ช…์„ธ์„œ๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๋จ(๋Œ€๋ถ€๋ถ„์˜ ํšŒ์‚ฌ๋“ค์ด ์•„์˜ˆ ์—†๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋จ)

GraphQL

  • ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ์š”์ฒญ๋“ค์— ์‘๋‹ตํ•ด์•ผํ• ๋•Œ.
  • ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์ด CRUD์ผ๋•Œ
  • API๋ช…์„ธ์„œ๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Œ

API์„œ๋ฒ„ ๊ตฌ์ถ•์‹œ ๋‘ ๋ฐฉ๋ฒ•์„ ์„ž์–ด์“ฐ๋Š” ๊ฒƒ์€ ํ’ˆ์งˆ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Œ. ๊ฐ๊ฐ์˜ ์žฅ์ ์„ ์‚ด๋ฆด์ˆ˜ ์žˆ๋Š” ์„ค๊ณ„๊ฐ€ ํ•„์š”.


๊ฐœ๋…

SQL(Structed Query Language)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ
GQL(Graph Query Language)์€ ์›น ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ

ํŠน์ง•

  • ํ•˜๋‚˜์˜ Endpoint๋ฅผ ์‚ฌ์šฉ
    • HTTP์š”์ฒญ ํšŸ์ˆ˜ ๊ฐ์†Œ : RESTful์€ ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ข…๋ฅ˜๋ณ„๋กœ ๋‹ค๋ฅธ Endpoint์—์„œ ํ˜ธ์ถœํ•ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ. ๋ฐ˜๋ฉด GraphQL์€ ํ•˜๋‚˜์˜ Endpoint์—์„œ ์›ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ๋‹ด์•„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ.
    • HTTP์‘๋‹ต์˜ size ๊ฐ์†Œ : ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์š”์ฒญํ• ์ˆ˜ ์žˆ์Œ. Under-Fetching, Over-Fetching ํ•ด๊ฒฐ
  • ์ธํŠธ๋กœ์ŠคํŽ™์…˜(introspection) ๋น„์šฉ๊ฐ์†Œ
    • : ์ฟผ๋ฆฌ์šฉ IDE๋ฅผ ๋งŒ๋“ฑ์–ด์ค˜์„œ API ๋ช…์„ธ์„œ๋ฅผ ๋”ฐ๋กœ ์•ˆ๋งŒ๋“ค์–ด๋„ ๋จ. ๊ธฐ์กด์—๋Š” API ๋ช…์„ธ์„œ๋ฅผ ๋งŒ๋“ค์–ด ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์™€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œํ†ตํ•ด์•ผ ํ–ˆ์Œ.
  • ์š”์ฒญํ• ๋•Œ ์‚ฌ์šฉํ•œ Query๋ฌธ์— ๋”ฐ๋ผ ์‘๋‹ต์˜ ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง.
  • ์–ด๋– ํ•œ ํ”„๋กœํ† ์ฝœ(TCP/UDP, Websocket) ์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ผ ๋ฟ์ด๋‹ˆ๊นŒ!
  • NoSQL DB๋‚˜ RDB ์ƒ๊ด€ ์—†์ด ์‚ฌ์šฉ๊ฐ€๋Šฅ. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ผ ๋ฟ์ด๋‹ˆ๊นŒ!
  • ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ - ์ž์„ธํ•œ ์„ค๋ช…
    • GraphQL server with connected database
    • GraphQL server that integrates existing systems
    • Hybrid approach

๋ฌธ๋ฒ•

  • ์ž‘์—… ์œ ํ˜•
    • Query: ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ด(GET)
      • ์—ฌ๋Ÿฌ query ์š”์ฒญ์€ ๋‚ด๋ถ€์—์„œ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋จ
    • Mutation: ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ(Post), ์ˆ˜์ •(PUT, PATCH), ์‚ญ์ œ(DELETE)
      • ์—ฌ๋Ÿฌ mutation ์š”์ฒญ์€ ๋‚ด๋ถ€์—์„œ ์ง๋ ฌ(์ฐจ๋ก€๋Œ€)๋กœ ์ˆ˜ํ–‰๋จ. ๋”ฐ๋ผ์„œ 2๊ฐœ์˜ mutation ์š”์ฒญ์„ ๋ณด๋ƒˆ์„๋•Œ 2๋ฒˆ์งธ ์š”์ฒญ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ์š”์ฒญ์€ ์ˆ˜ํ–‰๋๋‹ค๋Š” ๊ฒƒ. โ€ฆ Multiple Fields In Mutations
    • Subscription: ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹  ๊ตฌํ˜„

๊ตฌ์กฐ

  • Query : ์–ด๋–ค Request๋ฅผ ๋ฐ›์„ ๊ฑด์ง€
  • Resolver : GQL์€ ์–ธ์–ด์ผ ๋ฟ. ํ•ด๋‹น ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ค์ •. ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ ์ฝ์–ด์˜ฌ ์ˆ˜๋„ ์žˆ์Œ.

์‹ค์ œ ์‚ฌ์šฉ

: Graphql์€ ๋‹จ์ง€ ์–ธ์–ด ์ผ๋ฟ. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณด์กฐํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”.

ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

๋‘˜ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ. Apollo๊ฐ€ ํ˜„์žฌ์ƒํ™ฉ์—์„  ๋” ์“ฐ๊ธฐ ํŽธํ•จ.

๋‚ด๋ถ€์ ์œผ๋กœ DFS(Deep First Search)๋กœ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜์–ด์„œ Graph QL์ด ๋œ๊ฒƒ ๊ฐ™๋‹ค๊ณ ํ•จ.. Kakao Tech

์„œ๋ฒ„์ชฝ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. ๋ฆฌ์กธ๋ฒ„์—์„œ SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š”๊ฒƒ
  2. ORM์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ
  3. Prisma ์‚ฌ์šฉ. (๋™์ž‘๋ฐฉ์‹์€ ORM๊ณผ ๋น„์Šท)

1๋ฒˆ์˜ ๋‹จ์ ์€ ์ฟผ๋ฆฌ๊ฐ€ ๋ณดํ†ต ๋‹จ์ˆœ ์ŠคํŠธ๋ง์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ฐจ์›์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์›€.
2๋ฒˆ์€ ๋‹จ์ ์ด ์žˆ๋‹ค๊ธฐ ๋ณด๋‹ค๋Š” 3๋ฒˆ ์„ ํƒ์ง€๊ฐ€ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ธ ๋“ฏ ํ•จ.

Prisma๋Š” ์ฟผ๋ฆฌ ๋ฆฌ์กธ๋น™์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜์—ฌ ์ƒ๊ธฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.
Prisma๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์„œ๋ฒ„๋กœ ๋“ค์–ด์˜จ ์ฟผ๋ฆฌ๋ฅผ Prisma์— ์ „๋‹ฌํ•˜๊ณ , Prisma๋Š” ์ด๋ฅผ ๋ฐ›์•„ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž์ถ”์–ด ์ฟผ๋ฆฌ๋ฅผ ๋ฆฌ์กธ๋ธŒํ•˜๋Š” ์‹์œผ๋กœ ๋ฆฌ์กธ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Prisma Client ๋•๋ถ„์—, ๋ฆฌ์กธ๋ฒ„ ๊ตฌํ˜„์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ํ•œ๋‘ ์ค„๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ ๊ฐ„๋‹จ๋ช…๋ฃŒํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
velog ๋‹˜ ๋ธ”๋กœ๊ทธ - GraphQL - Node Tutorial - 05. Adding a Database

api ์„œ๋ฒ„์— Prisma Client๊ฐ€ ์žˆ๊ณ  ๋”ฐ๋กœ Prisma Server๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ž๋‹จ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•จ.


Prisma ์žฅ์  ์ •๋ฆฌ - ํผ์˜ด

  • GraphQL ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด์™€ DBMS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ , ORM ํด๋ผ์ด์–ธํŠธ์™€ ๋ชจ๋ธ, ๊ทธ๋ฆฌ๊ณ  Data Schema ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.
  • GraphQL ํ˜•์‹์˜ DataModel์„ ์ •์˜ํ•˜๋ฉด Prisma๊ฐ€ ์•Œ์•„์„œ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” DBMS์™€ ์–ธ์–ด์˜ ์ข…๋ฅ˜์— ๋งž๊ฒŒ ์‹ค์ œ DB ๋ฐฐํฌ๋ถ€ํ„ฐ, ํด๋ผ์ด์–ธํŠธ์™€ ๋ชจ๋ธ ๊ทธ๋ฆฌ๊ณ  ํƒ€์ž…์ •์˜๊นŒ์ง€ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ œ๊ณตํ•ด ์ค๋‹ˆ๋‹ค.
  • ์ž์ฒด ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‰ฌ์šด ๋ฐ์ดํ„ฐ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (๋น„๊ฐœ๋ฐœ์ž๋„ ์†์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์„ ์ •๋„.)

์ฐธ๊ณ  ์ž๋ฃŒ

๋” ์ฝ๊ณ  ์ •๋ฆฌ





2023

Flutter ๋ง›๋ณด๊ธฐ 1

3 ๋ถ„ ์†Œ์š”

์ง๋ฐฉ ๊ธฐ์ˆ ์ง€์›ํŒ€ ๊ธฐ์ˆ ๊ณต์œ  ์„ธ๋ฏธ๋‚˜ ์ค‘ ํ”Œ๋Ÿฌํ„ฐ๋ฅผ ์†Œ๊ฐœํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค

Back to Top ↑

2022

D3.js ์ฐจํŠธ ๊ฐœ๋ฐœ Hands on lab

5 ๋ถ„ ์†Œ์š”

์ง๋ฐฉ ๊ธฐ์ˆ ์ง€์›ํŒ€ ๊ธฐ์ˆ ๊ณต์œ  ์„ธ๋ฏธ๋‚˜ ์ค‘ D3.js๋ฅผ ์†Œ๊ฐœํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค

Back to Top ↑

2019

[Tutorial] Storybook๊ณผ Bit์„ ํ™œ์šฉํ•œ UI ์ปดํฌ๋„ŒํŠธ ๊ด€๋ฆฌ(Workflow)

1 ๋ถ„ ์†Œ์š”

ํšŒ์‚ฌ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์›์น™์„ SFC(Single File Component)์—์„œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ CDD(Component Driven Development)๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•ด Storybook๊ณผ Bit์„ ๋„์ž…ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์—ญํ• ์€ ...

[Workflow] ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์กฐ์ง์„ ์œ„ํ•œ ์›Œํฌํ”Œ๋กœ ์„ค๊ณ„

2 ๋ถ„ ์†Œ์š”

์ž‘์„ฑ ๋ฐฐ๊ฒฝ ํšŒ์‚ฌ์˜ ์ž‘์—…๊ตฌ์กฐ๋ฅผ ํŽ˜์ด์ง€ ์ค‘์‹ฌ ๊ฐœ๋ฐœ์—์„œ UI ์ปดํฌ๋„ŒํŠธ ์ค‘์‹ฌ ๊ฐœ๋ฐœ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ Workflow๋ฅผ ๊ฐœ์„ ํ• ๋งŒํ•œ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์•ผํ–ˆ๋‹ค. ํ์‡„๋ง ๊ธฐ๋ฐ˜์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ„ UI ๋ช…์„ธ์„œ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋Š” Storybook๊ณผ ๊ทธ๊ฒƒ์„ ๊ณต์œ ํ•  Verdaccio๋ผ๋Š” ๊ตฌ์ถ•ํ˜• NPM Pri...

[ESlint & Prettier] ๊ฐœ๋ฐœ ๊ด€์Šต ์„ค์ • in Visual Studio

1 ๋ถ„ ์†Œ์š”

ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž‘์—…ํ•˜๊ธฐ ์ „ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค ๊ฐ„์˜ ์ฝ”๋“œ ๊ทœ์น™์„ Eslint์™€ Prettier ์„ค์ •์„ ๋งž์ถฐ ๊ด€๋ฆฌํ•ด๊ฐ€๋Š” ๋ฐฉํ–ฅ์„ ์ •ํ–ˆ๋‹ค. ์•„์ง ํ˜‘์—…์„ ํ•  ๊ฒฝ์šฐ๋Š” ์—†์ง€๋งŒ ๋ฏธ๋ž˜์— ์ธ์ˆ˜์ธ๊ณ„ ๋ฐ›๊ฑฐ๋‚˜ ํ˜‘์—…์„ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ๊ด€์Šต์ด ๋‹ฌ๋ผ ๊ณ ์ƒํ•  ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์„ค์ •์€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉฐ ...

[CodingTest] 2019-10-26 SQL๋ฌธ์ œ

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

๊ณต๋ถ€๊ฒธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์‚ฌ์ดํŠธ์—์„œ ํ† ์š”์ผ ์˜ค์ „ 10์‹œ์— ๋ฐฑ์—”๋“œ ํฌ์ง€์…˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด์ค€๋‹ค๊ธฐ์— ์ฐธ์—ฌํ•ด๋ดค๋‹ค. SQL๋ฌธ์ œ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ ๋” ์ข‹์€ ๋‹ต์ด ์žˆ๋Š”๊ฒƒ ๊ฐ™์•„ ๋‚˜์ค‘์— ๊ธฐ๋กํ•ด๋‘๊ณ  ์ˆ˜์ •ํ•ด๋ณด๊ธฐ๋กœ ํ•œ๋‹ค.

Javascript ๊ฐœ๋… ์ •๋ฆฌ

2 ๋ถ„ ์†Œ์š”

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ ๋ถ€์กฑํ–ˆ๋˜ ๊ฐœ๋…์„ ๋‹ค์‹œ ์ •๋ฆฌ

[CodingTest] ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

1 ๋ถ„ ์†Œ์š”

๋ฌธ์ œ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ์ œ 1ํ•ญ๋ถ€ํ„ฐ ์ž…๋ ฅํ•œ ์ž์—ฐ์ˆ˜(N)๊นŒ์ง€์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ํ•ญ๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜์—ฌ๋ผ.

Javascript Skills

2 ๋ถ„ ์†Œ์š”

๊ฐ ๋ฐ˜๋ณต๋ฌธ์˜ ์šฉ๋„

[CodingTest] 2019 ์นด์นด์˜ค ์‹ ์ž… ๊ณต์ฑ„ 1์ฐจ - 2๋ฒˆ ์‹คํŒจ์œจ ๋ฌธ์ œ with Javascript

1 ๋ถ„ ์†Œ์š”

์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ๋งํฌ ์นด์นด์˜ค์˜ ์„ค๋ช… ๋ธ”๋กœ๊ทธ ๋‚˜์˜ ์ฒซ๋‹ต์•ˆ function solution(N, stages) { let st = stages, stats = []; for(let i=1;i<N+1;i++){ // n let selectedN...

[Syntax] ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ํŒŒ์ด์ฌ ๋ฌธ๋ฒ• ์ •๋ฆฌ

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

chaning comparison ํŒŒ์ด์ฌ์€ chaning comparison์ด๋ผ๋Š” ์‹ ๊ธฐํ•œ ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค. ์ฐธ๊ณ  if a < b and b < c : (...) ๋ผ๋Š” ๊ตฌ๋ฌธ์ด if a < b < c : (...) ์œผ๋กœ ์—ฐ์‚ฐ๋œ๋‹ค. ์ง๊ด€์ ์ธ ๋ฌธ๋ฒ•์ด ์ธ์ƒ์ . ...

[CodingTest] i๋ฅผ ์ œ์™ธํ•œ ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ๊ณฑ

1 ๋ถ„ ์†Œ์š”

๋ฌธ์ œ ์ •์ˆ˜ ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง€๋ฉด ์ธ๋ฑ์Šค i์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ์ด์™ธ์˜ ๋ชจ๋“  ๊ฐ’๋“ค์˜ ๊ณฑ์ธ ๋ฐฐ์—ด์„ ๊ตฌํ•˜์—ฌ๋ผ. ๋ณด๋„ˆ์Šค : ๋‚˜๋ˆ—์…ˆ์„ ์•ˆ์“ฐ๊ณ  ํ’€๊ธฐ

[DataType] Map & Set

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

Set vs Array - ๊ด€๋ จ๊ธฐ์‚ฌ Set ์œ ์ผ๊ฐ’๋“ค์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ• ๋•Œ(distinct) ์ง‘ํ•ฉ์˜ ๊ฐœ๋…์ด ํ•„์š”ํ• ๋•Œ(์ฐจ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ ๋“ฑ๋“ฑ ์ž์ฒด ๋ฉ”์„œ๋“œ๋“ค์ด ๋งŽ์Œ.) index๊ฐ€ ํ•„์š” ์—†์„๋•Œ Array์—์„œ ์ค‘๋ณต๊ฐ’์„ ์—†์•จ๋•Œ => ...

[CodingTest] ๋ฐฐ์—ด์˜ ๋‘ ๊ฐ’์„ ํ•ฉํ•˜์—ฌ k๊ฐ’ ๋งŒ๋“ค๊ธฐ

4 ๋ถ„ ์†Œ์š”

๋ฌธ์ œ list๋ผ๋Š” ํ–‰๋ ฌ๊ณผ k๋ผ๋Š” ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง. list์˜ ๋‘ ๊ฐ’์„ ํ•ฉํ•˜์—ฌ k๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•ด๋ผ. ๋ณด๋„ˆ์Šค : ํ•œ์ค„ ํ‘œ๊ธฐ

[CodingTest] ๋งค์ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - 2019-03-26

์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

๋ฌธ์ œ ์ •์ˆ˜ ๋ฐฐ์—ด(int array)๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ฐ€์žฅ ํฐ ์ด์–ด์ง€๋Š” ์›์†Œ๋“ค์˜ ํ•ฉ์„ ๊ตฌํ•˜์‹œ์˜ค. ๋‹จ, ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n).

[CodingTest] Algospot - Anagram ๋ฌธ์ œ

2 ๋ถ„ ์†Œ์š”

<!โ€“ ## ์„ค๋ช… ๊ฐ ๋ฌธ์ž์—ด์˜ ์•ŒํŒŒ๋ฒณ์„ ์žฌ๋ฐฐ์—ดํ•˜์˜€์„๋•Œ ๊ฐ™์€ ๋‹จ์–ด๊ฐ€ ๋˜๋Š” ๋‹จ์–ด๋“ค. ์˜ˆ์‹œ tab - bat github - hbuitg

[CodingTest] 2019 ์นด์นด์˜ค ์‹ ์ž… ๊ณต์ฑ„ 1์ฐจ - 1๋ฒˆ ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ๋ฌธ์ œ with Javascript

1 ๋ถ„ ์†Œ์š”

์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ ๋งํฌ ์นด์นด์˜ค์˜ ์„ค๋ช… ๋ธ”๋กœ๊ทธ ๋‚˜์˜ ๋‹ต์•ˆ ```javascript function solution(record) { let accounts = [], events = [], answer = []; function setEn...

Back to Top ↑

2018

SGIS-shpToGeojson

1 ๋ถ„ ์†Œ์š”

SGIS์—์„œ ๋ฐ›์€ ์ง€๋„๋ฐ์ดํ„ฐ(.shp)๋ฅผ geojson์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—… ๋‚ด์šฉ

Back to Top ↑