ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ํ‹ฐ์Šคํ† ๋ฆฌ์— ๋ชฉ์ฐจ (ToC) ๋„ฃ๊ธฐ + ์ˆ˜์ •ํ•˜๊ธฐ
    Review & How-to 2023. 1. 21. 01:29
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ•“ 5 mins read

    ์—„์—ฐํžˆ ํ‹ฐ์Šคํ† ๋ฆฌ ์ด์šฉํ›„๊ธฐ..?๋‹ˆ๊นŒ ๋ฆฌ๋ทฐ ์นดํ…Œ๊ณ ๋ฆฌ์— ๋„ฃ์–ด๋ดค์Šต๋‹ˆ๋‹ค.

    ๋ชฉ์ฐจ- ToC (Table of Contents) ์•„๋‹ˆ ์ด๋Ÿฐ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด.. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์—†๋‹ค๊ณ ..?

    github pages ์“ฐ๋‹ค๊ฐ€ pro ๊ณ„์ • ๋งŒ๋ฃŒ ๋ผ์„œ ์ด์ฐธ์— ์šฉ๋Ÿ‰๋„ ๋„‰๋„‰ํ•˜๊ณ  ์˜ค๋ž˜์ „๋ถ€ํ„ฐ ์“ฐ๋˜ ํ‹ฐ์Šคํ† ๋ฆฌ๋กœ ๊ฐˆ์•„ํƒ€์•ผ์ง€ ํ•˜๊ณ  ์˜ฎ๊ฒผ๋Š”๋ฐ,

    15๋…„๋„ ๋„˜์€ ๋Œ€ํ•œ๋ฏผ๊ตญ ๋Œ€ํ‘œโค๏ธ ๋ธ”๋กœ๊ทธ ํ”Œ๋žซํผ์—
    ๋ชฉ.์ฐจ. ๊ธฐ.๋Šฅ.๋„. ์—†.๋„ค.์š”. (๋ณด๊ณ  ์žˆ๋‚˜ ํ‹ฐ์Šคํ† ๋ฆฌ??)

    ๊ฒ€์ƒ‰ ์ข€ ํ•ด๋ณด๋‹ˆ Tocbot ์„ ๋งŽ์ด๋“ค ์ด์šฉํ•˜์‹œ๋Š” ๋“ฏํ•˜๋”๊ตฐ์š”.
    ๋งˆ์นจ jekyll + github pages ์กฐํ•ฉ์—์„œ๋„ ์“ฐ๋˜ tocbot ๋ชจ๋“ˆ์ธ ๋ฐ๋‹ค, HTML ์Šคํ‚จ ํŽธ์ง‘์„ ์ œ๊ณตํ•˜๋Š” ํ‹ฐ์Šคํ† ๋ฆฌ๋ผ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€์ ธ์™€์„œ ๋ถ™์—ฌ ๋ดค์Šต๋‹ˆ๋‹ค.

    ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์ ์šฉ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. (๊ฐ„๋‹จ? ํ•œ ๊ฒƒ ๊ฐ™์•„์š”)

    1. ์†Œ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ

    Tocbot ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ์™€ CSS๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ ํŽธ์ง‘ > HTML ์ˆ˜์ •์—์„œ <head> ํƒœ๊ทธ ์•ˆ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ์ค„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. 

    <!-- tocbot -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.css">

    2. ๋ชฉ์ฐจ๋ฅผ ์‚ฝ์ž…ํ•  ๊ณณ ์ง€์ •ํ•˜๊ธฐ

    Tocbot์€ ๋™์ ์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ DOM parsing ํ•ด์„œ ์ƒ์„ฑํ•˜๋ฏ€๋กœ, ๋ฏธ๋ฆฌ ๋ชฉ์ฐจ๊ฐ€ ์‚ฝ์ž…๋  ์œ„์น˜์— <div>๋ฅผ ์‹ฌ์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    CSS์ƒ์—์„œ ์ƒ๋Œ€์  ์œ„์น˜๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‹ฐ์Šคํ† ๋ฆฌ์—์„œ๋Š” ๊ธ€ ๋ณธ๋ฌธ์ด ์‹œ์ž‘ํ•˜๋Š” ๊ณณ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

    <div class="toc"></div> <!-- ์ผ๋ฐ˜ -->
    <div class="toc hidden-xs hidden-sm"></div> <!-- ํƒœ๋ธ”๋ฆฟ, ๋ชจ๋ฐ”์ผ์—์„  ์ˆจ๊ธฐ๊ธฐ -->
    • ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋งŒ ์‚ฌ์šฉ
    • ๋ชจ๋ฐ”์ผ์ด๋‚˜ ํƒœ๋ธ”๋ฆฟ์—์„œ๋Š” ํ™”๋ฉด์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์œผ๋‹ˆ ๋ชฉ์ฐจ๋ฅผ ์—†์• ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‘ ๋ฒˆ์งธ ์ค„์„ ์‚ฌ์šฉ

    ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์Šคํ‚จ/์ปค์Šคํ…€ ์Šคํ‚จ์˜ HTML ๋งˆ๋‹ค ๋‹ค๋ฅผ ํ…๋ฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ์Šคํ‚จ์ด๋ผ๋ฉด <s_permalink_article_rep> ์ด๋ผ๋Š” ํƒœ๊ทธ๋กœ ์ผ€์ด์Šค๋ณ„ ๋ณธ๋ฌธ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ํŒ. ๋ˆˆ์œผ๋กœ HTML ์†Œ์Šค ์‰ฝ๊ฒŒ ํƒ์ƒ‰

    ๋ชฉ์ฐจ ์‚ฝ์ž…ํ•  ์œ„์น˜ ์ฐพ๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ์•ž์œผ๋กœ ์–ธ๊ธ‰ํ• , "์‚ฌ์šฉ ์ค‘์ธ ์Šคํ‚จ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„"์„ ์ฐพ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•๋„ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค. (๊ผญ ํ‹ฐ์Šคํ† ๋ฆฌ๊ฐ€ ์•„๋‹ˆ์–ด๋„ ๋‚ด๊ฐ€ ๋งŒ๋“ค์ง€ ์•Š์€ HTML์„ ํŽธ์ง‘ํ•  ๋•Œ, ์†Œ์Šค ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.)

    ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ F12๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ์†Œ์Šค ๋ณด๊ธฐ ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
    (๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฉด ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์“ฐ์„ธ์š”.. ๋‹จ์ ๋„ ๋งŽ์ง€๋งŒ, ์žฅ์ ์ด ๋” ๋งŽ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž)  

    ์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰ ๋™๊ทธ๋ผ๋ฏธ๋กœ ํ‘œ์‹œํ•ด๋‘” ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜๋ฉด UI ๋‚ด์—์„œ ๋งˆ์šฐ์Šค๊ฐ€ ์˜ฌ๋ ค์ง„ ์œ„์น˜์˜ ์†Œ์Šค element ๊ฐ’์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๋นจ๊ฐ„ ๋™๊ทธ๋ผ๋ฏธ์นœ ์•„์ด์ฝ˜์„ ํด๋ฆญ

    ์ด์ œ ๋ณธ๋ฌธ ์ „์ฒด๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” <div>๋ฅผ ์ฐพ์•„์ฃผ๊ณ  ๊ทธ ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    article_content ๊ฒ ๋„ค์š”

    3. Toc ๋™์ž‘ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€

    ์ด์ œ body ํƒœ๊ทธ์— ๋“ค์–ด๊ฐˆ Tocbot ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

    ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ".article_view"์— ํ•ด๋‹นํ•˜๋Š” ๋ช…์นญ์€ ๋ชฉ์ฐจ๋ฅผ ํ˜•์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์ด ๋˜๋Š” ๋ณธ๋ฌธ ํƒœ๊ทธ์ธ๋ฐ, ์Šคํ‚จ๋งˆ๋‹ค class๋‚˜ id ๋ช…์ด ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ ๋ณธ์ธ์˜ ์Šคํ‚จ์—์„œ content ๋‚ด์ง€๋Š” article ํƒœ๊ทธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›Œ ์ค์‹œ๋‹ค.
    (Letter ์Šคํ‚จ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ)

    <script>
        let content = document.querySelector('.article_view')
        let headings = content.querySelectorAll('h1, h2, h3, h4, h5, h6, h7')
        let headingMap = {}
    
        Array.prototype.forEach.call(headings, function (heading) {
            let id = heading.id ? heading.id : heading.textContent.trim().toLowerCase()
                            .split(' ').join('-').replace(/[\!\@\#\$\%\^\&\*\(\):]/ig, '')
            headingMap[id] = !isNaN(headingMap[id]) ? ++headingMap[id] : 0
            if (headingMap[id]) {
                heading.id = id + '-' + headingMap[id]
            } else {
                heading.id = id
            }
        })
    
        tocbot.init({
            tocSelector: '.toc',
            contentSelector: '.article_view',
            headingSelector:'h1, h2, h3',
            hasInnerContainers: false,
            collapseDepth: 3
        });
    
        $(document).ready(function(){
            $('.toc').addClass('toc-absolute');
    
            let toc_top = $('.toc').offset().top - 165;
            $(window).scroll(function() {
            if ($(this).scrollTop() >= toc_top) {
                $('.toc').addClass('toc-fixed');
                $('.toc').removeClass('toc-absolute');
            } else {
                $('.toc').addClass('toc-absolute');
                $('.toc').removeClass('toc-fixed');
            }
        });
    });
    </script>
    </s_t3>
    </body>
    • ์ทจํ–ฅ๊ป ์˜ต์…˜์„ ๋„ฃ๊ณ  ๋นผ๊ณ  ์ˆ˜์ •ํ•˜์‹ค ์ˆ˜ ์žˆ๊ฒŒ ๊ฐ„๋‹จํžˆ๋งŒ ๋ถ€์—ฐ์„ค๋ช…์„ ํ•˜๋ฉด,
      • Array.. ๋Š” heading์— id ์†์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ
      • tocbot.init ๋‚ด์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์˜ต์…˜์„ ์ถ”๊ฐ€๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ƒ์„ธ ์˜ต์…˜์€ ์—ฌ๊ธฐ์—์„œ
        https://tscanlin.github.io/tocbot/#options
      • ์ฐธ๊ณ ๋กœ collapseDepth ๋Š” h3 ๋ณด๋‹ค ํ•˜์œ„ ๋ชฉ์ฐจ๋งŒ ์ˆจ๊ฒผ๋‹ค๊ฐ€ ํŽผ์น˜๋Š” ๊ธฐ๋Šฅ์ธ๋ฐ, ๊ธฐ๋ณธ ๊ฐ’์€ 0์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ, h1 ์™ธ์—” ์ „๋ถ€ ์ ‘ํžˆ๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ์„ค์ •์ž…๋‹ˆ๋‹ค. ๋ฉ”๋‰ด๊ฐ€ ์•ˆ ๋ณด์ด๋‹ค๊ฐ€ ์Šคํฌ๋กค์ด ํ•ด๋‹น ์ง€์ ๊นŒ์ง€ ๊ฐ€๋ฉด ํ•˜์œ„ ๋ชฉ์ฐจ๊ฐ€ ํŽผ์ณ์ง€๋Š” ๊ฒƒ์ด์ฃ .

    4. CSS ์ถ”๊ฐ€

    ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ์Šคํ‚จ์— ๋งž๊ฒŒ ์ ๋‹นํ•œ ์œ„์น˜๋‚˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ด ์ค๋‹ˆ๋‹ค.
    (์Šคํ‚จ ํŽธ์ง‘ CSS์— ์ ๋‹นํžˆ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.)

    ๋ชฉ์ฐจ์˜ ๊ฐ€๋กœ ์œ„์น˜๋Š” .toc.right์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์Šคํ‚จ์— ๋”ฐ๋ผ ๋ชฉ์ฐจ๊ฐ€ ๋ณธ๋ฌธ ์œ„๋กœ ์นจ๋ฒ”ํ•œ๋‹ค๋ฉด, ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Letter๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ขŒ์šฐ๋กœ ์—ฌ๋ฐฑ์ด ๊ด‘ํ™œํ•ด์„œ... ๊ทธ๋ƒฅ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค)

    /*tocbot*/
    .toc-absolute {
      position: absolute;
      margin-top:165px;
    }
    .toc-fixed {
      position: fixed;
      top: 165px;
    }
    .toc {
      right: calc((100% - 850px) / 2 - 300px);
      width: 250px;
      padding: 10px;
      box-sizing: border-box;
    }
    .toc-list {
      margin-top: 10px !important;
      font-size: 0.9em;
    }
    .toc > .toc-list li {
      margin-bottom: 10px;
    }
    .toc > .toc-list li:last-child {
      margin-bottom: 0;
    }
    .toc > .toc-list li a {
    	text-decoration: none;
    }

     

    ์™„์„ฑ๋„

    ์ž˜ ์ ์šฉ์ด ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ฐจ๊ฐ€ ์Šคํฌ๋กค๊ณผ ํ•จ๊ป˜ ๋”ฐ๋ผ๋‹ค๋‹™๋‹ˆ๋‹ค.

     

    # (๋ณด๋„ˆ์Šค) ๋ชฉ์ฐจ ํ—ค๋” ์ˆ˜์ •ํ•˜๊ธฐ

    ๋ณธ๋ฌธ์— ์ œ๋ชฉ(ํ—ค๋”)๋ฅผ ๋‹ฌ๋ฉด (โฌ†๏ธ ์š” ๋…€์„ ์ฒ˜๋Ÿผ์š”) ์ž๋™์œผ๋กœ  TOC ์ƒ์„ฑ ๋˜๋Š”๊ฒƒ ๊นŒ์ง„ ํ–ˆ๋Š”๋ฐ์š”.

    ์ œ๋ชฉ์„ ํ•ญ์ƒ ๋ฐ‹๋ฐ‹ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ์•ž์— "| ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค", "# ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค" ํ˜น์€ "[๋ง๋จธ๋ฆฌ] ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค" ์™€ ๊ฐ™์ด ํŠน์ • ํŒจํ„ด์ด๋‚˜ ์Šคํƒ€์ผ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ๋„ ์žˆ๊ฒ ์ฃ ?

    ์•„๋‹ˆ๋ฉด, ์—ญ์œผ๋กœ ์ œ๋ชฉ์—๋Š” ๊ทธ๋ƒฅ ๋ฌธ๊ตฌ๋งŒ ์ž‘์„ฑํ•˜๊ณ , ๋ชฉ์ฐจ๋ฅผ ์ƒ์„ฑํ• ๋•Œ ๋ชฉ์ฐจ ๋งํฌ์— ์Šคํƒ€์ผ์„ ์ž…ํžˆ๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”.

    ์˜ˆ์‹œ) "์ œ๋ชฉ์ž…๋‹ˆ๋‹ค" -> "โšฝ๏ธ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค" 

    ์ด๋ ‡๊ฒŒ ๋ณธ๋ฌธ์— ์ž‘์„ฑ๋œ ํ—ค๋”์™€ ์ž๋™ ์ƒ์„ฑ๋˜๋Š” TOC์˜ ๋ฌธ๊ตฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ณ  ์‹ถ์„๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด toc ์ดˆ๊ธฐํ™” ํ•จ์ˆ˜์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ callback ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ถ”๊ฐ€ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    tocbot.init({
        tocSelector: '.toc',
        contentSelector: '.article_view',
        headingSelector:'h1, h2, h3',
        hasInnerContainers: false,
        collapseDepth: 3,
        ignoreHiddenElements: true,
        headingLabelCallback: function (heading) {
            return heading.trim().replace(/^#+\s?/, '');
        }
    });

    ์œ„์˜ "๋™์ž‘ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€"์—์„œ ํŽธ์ง‘ํ•œ๊ฒƒ ์ฒ˜๋Ÿผ ์Šคํ‚จํŽธ์ง‘ > HTML ํŽธ์ง‘ > HTML ์†Œ์Šค๋ณด๊ธฐ์—์„œ ๋งจ ์•„๋ž˜์— tocbot.init() ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ•˜๋Š”๊ณณ์— ์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด headingLabelCallback ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

    ์ €๋Š” ๋ฌธ์ž์—ด heading์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„์„œ, ๊ณต๋ฐฑ ์ œ๊ฑฐํ›„, heading ์•ž์— ๋ถ™์€ #๊ณผ ๊ณต๋ฐฑ์„ ์ „๋ถ€ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ด callback ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ๋ฌธ์ž์—ด๋งŒ ๋ฆฌํ„ดํ•˜๋ฉด ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ณธ๋ฌธ์˜ ํ—ค๋”๋ฅผ ๋ฐ›์•„์„œ, TOC์— ์‹ค์ œ ๋„ฃ์„ ํ…์ŠคํŠธ๋ฅผ ์ถœ๋ ฅ ํ•ด์ฃผ๋Š”๊ฒƒ์ด์ฃ . 

    ์œ„์— ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. (link)

    ## ์ด ์ œ๊ฑฐ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

     


    ์ฐธ๊ณ  ๋งํฌ

     

    ๋ฐ˜์‘ํ˜•

    'Review & How-to' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    ์„œ์šธ๋Œ€ํ•™๊ต ๋ผ์ฟ ์น˜๋‚˜ ์˜ˆ์‹์žฅ ํ›„๊ธฐ  (0) 2018.01.20

    ๋Œ“๊ธ€

Designed by naubull2.