개발 도구

Neovim 생산성 극대화: 강력한 플러그인과 설정으로 나만의 개발 환경 구축하기

강코의 코딩 일기 2026. 6. 4. 21:09
반응형

Neovim을 활용해 개발 생산성을 혁신하는 방법을 알아보고, 필수 플러그인과 최적의 설정으로 나만의 강력한 개발 환경을 구축하는 가이드입니다.

안녕하세요, 개발자 여러분! 매일 사용하는 에디터, 혹시 만족하고 계신가요? 개발자라면 누구나 자신에게 찰떡같이 맞는 에디터를 찾아 헤매는 여정을 겪어보셨을 텐데요. Visual Studio Code, IntelliJ IDEA 같은 통합 개발 환경(IDE)도 물론 훌륭하지만, CLI 기반 에디터만의 매력에 한번 빠지면 헤어나오기 힘들답니다.

특히 NeovimVim의 강력한 기능에 현대적인 확장성과 유연성을 더해, 마치 나만의 레고 블록처럼 원하는 기능을 자유롭게 조립하여 나만의 IDE를 만들 수 있게 해줍니다. 처음에는 진입 장벽이 높다고 느껴질 수도 있지만, 일단 익숙해지고 나면 마우스 없이 키보드만으로 개발의 모든 과정을 처리하며 엄청난 생산성 향상을 경험하실 수 있을 거예요. 한번 Neovim의 세계로 떠나볼까요?

📑 목차

Neovim으로 개발 생산성 극대화: 플러그인과 설정으로 나만의 IDE 구축하기 - table, workplace, pen, keyboard, notebook, work, glasses, telephone, copy space, table, table, table, table, table, workplace, keyboard, notebook, notebook, work, work, work

Image by Ylanite on Pixabay

Neovim, 왜 개발자들의 사랑을 받을까요?

많은 개발자들이 Neovim에 열광하는 이유, 궁금하시죠? 단순히 'CLI 에디터'라서가 아니랍니다. Neovim은 다음과 같은 독보적인 장점들을 가지고 있어요.

Vim의 유산을 계승한 강력한 효율성

Neovim은 Vim의 철학을 그대로 이어받아, 키보드만으로 모든 작업을 수행하도록 설계되었습니다. 이는 손이 키보드에서 떨어질 일이 없다는 것을 의미하고, 결과적으로 코드 작성 속도탐색 효율성을 극대화하죠. '모달 에디팅(Modal Editing)'이라는 독특한 방식은 처음엔 어색할 수 있지만, 한번 익숙해지면 마치 손과 에디터가 하나가 된 듯한 경험을 선사합니다.

현대적인 확장성과 유연성

Neovim은 Lua 스크립트를 기본 설정 언어로 채택하면서, 기존 VimL(Vim Script)보다 훨씬 빠르고 유연하게 플러그인을 개발하고 설정을 관리할 수 있게 되었어요. 덕분에 수많은 개발자들이 Lua 기반의 고성능 플러그인들을 쏟아내고 있고, 이 플러그인들을 조합하면 웬만한 IDE 못지않은 기능을 구현할 수 있답니다.

가볍고 빠르며 어디서든 사용 가능

Neovim은 GUI 기반 IDE에 비해 훨씬 가볍고 빠릅니다. 이는 저사양 환경이나 원격 서버 환경에서도 쾌적하게 개발할 수 있다는 장점으로 이어지죠. 서버에 접속해서 코드를 수정할 때, GUI 에디터를 따로 띄우지 않고 터미널 안에서 모든 작업을 처리할 수 있다는 건 엄청난 이점이에요.

이러한 장점들 덕분에 Neovim은 단순히 텍스트 에디터를 넘어, 개발자의 생산성을 한 차원 끌어올리는 강력한 개발 도구로 자리매김하고 있답니다. 그럼 이제 직접 Neovim을 설치하고 설정하는 방법을 알아볼까요?

Neovim 설치부터 첫 설정까지: 나만의 시작점 만들기

Neovim을 시작하는 첫 단계는 설치와 기본적인 설정입니다. 생각보다 어렵지 않으니, 저와 함께 차근차근 따라와 보세요!

Neovim 설치하기

