Tag Hoister! - codeport/scala GitHub Wiki

์‚ฌ์šฉ์ž tag ๋ถ„์„

์ œ๊ณต๋œ ์‚ฌ์šฉ์ž์˜ ๋ถ๋งˆํฌ ์ •๋ณด ์ค‘ tag๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์œ ์˜๋ฏธํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋‚ด์šฉ์œผ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •

์ค€๋น„ํ•  ๋‚ด์šฉ

๋‹ค์Œ์˜ ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜์—ฌ JSON ๋ฌธ์ž์—ด์„ ํŒจํ„ด ๋งค์นญํ•˜์—ฌ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์Šต/์ค€๋น„ํ•œ๋‹ค.

ํ™˜๊ฒฝ ์ค€๋น„

  1. Scala Project Template ๊ธฐ๋ฐ˜์˜ ํ™˜๊ฒฝ
    • github์˜ scala project template์„ ์ฐธ๊ณ 
    • ์ €๋ฒˆ ์ฃผ์— ๋‚ด์šฉ์ด ์‚ด์ง ์—…๋ฐ์ดํŠธ ๋จ
      • scala 2.9.2 ๊ธฐ์ค€์œผ๋กœ ๋ฒ„์ „์—…
      • JUnit 4.9๋ฅผ ์‚ฌ์šฉ
      • sbt ์˜์กด์„ฑ ๊ด€๋ฆฌ์‹œ %%๋ฅผ ์ด์šฉํ•œ ๋ฒ„์ „๋ช… ์ž๋™์ถ”๊ฐ€ ํ™œ์šฉ
        • ๊ธฐ์กด ๋ฐฉ์‹: libraryDependencies += "org.scalaz" % "scalaz-core_2.9.2" % "6.0.4"
        • %% ํ™œ์šฉ: libraryDependencies += "org.scalaz" %% "scalaz-core" % "6.0.4"
    • ์ด์ „์— ์„ค์ •๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋ฌด๊ด€
    • README.md์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ํ•œ ๋ฒˆ ์ฐธ๊ณ ์‚ผ์•„ ์ฝ์–ด๋ณผ ๊ฒƒ. ํ”„๋กœ์ ํŠธ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ ์›๊ฒฉ์ง€/๋ธŒ๋žœ์น˜๋ฅผ ๋ณ„๋„๋กœ ๋ถ„๋ฆฌํ•ด ํ…œํ”Œ๋ฆฟ์ด ์—…๋ฐ์ดํŠธ ๋˜๋ฉด ์ด๋ฅผ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ˆ๋‚ดํ•จ.

ํŒจํ„ด๋งค์นญ์„ ์ด์šฉํ•œ JSON ๋ฌธ์ž์—ด ๋‚ด ํƒœ๊ทธ ์ •๋ณด ๋ถ„์„

  1. JSON ์ •๋ณด parse (ํŒจํ„ด๋งค์นญ ํ™œ์šฉ)
    • bookmark๋Š” ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋œ๋‹ค.

        {
            "userid": "nephilim",
            "bookmark-href": "http://stackoverflow.com/questions/927911/how-can-i-hit-my-friend-outsider-legally",
            "tags": ["stackoverflow","json","lift", "scala"]
        }
      
    • ํŒจํ„ด ๋งค์นญ์„ ํ™œ์šฉํ•˜์—ฌ JSON ๋ฌธ์ž์—ด์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•œ๋‹ค.

        match jsonBookmark {
            case Bookmark(userid,href,tags) => {
                // trie์— tag๋ฅผ key 
            }
        }
      

๋ถ„์„ ๋ชฉํ‘œ

๋‚ด์šฉ์ด ์œ ์‚ฌํ•œ ์„œ๋กœ ๋‹ค๋ฅธ URL์„ ์ถ”์ถœํ•œ๋‹ค.

  • ์œ ์‚ฌ๋„๋Š” ๊ฐ€์นญ not the same but similar(์ดํ•˜, NSBS)๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • NBNS๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
      1. ๊ณตํ†ต ํƒœ๊ทธ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ์‚ฌ์ดํŠธ์˜ URL๋“ค์€ ์„œ๋กœ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
      2. ๋‹จ, URL์ด ์™„์ „ํžˆ ๋™์ผํ•œ ๊ฒฝ์šฐ๋Š” not the same ์กฐ๊ฑด์— ์˜ํ•ด ์ œ์™ธํ•œ๋‹ค.
        • ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•˜๊ธฐ ์œ„ํ•ด URL ๋ฌธ์ž์—ด์ด ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋ฉด ๋™์ผ ์‚ฌ์ดํŠธ๋กœ ๊ฐ„์ฃผ
  • ์ „์ฒด ๋ถ๋งˆํฌ๋ฅผ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ ํƒœ๊ทธ์˜ ์ข…๋ฅ˜๋Š” URL ๊ฐœ์ˆ˜์— ๋น„ํ•ด ํ˜„์ €ํžˆ ๋‚ฎ์€ ๋น„์œจ์„ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ

  • pis 24์žฅ์˜ ๋‹ค์Œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์‹ค์Šตํ•ด์˜ค๋ฉด ๋”ํ•  ๋‚˜์œ„ ์—†์ด ์ข‹๋‹ค
    1. Hash Trie
    2. Red-Black Trees
    3. Bit Set
    4. Array Sequence
    5. Array Stack

JSON ์ž๋ฃŒ

  • ๋‹ค์Œ JSON์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
  • ์ฐธ๊ณ 
    • bookmark์˜ ์‚ฌ์šฉ์ž๋Š” nephilim, kingori ๋‘ ๋ช…์ด๋‹ค.
    • JSON ์ž๋ฃŒ์˜ ํ˜•์‹์„ ๋ฐ”๊ฟ”๋„ ๋œ๋‹ค. ์•ž๋’ค์— [,]๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋˜๊ฐ€. json๊ฐ์ฒด ์‚ฌ์ด์˜ ,๋ฅผ ์—†์• ๋Š” ๋“ฑ์˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์‹ค์ œ bookmark ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฏ€๋กœ reality๊ฐ€ ๋”ํ•ด์ง„ ๋งŒํผ ์ถ”์ถœ ๊ฒฐ๊ณผ๋Š” ๊ทธ๋ฆฌ ํ›Œ๋ฅญํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค

์‚ฌ์ดํŠธ์—์„œ Tag ์ˆ˜์ง‘