[NeoVim] Bufferline, Statusline, Scrollbar ๊ตฌ์„ฑ

@zunioneยท November 04, 2025 ยท 7 min read

๐Ÿš€ ๋“ค์–ด๊ฐ€๋ฉฐ

ํ™”๋ฉด UI ๊ตฌ์„ฑ์„ ๋งˆ๋ฌด๋ฆฌํ•  ์‹œ๊ฐ„์ด๋‹ค. ์•„์ง์€ ์ฝ”๋“œ ํ™”๋ฉด๊ณผ ํŒŒ์ผ ํŠธ๋ฆฌ๋ฐ–์— ์—†์–ด์„œ ๋งŽ์ด ๋ถˆํŽธ๊ฐ์ด ๋А๊ปด์งˆ ํ…๋ฐ, ์ด์ œ ์ •๋ง CUI๊ฐ€ ๋ญ”์ง€ ๋ณผ ์ˆ˜ ์žˆ๋‹ค ใ…Žใ…Ž

Bufferline์€ ๋งจ ์œ„์— ๋‚ด๊ฐ€ ์—ด์–ด๋†“์€ ํŒŒ์ผ ๋ชฉ๋ก์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๊ณ , statusline์€ ๋งจ ๋ฐ‘์— ๊ฐ์ข… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๐Ÿ“‘ Bufferline: barbar.nvim

Bufferline์ด ๋ณด์ด๊ฒŒ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ๋Š” ํฌ๊ฒŒ bufferline.nvim๊ณผ barbar.nvim์ด ์žˆ๋‹ค. bufferline.nvim์ด ์ข€ ๋” ๋ณดํŽธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์ž์œ ๋กœ์šด๋ฐ, barbar.nvim์€ ๋‹จ์ถ•์–ด๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ฒ„ํผ ๊ฐ„ ์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์–ด barbar.nvim์„ ์„ ํƒํ–ˆ๋‹ค.

barbar.nvim Github(ํด๋ฆญ)์˜ README์— Lazy๋ฅผ ์‚ฌ์šฉํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€ ์žˆ๋‹ค.

-- [[ lua/plugins/barbar.lua ]]

require('lazy').setup {
  {'romgrk/barbar.nvim',
    dependencies = {
      'lewis6991/gitsigns.nvim', -- OPTIONAL: for git status
      'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons
    },
    init = function() vim.g.barbar_auto_setup = false end,
    opts = {
      -- lazy.nvim will automatically call setup for you. put your options here, anything missing will use the default:
      -- animation = true,
      -- insert_at_start = true,
      -- โ€ฆetc.
    },
    version = '^1.0.0', -- optional: only update when a new 1.x version is released
  },
}

๊ฐœ์ธ ์„ค์ • ์ „์ฒด

๋‚˜์˜ barbar ํ”Œ๋Ÿฌ๊ทธ์ธ ์ „์ฒด ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

return {
  'romgrk/barbar.nvim',
  dependencies = {
    'lewis6991/gitsigns.nvim', -- OPTIONAL: for git status
    'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons
  },
  init = function() vim.g.barbar_auto_setup = false end,
  opts = {
    icons = {
      separator = { left = 'โ”‚', right = '' },
      inactive = { separator = { left = 'โ”‚', right = '' } },
    },

    -- Sets the maximum padding width with which to surround each tab
    maximum_padding = 1,

    -- Sets the minimum padding width with which to surround each tab
    minimum_padding = 1,

    -- Set the filetypes which barbar will offset itself for
    sidebar_filetypes = {
      ['neo-tree'] = { event = 'BufWipeout' },
    },
  },

  config = function(_, opts)
    -- 1. ๋จผ์ € setup ์‹คํ–‰
    require('barbar').setup(opts)

    -- 2. ์ƒ‰์ƒ ๋ฎ์–ด์“ฐ๊ธฐ
    -- ์ƒ‰์ƒ ์„ค์ •
    local colors = {
      bg = '#1f1f1f',
      fg = '#ffffff',
      blue = '#51afef',
      orange = '#FF8800',
      gray = '#5c6370',
    }

    -- ํ˜„์žฌ ๋ฒ„ํผ (ํ™œ์„ฑ)
    vim.api.nvim_set_hl(0, 'BufferCurrent', { fg = colors.fg, bg = colors.bg, bold = true })
    vim.api.nvim_set_hl(0, 'BufferCurrentMod', { fg = colors.orange, bg = colors.bg })

    -- ๋น„ํ™œ์„ฑ ๋ฒ„ํผ
    vim.api.nvim_set_hl(0, 'BufferInactive', { fg = colors.gray, bg = '#181818' })
    vim.api.nvim_set_hl(0, 'BufferInactiveMod', { fg = colors.orange, bg = '#181818' })

    -- ํƒญ๋ผ์ธ ๋ฐฐ๊ฒฝ
    vim.api.nvim_set_hl(0, 'BufferTabpageFill', { bg = '#181818' })

    -- ๊ตฌ๋ถ„์„ 
    vim.api.nvim_set_hl(0, 'BufferCurrentSign', { fg = colors.blue, bg = colors.bg })
    vim.api.nvim_set_hl(0, 'BufferInactiveSign', { fg = '#3e4452', bg = '#181818' })
  end,

  version = '^1.9.0', -- optional: only update when a new 1.x version is released
}