각 운영체제별로 설치 방법이 조금씩 다르지만, 대부분 패키지 매니저를 통해 쉽게 설치할 수 있어요.


# macOS (Homebrew 사용)
brew install neovim

# Linux (Ubuntu/Debian)
sudo apt update
sudo apt install neovim

# Windows (Chocolatey 사용)
choco install neovim

설치가 완료되었다면 터미널에 `nvim`을 입력해 보세요. Neovim 화면이 나타나면 성공입니다!

핵심 설정 파일: init.lua

Neovim의 모든 설정은 init.lua 파일에서 이루어집니다. 이 파일은 보통 ~/.config/nvim/ 경로에 위치하는데요. 만약 파일이 없다면 직접 생성해 주시면 됩니다. 이 파일에 여러분만의 설정을 Lua 언어로 작성하게 될 거예요.


-- init.lua 파일의 예시 (간단한 설정)
vim.opt.nu = true          -- 줄 번호 표시
vim.opt.relativenumber = true -- 현재 줄 기준 상대 줄 번호 표시
vim.opt.tabstop = 4        -- 탭 간격 4칸
vim.opt.shiftwidth = 4     -- 자동 들여쓰기 4칸
vim.opt.expandtab = true   -- 탭 대신 공백 사용
vim.opt.hlsearch = true    -- 검색 결과 강조
vim.opt.incsearch = true   -- 입력 중 검색 결과 미리보기
vim.opt.termguicolors = true -- 터미널 색상 지원
vim.opt.syntax = "on"      -- 문법 강조 켜기

-- 키 바인딩 예시 (Normal 모드에서 fv 누르면 파일 탐색기 열기)
vim.api.nvim_set_keymap('n', '<leader>fv', ':NvimTreeToggle<CR>', { noremap = true, silent = true })

vim.opt는 Neovim의 전역 옵션을 설정하는 데 사용되고, vim.api.nvim_set_keymap키 바인딩을 설정하는 데 사용됩니다. <leader> 키는 보통 Space 키로 설정하며, 이 키를 누른 후 다른 키를 조합하여 나만의 단축키를 만들 수 있죠. init.lua는 여러분의 Neovim 환경을 정의하는 심장부라고 할 수 있어요!

개발 생산성을 폭발시키는 필수 플러그인 컬렉션

Neovim의 진정한 힘은 플러그인에서 나옵니다. 수많은 플러그인들이 여러분의 Neovim을 강력한 IDE로 변신시켜 줄 거예요. 이 섹션에서는 꼭 알아야 할 핵심 플러그인들을 소개해 드릴게요.

플러그인 매니저: lazy.nvim

수많은 플러그인을 효율적으로 관리하려면 플러그인 매니저가 필수입니다. lazy.nvim은 빠르고 비동기적인 로딩을 지원하며, 사용하기 쉽다는 장점이 있어요.


-- init.lua 파일에 lazy.nvim 설정 추가
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup({
  -- 여기에 플러그인들을 추가합니다.
  -- 예: { "nvim-tree/nvim-tree.lua", cmd = { "NvimTreeToggle", "NvimTreeFindFile" } },
  --     { "neovim/nvim-lspconfig" },
})

lazy.nvim을 통해 플러그인을 설치하면, Neovim을 시작할 때 필요한 플러그인만 로드하여 시작 속도를 빠르게 유지할 수 있어요. 플러그인 관리가 정말 편리해진답니다.

언어 서버 프로토콜 (LSP): nvim-lspconfig

LSP (Language Server Protocol)는 현대 IDE의 핵심 기능이죠. 자동 완성, 정의로 이동, 참조 찾기, 오류 및 경고 표시 같은 기능을 제공합니다. nvim-lspconfig는 다양한 언어 서버를 Neovim에서 쉽게 설정할 수 있도록 도와주는 플러그인이에요.


-- lazy.nvim을 통해 nvim-lspconfig 설치 및 설정 예시
{
  "neovim/nvim-lspconfig",
  dependencies = {
    "williamboman/mason.nvim", -- LSP 서버 설치 관리자
    "williamboman/mason-lspconfig.nvim",
  },
  config = function()
    require("mason").setup()
    require("mason-lspconfig").setup()
    -- 특정 언어 서버 설정 예시 (파이썬)
    require("lspconfig").pyright.setup({
      capabilities = require("cmp_nvim_lsp").default_capabilities(),
    })
    -- 기타 언어 서버 설정...
  end,
}

이 플러그인을 사용하면 Python의 Pyright, JavaScript/TypeScript의 TypeScript LS, Go의 gopls 등 다양한 언어 서버를 Neovim에서 바로 활용할 수 있게 되어, 마치 IDE를 쓰는 것 같은 경험을 할 수 있습니다.

파일 탐색기: nvim-tree.lua

Visual Studio Code의 좌측 사이드바처럼 파일 시스템을 탐색하는 기능은 개발에 필수적이죠. nvim-tree.lua는 Neovim에서 깔끔하고 기능적인 파일 탐색기를 제공합니다.


-- lazy.nvim을 통해 nvim-tree.lua 설치 및 설정 예시
{
  "nvim-tree/nvim-tree.lua",
  version = "*",
  lazy = false,
  dependencies = {
    "nvim-tree/nvim-web-devicons", -- 파일 아이콘 표시
  },
  config = function()
    require("nvim-tree").setup {
      view = {
        width = 30, -- 탐색기 너비
      },
      renderer = {
        group_empty = true,
      },
      filters = {
        dotfiles = true, -- 숨김 파일 표시 여부
      },
    }
  end,
}

<leader>fv 같은 키 바인딩으로 쉽게 토글하고 파일을 열 수 있게 설정하면, 마우스 없이도 프로젝트 파일을 빠르게 오갈 수 있게 돼요.

자동 완성: nvim-cmp

코드를 더 빠르게 작성하고 오타를 줄이는 데 자동 완성은 필수입니다. nvim-cmp는 LSP, 스니펫, 버퍼 등 다양한 소스에서 자동 완성 기능을 제공하는 강력한 플러그인입니다.


-- lazy.nvim을 통해 nvim-cmp 및 관련 플러그인 설치 예시
{
  "hrsh7th/nvim-cmp",
  dependencies = {
    "hrsh7th/cmp-nvim-lsp", -- LSP 소스
    "hrsh7th/cmp-buffer",   -- 현재 버퍼 소스
    "hrsh7th/cmp-path",     -- 경로 소스
    "saadparwaiz1/cmp_luasnip", -- 스니펫 소스
    "L3MON4D3/LuaSnip",     -- 스니펫 엔진
  },
  config = function()
    local cmp = require("cmp")
    local luasnip = require("luasnip")

    cmp.setup({
      snippet = {
        expand = function(args)
          luasnip.lsp_expand(args.body)
        end,
      },
      mapping = cmp.mapping.preset.insert({
        ['<C-b>'] = cmp.mapping.scroll_docs(-4),
        ['<C-f>'] = cmp.mapping.scroll_docs(4),
        ['<C-Space>'] = cmp.mapping.complete(),
        ['<C-e>'] = cmp.mapping.abort(),
        ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Enter 키로 선택
      }),
      sources = cmp.config.sources({
        { name = 'nvim_lsp' },
        { name = 'luasnip' },
        { name = 'buffer' },
        { name = 'path' },
      }),
    })
  end,
}

이 외에도 telescope.nvim (강력한 퍼지 파인더), gitsigns.nvim (Git 변경 사항 표시), lualine.nvim (상태 바) 등 수많은 플러그인들이 여러분의 Neovim을 더욱 풍성하게 만들어 줄 거예요. 플러그인 하나하나가 여러분의 개발 경험을 한층 업그레이드 시켜줄 겁니다.

Neovim으로 개발 생산성 극대화: 플러그인과 설정으로 나만의 IDE 구축하기 - lobster, food, ide, lobster, lobster, lobster, lobster, lobster

Image by ksbaeg on Pixabay

효율적인 워크플로우를 위한 Neovim 커스터마이징 전략

Neovim은 단순히 플러그인을 설치하는 것을 넘어, 여러분의 취향과 작업 방식에 맞춰 세밀하게 커스터마이징할 수 있다는 점이 큰 매력이에요. 나만의 워크플로우를 최적화하는 전략을 알아볼까요?

아름다운 시각화: 테마와 폰트