๊ตฌ๋ถ„์„ (Separator) ์„ค์ •

๋ฒ„ํผ ๊ฐ„์˜ ๊ตฌ๋ถ„์„  ๋ฌธ์ž ๊ธฐ๋ณธ ์„ค์ •์ด '์™ผ์ชฝ ์ •๋ ฌ๋œ ์„ธ๋กœ์„ '์ธ๋ฐ, ํŒŒ์ผ ํŠธ๋ฆฌ์™€ ์ฝ”๋“œ ํ™”๋ฉด ๋ถ„๋ฆฌ์„ ๊ณผ ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚˜ ๋ณด๊ธฐ ์ข‹์ง€ ์•Š์•˜๋‹ค ๐Ÿ˜–

'์ค‘์•™ ์ •๋ ฌ๋œ, ๋” ์–‡์€ ์„ธ๋กœ์„ '์œผ๋กœ ๊ตฌ๋ถ„์„ ์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ๋‹ค.

icons = {
  separator = { left = 'โ”‚', right = '' },
  inactive = { separator = { left = 'โ”‚', right = '' } },
}

๋ฒ„ํผ๊ฐ€ ์„ ํƒ๋˜์–ด ์žˆ์„ ๋•Œ(separator)์™€ ์„ ํƒ๋˜์ง€ ์•Š์•˜์„ ๋•Œ(inactive-separator)๋ฅผ ๊ฐ๊ฐ ์„ค์ •ํ•ด์•ผ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋œ๋‹ค.

ํŒจ๋”ฉ(Padding) ์„ค์ •

๊ณต๊ฐ„์ด ์ถฉ๋ถ„ํ•  ๊ฒฝ์šฐ ๋ฒ„ํผ ํฌ๊ธฐ๊ฐ€ ๊ฝค ์ปค์ง€๋Š”๋ฐ, ์—ฌ๋ฐฑ์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋‹ˆ ๋ณด๊ธฐ ์ข‹์ง€ ์•Š์•„์„œ ๊ฐ ๋ฒ„ํผ ํƒญ ์–‘์˜†์˜ ์—ฌ๋ฐฑ์„ 1๋กœ ๊ณ ์ •ํ–ˆ๋‹ค.

maximum_padding = 1,
minimum_padding = 1,

์‚ฌ์ด๋“œ๋ฐ” ์˜คํ”„์…‹ ์„ค์ •

ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ ๊ฐ™์€ ์‚ฌ์ด๋“œ๋ฐ”๊ฐ€ ์—ด๋ฆด ๋•Œ ๋ฒ„ํผ๋ผ์ธ์„ ์ž๋™์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

sidebar_filetypes = {
  ['neo-tree'] = { event = 'BufWipeout' },
}

nvim-tree ๋“ฑ ๋‹ค๋ฅธ ํŒŒ์ผ ํŠธ๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์˜คํ”„์…‹ ์„ค์ •๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฆฌ๋“œ๋ฏธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

sidebar_filetypes = {
  NvimTree = true,
  undotree = { text = 'undotree' },
  Outline = { event = 'BufWinLeave', text = 'symbols-outline' },
}

์ƒ‰์ƒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

config ํ•จ์ˆ˜์—์„œ highlight ๊ทธ๋ฃน์„ ์ง์ ‘ ์„ค์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ์ƒ‰์ƒ ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

local colors = {
  bg = '#1f1f1f',      -- ํ™œ์„ฑ ๋ฒ„ํผ ๋ฐฐ๊ฒฝ
  fg = '#ffffff',      -- ํ™œ์„ฑ ๋ฒ„ํผ ํ…์ŠคํŠธ
  blue = '#51afef',    -- ๊ตฌ๋ถ„์„  ๊ฐ•์กฐ์ƒ‰
  orange = '#FF8800',  -- ์ˆ˜์ • ์ƒํƒœ ํ‘œ์‹œ
  gray = '#5c6370',    -- ๋น„ํ™œ์„ฑ ํ…์ŠคํŠธ
}