개발 환경은 눈으로 보고 사용하는 만큼, 예쁜 테마와 가독성 좋은 폰트가 중요하겠죠? Neovim에서는 다양한 테마 플러그인을 사용할 수 있습니다. 저는 catppuccin/nvim 같은 테마를 즐겨 사용하는데요.


-- lazy.nvim에 테마 플러그인 추가
{
  "catppuccin/nvim",
  name = "catppuccin",
  priority = 1000,
  config = function()
    vim.cmd.colorscheme "catppuccin" -- catppuccin 테마 적용
  end,
},

폰트는 코딩용 폰트(예: JetBrains Mono, Fira Code)를 사용하는 것이 좋아요. 특히 'ligature' 기능이 있는 폰트는 =>, !== 같은 기호를 하나의 합쳐진 글자로 보여줘서 가독성을 높여줍니다. 터미널 에뮬레이터 설정에서 폰트를 변경해 주시면 Neovim에서도 적용됩니다.

강력한 키 바인딩: 나만의 단축키 만들기

Neovim의 핵심은 키 바인딩입니다. 자주 사용하는 명령어는 나만의 단축키로 만들어 두면 작업 속도가 비약적으로 빨라져요. 앞서 소개한 vim.api.nvim_set_keymap 함수를 활용해 보세요.

모드 키 바인딩 설명
Normal <leader>w 현재 파일 저장 (:w)
Normal <leader>q 현재 창 닫기 (:q)
Normal <leader>s 화면 분할 (수평) (:sp)
Normal <leader>v 화면 분할 (수직) (:vs)
Visual <C-c> 선택 영역 주석 처리 (플러그인 필요)

이처럼 자신에게 맞는 키 바인딩을 구축하면, 마우스에 손을 댈 필요 없이 모든 작업을 키보드만으로 처리하는 진정한 키보드 위자드가 될 수 있어요.

사용자 정의 함수와 자동화

Lua 스크립팅 능력이 있다면, Neovim 내에서 사용자 정의 함수를 만들어 특정 작업을 자동화할 수도 있습니다. 예를 들어, 특정 파일 타입에 따라 자동으로 특정 명령어를 실행하거나, 빌드 스크립트를 한 번에 실행하는 함수를 만들 수 있죠. 이는 반복적인 작업을 줄여 개발 효율성을 크게 높여줍니다.


-- init.lua에 사용자 정의 함수 예시
-- Python 파일 저장 시 자동으로 black 포매터 실행
vim.api.nvim_create_autocmd("BufWritePost", {
  pattern = "*.py",
  callback = function()
    vim.cmd("!black %") -- 현재 파일에 black 포매터 적용
  end,
})

이처럼 init.lua 파일을 잘 활용하면 여러분의 Neovim은 단순한 에디터를 넘어, 여러분의 개발 과정을 최적화하는 강력한 개인 비서가 될 수 있을 거예요.

Neovim으로 다재다능한 개발 환경 구축하기: 언어별 활용 팁

Neovim은 특정 언어에 국한되지 않고, 다양한 언어 개발에 활용될 수 있다는 점이 큰 장점이에요. LSP와 특정 언어에 특화된 플러그인을 활용하면 어떤 언어든 강력한 개발 환경을 구축할 수 있답니다.

Python 개발 환경

Python 개발에 Neovim을 사용한다면 다음과 같은 플러그인과 설정을 고려해 볼 수 있어요.

  • LSP: pyright 또는 ruff_lspnvim-lspconfig와 함께 설정합니다.
  • 자동 포매터: black 또는 ruff format과 같은 포매터를 연동하여 저장 시 자동으로 코드를 정돈합니다. (BufWritePost autocmd 활용)
  • 린터: ruff를 LSP와 함께 사용하거나, ale 또는 null-ls.nvim을 통해 린팅 기능을 추가할 수 있습니다.
  • 가상 환경 관리: nvim-venv 같은 플러그인을 사용하여 프로젝트별 Python 가상 환경을 쉽게 활성화하고 관리할 수 있습니다.

-- init.lua에 Python 관련 설정 (예시)
require("lspconfig").pyright.setup({
  -- pyright 설정
})
require("lspconfig").ruff_lsp.setup({
  -- ruff_lsp 설정
})