VSCode ํ…Œ๋งˆ๊ฐ€ barbar ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ #181818 ๋“ฑ์˜ ์ƒ‰์ƒ์„ ์ž„์˜ ์ ์šฉํ–ˆ๋‹ค.

-- ํ™œ์„ฑ ๋ฒ„ํผ
vim.api.nvim_set_hl(0, 'BufferCurrent', { fg = colors.fg, bg = colors.bg, bold = true })
vim.api.nvim_set_hl(0, 'BufferCurrentMod', { fg = colors.orange, bg = colors.bg })
vim.api.nvim_set_hl(0, 'BufferCurrentSign', { fg = colors.blue, bg = colors.bg })

-- ๋น„ํ™œ์„ฑ ๋ฒ„ํผ
vim.api.nvim_set_hl(0, 'BufferInactive', { fg = colors.gray, bg = '#181818' })
vim.api.nvim_set_hl(0, 'BufferInactiveMod', { fg = colors.orange, bg = '#181818' })
vim.api.nvim_set_hl(0, 'BufferInactiveSign', { fg = '#3e4452', bg = '#181818' })

-- ํƒญ๋ผ์ธ ๋ฐฐ๊ฒฝ
vim.api.nvim_set_hl(0, 'BufferTabpageFill', { bg = '#181818' })

์ƒ‰์ƒ ์ ์šฉ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ˆ˜์ •์‚ฌํ•ญ์ด ์•„์ง ์ €์žฅ๋˜์ง€ ์•Š์€ ๋ฒ„ํผ๋Š” ์˜ค๋ Œ์ง€์ƒ‰ ๊ธ€์”จ
  • ํ™œ์„ฑ ๋ฒ„ํผ๋Š” ์–ด๋‘์šด ํšŒ์ƒ‰ (์ฝ”๋“œ ์Šค๋‹ˆํŽซ๊ณผ ๊ฐ™์€ ์ƒ‰)
  • ๋น„ํ™œ์„ฑ ๋ฒ„ํผ๋Š” ๊ฒ€์€์ƒ‰ (ํŒŒ์ผ ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ์ƒ‰)

๐Ÿ’ซ Statusline: lualine

Statusline์€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” lualine(ํด๋ฆญ)์œผ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” VSCode์™€ ๊ฐ€์žฅ ๋น„์Šทํ•œ ํ…Œ๋งˆ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, statusline ํ”Œ๋Ÿฌ๊ทธ์ธ ์ค‘ ํ…Œ๋งˆ ํ˜ธํ™˜์ด ๊ฐ€์žฅ ์ž˜ ๋˜์–ด ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด lualine์ด๋‹ค.

Lazy๋กœ lualine ์„ค์น˜

lualine.nvim์˜ README์— Lazy ๋งค๋‹ˆ์ €๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์™€ ์•˜๋‹ค.

{
    'nvim-lualine/lualine.nvim',
    dependencies = { 'nvim-tree/nvim-web-devicons' }
}

์ฐฝ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์š”์†Œ ์กฐ์ ˆํ•˜๊ธฐ

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

์ „์ฒด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

-- [[ lua/plugins/lualine.lua ]]

return {
  'nvim-lualine/lualine.nvim',
  dependencies = { 'nvim-tree/nvim-web-devicons' },

  config = function()
    -- Variable for small window settings
    local hide_in_width = function()
      return vim.fn.winwidth(0) > 100
    end

    -- Diagnostics: Not shown if small window
    local diagnostics = {
      'diagnostics',
      sources = { 'nvim_diagnostic' },
      always_visible = false,
      cond = hide_in_width,
    }

    -- Git diff icon settings: Not shown if small window
    local diff = {
      'diff',
      cond = hide_in_width,
    }

    require('lualine').setup {
      options = {
        disabled_filetypes = { 'alpha', 'neo-tree' },
      },
      sections = {
        lualine_a = {'mode'},
        lualine_b = {'branch', diff, diagnostics},
        lualine_c = {'filename'},
        lualine_x = {'encoding', 'fileformat', 'filetype'},
        lualine_y = {'progress'},
        lualine_z = {'location'}
      },
      inactive_sections = {
        lualine_a = {},
        lualine_b = {},
        lualine_c = {'filename'},
        lualine_x = {'location'},
        lualine_y = {},
        lualine_z = {}
      },
      tabline = {},
      winbar = {},
      inactive_winbar = {},
      extensions = { 'fugitive' }
    }
  end,
}

hide_in_width ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด ์œˆ๋„์šฐ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด dianostics์™€ diff ์š”์†Œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค. ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€, sections ํ”„๋กœํผํ‹ฐ์—์„œ ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

sections = {
  lualine_a = {'mode'},
  lualine_b = {'branch', diff, diagnostics},
  lualine_c = {'filename'},
  lualine_x = {'encoding', 'fileformat', 'filetype'},
  lualine_y = {'progress'},
  lualine_z = {'location'}
},