-- 자동 포맷 설정 (black)
vim.api.nvim_create_autocmd("BufWritePre", {
  pattern = "*.py",
  callback = function()
    vim.lsp.buf.format({ async = true }) -- LSP 포매터 사용
  end,
})

JavaScript/TypeScript 개발 환경

프론트엔드나 백엔드 JavaScript/TypeScript 개발에도 Neovim은 강력한 도구입니다.

  • LSP: tsserver (TypeScript Language Server)를 nvim-lspconfig와 함께 설정합니다.
  • 포매터/린터: prettier, eslint 등을 null-ls.nvim과 연동하여 사용하면 자동 포맷팅과 코드 검사를 수행할 수 있습니다.
  • JSX/TSX 지원: nvim-treesitter 플러그인을 설치하면 JSX/TSX 구문 강조 및 구조 분석이 더욱 정확해집니다.

-- init.lua에 JS/TS 관련 설정 (예시)
require("lspconfig").tsserver.setup({
  -- tsserver 설정
})

-- null-ls를 이용한 prettier/eslint 설정
-- (null-ls.nvim 플러그인 설치 후)
local null_ls = require("null-ls")
null_ls.setup({
  sources = {
    null_ls.builtins.formatting.prettier,
    null_ls.builtins.diagnostics.eslint,
  },
})

Go 개발 환경

Go 언어는 gopls라는 강력한 LSP를 제공하여 Neovim에서도 훌륭한 개발 경험을 선사합니다.

  • LSP: goplsnvim-lspconfig와 함께 설정합니다. Go 개발에 필요한 모든 기능(정의 이동, 타입 추론, 리팩토링 등)을 제공합니다.
  • 테스트: nvim-go와 같은 플러그인을 통해 Go 테스트를 Neovim 내에서 실행하고 결과를 확인할 수 있습니다.

-- init.lua에 Go 관련 설정 (예시)
require("lspconfig").gopls.setup({
  settings = {
    gopls = {
      analyses = {
        unusedparams = true,
      },
      staticcheck = true,
    },
  },
})

이처럼 Neovim은 LSP와 각 언어의 특성을 살린 플러그인들을 조합하여 어떤 언어든 전문적인 IDE 환경을 구축할 수 있는 유연성을 자랑합니다. 여러분이 주로 사용하는 언어에 맞춰 설정을 최적화해 보세요!

Neovim으로 개발 생산성 극대화: 플러그인과 설정으로 나만의 IDE 구축하기 - library, setup, books, read, stately, interior design, reside, furniture, nostalgia, room, space, victorian, library, library, library, library, library, room

Image by wal_172619 on Pixabay

Neovim, 더 깊은 몰입을 위한 고급 기능 탐험

Neovim은 단순한 코드 편집을 넘어, 개발의 모든 단계를 지원하는 고급 기능들을 플러그인을 통해 통합할 수 있습니다. 마치 IDE처럼요!

통합 디버거: nvim-dap

코드를 실행하면서 변수 값을 확인하고, 특정 지점에서 실행을 멈추는 디버깅은 개발 과정에서 매우 중요합니다. nvim-dapDAP (Debug Adapter Protocol) 클라이언트를 Neovim에 통합하여, 다양한 언어의 디버거를 Neovim 내에서 직접 사용할 수 있게 해줍니다.


-- lazy.nvim에 nvim-dap 및 디버거 어댑터 설치 예시 (Python)
{
  "mfussenegger/nvim-dap",
  dependencies = {
    "rcarriga/nvim-dap-ui", -- 디버거 UI
    "nvim-telescope/telescope-dap.nvim", -- telescope 연동
    -- Python 디버거 어댑터
    { "mfussenegger/nvim-dap-python", config = function() require("dap-python").setup() end },
  },
  config = function()
    local dap = require("dap")
    local dapui = require("dapui")
    dapui.setup()

    dap.listeners.after.event_initialized["dapui_config"] = function()
      dapui.open()
    end
    dap.listeners.before.event_terminated["dapui_config"] = function()
      dapui.close()
    end
    dap.listeners.before.event_exited["dapui_config"] = function()
      dapui.close()
    end

    -- 키 바인딩 예시
    vim.keymap.set({'n', 'v'}, '<leader>b', dap.toggle_breakpoint, { desc = 'Toggle Breakpoint' })
    vim.keymap.set('n', '<leader>c', dap.continue, { desc = 'Continue' })
    vim.keymap.set('n', '<leader>n', dap.step_over, { desc = 'Step Over' })
    vim.keymap.set('n', '<leader>i', dap.step_into, { desc = 'Step Into' })
    vim.keymap.set('n', '<leader>o', dap.step_out, { desc = 'Step Out' })
  end,
}

이처럼 디버거를 Neovim에 통합하면, 코드를 작성하고 테스트하며 디버깅하는 모든 과정을 에디터 밖으로 나가지 않고 해결할 수 있어 개발 몰입도를 극대화할 수 있습니다.

터미널과 Neovim의 유기적인 연동

Neovim은 내장 터미널을 지원합니다. :terminal 명령어로 터미널을 열고, <C-\><C-n> 같은 키로 Neovim 모드와 터미널 모드를 쉽게 오갈 수 있어요. 여기에 toggleterm.nvim 같은 플러그인을 활용하면 필요할 때마다 터미널을 쉽게 띄우고 숨길 수 있어서 매우 편리합니다.


-- lazy.nvim에 toggleterm.nvim 설치 예시
{
  "akinsho/toggleterm.nvim",
  version = "*",
  config = function()
    require("toggleterm").setup({
      size = 20,
      open_mapping = "<leader>tt", -- 토글 키 바인딩
      direction = "float", -- 플로팅 터미널
      -- 또는 "horizontal", "vertical"
    })
    vim.keymap.set('n', '<leader>tg', ":ToggleTerm direction=float cmd='lazygit'<CR>", { desc = 'Toggle Lazygit' })
  end,
}

특히 lazygit 같은 TUI (Text User Interface) 기반 Git 클라이언트를 toggleterm과 연동하면, Git 작업을 터미널과 Neovim을 오가며 매끄럽게 처리할 수 있어 Git 워크플로우를 혁신할 수 있답니다.

이 외에도 테스트 러너 통합, 스니펫 관리, 코드 스멜 탐지 등 다양한 플러그인들을 통해 Neovim을 여러분만의 완벽한 개발 슈퍼 도구로 만들 수 있어요. 상상하는 모든 기능을 Neovim에서 구현할 수 있다고 해도 과언이 아니랍니다.

마무리하며: 나만의 IDE, Neovim과 함께 성장하는 개발 여정

지금까지 Neovim을 활용해 개발 생산성을 극대화하고 나만의 IDE를 구축하는 다양한 방법들을 살펴보았어요. Neovim은 단순히 텍스트를 편집하는 도구가 아니라, 여러분의 개발 워크플로우를 혁신하고 키보드 기반의 강력한 효율성을 선사하는 개발 동반자라고 할 수 있습니다. 처음에는 배우는 데 시간이 걸릴 수 있지만, 일단 익숙해지고 나면 여러분의 개발 속도와 즐거움이 한층 더 높아질 거라고 확신해요.

Neovim은 끊임없이 발전하고 있으며, 수많은 개발자들이 자신만의 설정을 공유하고 새로운 플러그인을 만들어내고 있습니다. 여러분도 이 커뮤니티에 참여하여 여러분만의 init.lua를 멋지게 꾸며나가면서, 자신에게 가장 잘 맞는 개발 환경을 찾아가는 즐거움을 느껴보시길 바랍니다.

혹시 Neovim 설정에 대해 궁금한 점이나 여러분만의 꿀팁이 있다면, 아래 댓글로 자유롭게 공유해 주세요! 함께 더 나은 개발 환경을 만들어 나가요!

📌 함께 읽으면 좋은 글

  • [개발 도구] 로컬 컨테이너 개발 환경 최적화: Docker Desktop 대안 Podman, Colima, Rancher Desktop 비교 및 활용 가이드
  • [개발 도구] 개발 생산성 극대화: Zsh, Tmux, Powerline으로 터미널 환경 최적화 가이드
  • [개발 도구] 강력한 개발 터미널 환경 구축: Zsh, Oh My Zsh, Powerlevel10k 설정 및 활용 가이드

이 글이 도움이 되셨다면 공감(♥)댓글로 응원해 주세요!
궁금한 점이나 다루었으면 하는 주제가 있다면 댓글로 남겨주세요.

반응형