lualine_b์— diff์™€ diagonstics ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Statusline์˜ ์š”์†Œ๋“ค์€ pre-configured ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๋งˆ์Œ๋Œ€๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค.

options = {
  disabled_filetypes = { 'alpha', 'neo-tree' },
},

ํŒŒ์ผ ํŠธ๋ฆฌ์—๋Š” statusline์ด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด disabled_filetypes ํ”„๋กœํผํ‹ฐ์— ํŒŒ์ผ ํŠธ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

full screen
full screen

Bufferline๊ณผ statusline๊นŒ์ง€ ๊ตฌ์„ฑํ•˜๊ณ  ๋‚˜๋ฉด ์ด ์ •๋„์˜ ํ™”๋ฉด์ด ์™„์„ฑ๋˜์—ˆ์„ ๊ฒƒ! ๐Ÿ’ƒ disabled_filetypes์— ํŒŒ์ผํŠธ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ์™ผ์ชฝ ํ•˜๋‹จ ํšŒ์ƒ‰ ๊ธ€์”จ๋Š” ์—†์–ด์ง„๋‹ค.

๐Ÿ“œ Scrollbar: nvim-scrollbar

์Šคํฌ๋กค ์ž์ฒด๋Š” ๋งˆ์šฐ์Šค ํœ ์ด๋‚˜ ํ‚ค๋ณด๋“œ์˜ 'PGDN' ํ‚ค๋กœ ํ•  ๋•Œ๊ฐ€ ๋งŽ์•„ ๊ดœ์ฐฎ์ง€๋งŒ, git diff๋ฅผ ์Šคํฌ๋กค๋ฐ”์—์„œ ๋ฐ”๋กœ ํ™•์ธํ•ด์„œ ๊ทธ ์œ„์น˜๋กœ ๊ฐ€๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ๋„ ์—ฌ๊ฐ„ ๋ถˆํŽธํ•œ ๊ฒŒ ์•„๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์Šคํฌ๋กค๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

README์— lazy ๋งค๋‹ˆ์ €๋ฅผ ํ™œ์šฉํ•œ ์„ค์น˜ ๋งค๋‰ด์–ผ์€ ๊ณต์‹์ ์œผ๋กœ ๋‚˜์™€ ์žˆ์ง€ ์•Š์ง€๋งŒ ๋‹ค์Œ Github Issue(ํด๋ฆญ)์—์„œ ํžŒํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

TBD

์Šคํฌ๋กค๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋ช‡ ๊ฐœ ๋‘˜๋Ÿฌ๋ดค์ง€๋งŒ,

  1. ์Šคํฌ๋กค๋ฐ” ์ƒ‰์ƒ๊ณผ ๋„ˆ๋น„๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ณ 
  2. VSCode์ฒ˜๋Ÿผ ํŒŒ์ผ ๊ธธ์ด์— ๋งž์ถฐ ์Šคํฌ๋กค๋ฐ” ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜๊ณ 
  3. ๋ชจ๋“  ๋‚ด์šฉ์ด ํ•œ ํ™”๋ฉด ์•ˆ์— ์žˆ์–ด๋„ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”

์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ˆ˜์ •ํ•ด์„œ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „๊นŒ์ง€ ์ด ํŒŒํŠธ๋Š” ์ตœ์ข… ์„ค์ •์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค.

โœจ ๋งˆ์น˜๋ฉฐ

์ด์ œ ๊ทธ๋Ÿด๋“ฏํ•œ ํ™”๋ฉด ๊ตฌ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค. ์Šคํฌ๋กค๋ฐ”๊ฐ€ ๋ง˜์— ๊ผญ ๋“œ๋Š” ๊ฒŒ ์—†์–ด์„œ ์•„์‰ฝ์ง€๋งŒ, ์ถ”ํ›„์— ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋Œ€๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด๋„ ๋˜์ง€๋งŒ ์ฝ”๋“œ ์—๋””ํ„ฐ๋ฅผ ์“ฐ๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ๋น ๋ฅธ ์—๋Ÿฌ ํ™•์ธ์ด๊ธฐ๋„ ํ•˜๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์—๋””ํ„ฐ๊ฐ€ ์žก์•„๋‚ด ์ค˜์•ผ ์ƒ์‚ฐ์„ฑ์ด ์˜ฌ๋ผ๊ฐ„๋‹ค. ์ดํ›„๋ถ€ํ„ฐ๋Š” ๊ธฐ๋Šฅ์ ์ธ ๋ฉด์— ์ง‘์ค‘ํ•ด์„œ IDE ๊ตฌ์„ฑ์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

@zunione
์ „ํฌ์›