161118 VisualStudio Code 단축키, 특수사용

Edit

161118 VisualStudio Code 단축키, 특수사용

vscode 다운로드

단축키

설명
CTRL + \ 화면분할
CTRL + ` 내부에서 쉘열기
CTRL + <-> 축소
CTRL + <+> 확대
CTRL + ALT + DOWN 멀티선택
CTRL + B 사이드바 보기
CTRL + J 하단패널 보기
CTRL + P 파일팔레트 보기
CTRL + SHIFT + C 외부에서 쉘열기
CTRL + SHIFT + E 파일탐색기 보기
CTRL + SHIFT + F5 Restart
CTRL + SHIFT + G GIT 보기
CTRL + SHIFT + M 문제 보기
CTRL + SHIFT + O 심볼팔레트 보기
CTRL + SHIFT + P 명령팔레트 보기
CTRL + SHIFT + P, beautify 파일 인덴트 정리
CTRL + SHIFT + U 출력 보기
CTRL + SHIFT + V 미리 보기
CTRL + SHIFT + X EXTENSION 보기
CTRL + SHIFT + Y 디버그콘솔 보기
CTRL + SPACE 자동완성
CTRL + W 창닫기
F10 Step Over
F11 전체화면
F11 Step Into, Step Out Shift
F12 정의로 이동
F2 이름변경
F5 Continue / Pause
F5 Stop Shift
F8 markdown 상세오류 보기
SHIFT + ALT + DRAG 박스선택
a b

필수 익스텐션

hnw.vscode-auto-open-markdown-preview

code --install-extension hnw.vscode-auto-open-markdown-preview
  • 마크다운 프리뷰를 항상 문서 오른쪽에 표시

HookyQR.beautify

code --install-extension HookyQR.beautify
  • javascript, JSON, CSS, Sass, and HTML 의 코드를 beautify 해줌

ms-vscode.csharp

code --install-extension ms-vscode.csharp
  • Lightweight development tools for .NET Core.

msjsdiag.debugger-for-chrome

code --install-extension msjsdiag.debugger-for-chrome
  • Setting breakpoints, including in source files when source maps are enabled
  • Press the play button or F5 to start

abusaidm.html-snippets

code --install-extension abusaidm.html-snippets
  • rich language support for the HTML Markup
    • Full HTML5 Tags
    • Colorization
    • Snippets
    • [partially implemented] Quick Info
    • description mentions if tag deprecated

DavidAnson.vscode-markdownlint

code --install-extension DavidAnson.vscode-markdownlint
  • Markdown linting and style checking
    • Ctrl+Shift+M : open the Errors and Warnings dialog
    • F8 : see the warning

ms-vscode.PowerShell

code --install-extension ms-vscode.PowerShell
  • Syntax highlighting
  • Code snippets
  • IntelliSense for cmdlets and more
  • Rule-based analysis provided by PowerShell Script Analyzer
  • Go to Definition of cmdlets and variables
  • Find References of cmdlets and variables
  • Document and workspace symbol discovery
  • Run selected selection of PowerShell code using F8
  • Launch online help for the symbol under the cursor using Ctrl+F1
  • Local script debugging and basic interactive console support!

디버깅 관련 …

  • Debug actions
    • Continue / Pause F5
    • Step Over F10
    • Step Into F11
    • Step Out Shift+F11
    • Restart Ctrl+Shift+F5
    • Stop Shift+F5
  • 앱 디버깅
    • /.vscode/launch.json 파일생성
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceRoot}/app.js",
            "cwd": "${workspaceRoot}"
        },
        {
            "type": "node",
            "request": "attach",
            "name": "Attach to Process",
            "port": 5858
        }
    ]}
  • Launch.json attributes
    • type - type of configuration which maps to the registered debug extension (node, php, go)
    • request- debug request, either to launch or attach
    • name- friendly name which appears in the Debug launch configuration dropdown
    • program - executable or file to run when launching the debugger
    • cwd - current working directory for finding dependencies and other files
    • port - port when attaching to a running process
    • stopOnEntry - break immediately when the program launches
    • internalConsoleOptions - control visibility of the Debug Console panel during a debugging session
  • Variable substitution
    • ${workspaceRoot} the path of the folder opened in VS Code
    • ${file} the current opened file
    • ${relativeFile} the current opened file relative to workspaceRoot
    • ${fileBasename} the current opened file's basename
    • ${fileDirname} the current opened file's dirname
    • ${fileExtname} the current opened file's extension
    • ${cwd} the task runner's current working directory on startup

Command Line Extension Management

code --list-extensions
code --install-extension ms-vscode.cpptools
code --uninstall-extension ms-vscode.csharp

node.js hello world

app.js 구현

var msg = 'Hello World';
console.log(msg);

.vscode/launch.json 설정

  • 프로젝트가 실행될 환경을 설정
  • runtimeExecutable 을 node.exe의 실제경로로 설정해 주는것이 중요
{
    // Use IntelliSense to learn about possible Node.js debug attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "프로그램 시작",
            "program": "${workspaceRoot}/app.js",
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": "C:\\Program Files\\nodejs\\node.exe"
        },
        {
            "type": "node",
            "request": "attach",
            "name": "프로세스에 연결",
            "port": 5858,
            "runtimeExecutable": "C:\\Program Files\\nodejs\\node.exe"
        }
    ]}

Running Hello World

PS> node app.js

Debugging Hello World

  1. F9 : 정지점 찍기
  2. F5 : 실행

api-debugging

  • 각 개발언어의 디버거를 플러그인 형태로 개발해서 붙이는 원리를 소개한 글
  • 이 저용량의 가벼운 텍스트편집기가 javascript와 c#의 디버깅기능을 전부지원하고, 자동완성, evaluation까지 거의 완벽하게 지원해서 원리가 궁금했었는데ㅎ
  • nodejs 가 v8엔진을 사용해서 운영하는 것과 같은원리로 디버거를 만들었네요
  • 혹시나 나중에 nodejs 를 깊이 튜닝해야 한다면 혹시 되움될수도 있겠습니다.
%23%20161118%20VisualStudio%20Code%20%uB2E8%uCD95%uD0A4%2C%20%uD2B9%uC218%uC0AC%uC6A9%0A%0A%5Btoc%5D%0A%0A%0A%0A%23%23%20vscode%20%uB2E4%uC6B4%uB85C%uB4DC%0Ahttp%3A//code.visualstudio.com/B%3Futm_expid%3D101350005-31.YsqwCVJESWmc4UCMDLsNRw.1%0A%0A%0A%0A%23%23%20%uB2E8%uCD95%uD0A4%0A%7C%20%uD0A4%20%7C%20%uC124%uBA85%20%7C%0A%7C%20-%20%7C%20-%20%7C%0A%7C%20CTRL%20+%20%5C%20%7C%20%uD654%uBA74%uBD84%uD560%20%7C%0A%7C%20CTRL%20+%20%60%20%7C%20%uB0B4%uBD80%uC5D0%uC11C%20%uC258%uC5F4%uAE30%20%7C%0A%7C%20CTRL%20+%20%3C%5C-%3E%20%7C%20%uCD95%uC18C%20%7C%0A%7C%20CTRL%20+%20%3C+%3E%20%7C%20%uD655%uB300%20%7C%0A%7C%20CTRL%20+%20ALT%20+%20DOWN%20%7C%20%uBA40%uD2F0%uC120%uD0DD%20%7C%0A%7C%20CTRL%20+%20B%20%7C%20%uC0AC%uC774%uB4DC%uBC14%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20J%20%7C%20%uD558%uB2E8%uD328%uB110%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20P%20%7C%20%uD30C%uC77C%uD314%uB808%uD2B8%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20C%20%7C%20%uC678%uBD80%uC5D0%uC11C%20%uC258%uC5F4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20E%20%7C%20%uD30C%uC77C%uD0D0%uC0C9%uAE30%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20F5%20%7C%20Restart%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20G%20%7C%20GIT%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20M%20%7C%20%uBB38%uC81C%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20O%20%7C%20%uC2EC%uBCFC%uD314%uB808%uD2B8%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20P%20%7C%20%uBA85%uB839%uD314%uB808%uD2B8%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20P%2C%20beautify%20%7C%20%uD30C%uC77C%20%uC778%uB374%uD2B8%20%uC815%uB9AC%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20U%20%7C%20%uCD9C%uB825%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20V%20%7C%20%uBBF8%uB9AC%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20X%20%7C%20EXTENSION%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SHIFT%20+%20Y%20%7C%20%uB514%uBC84%uADF8%uCF58%uC194%20%uBCF4%uAE30%20%7C%0A%7C%20CTRL%20+%20SPACE%20%7C%20%uC790%uB3D9%uC644%uC131%20%7C%0A%7C%20CTRL%20+%20W%20%7C%20%uCC3D%uB2EB%uAE30%20%7C%0A%7C%20F10%20%7C%20Step%20Over%20%7C%0A%7C%20F11%20%7C%20%uC804%uCCB4%uD654%uBA74%20%7C%0A%7C%20F11%20%7C%20Step%20Into%2C%20Step%20Out%20Shift%20%7C%0A%7C%20F12%20%7C%20%uC815%uC758%uB85C%20%uC774%uB3D9%20%7C%0A%7C%20F2%20%7C%20%uC774%uB984%uBCC0%uACBD%20%7C%0A%7C%20F5%20%7C%20Continue%20/%20Pause%20%7C%0A%7C%20F5%20%7C%20Stop%20Shift%20%7C%0A%7C%20F8%20%7C%20markdown%20%uC0C1%uC138%uC624%uB958%20%uBCF4%uAE30%20%7C%0A%7C%20SHIFT%20+%20ALT%20+%20DRAG%20%7C%20%uBC15%uC2A4%uC120%uD0DD%20%7C%0A%7C%20a%20%7C%20b%20%7C%0A%0A%0A%0A%23%23%20%uD544%uC218%20%uC775%uC2A4%uD150%uC158%0A%0A%0A%23%23%23%20hnw.vscode-auto-open-markdown-preview%0A%60%60%60powershell%0Acode%20--install-extension%20hnw.vscode-auto-open-markdown-preview%0A%60%60%60%0A-%20%uB9C8%uD06C%uB2E4%uC6B4%20%uD504%uB9AC%uBDF0%uB97C%20%uD56D%uC0C1%20%uBB38%uC11C%20%uC624%uB978%uCABD%uC5D0%20%uD45C%uC2DC%0A%0A%23%23%23%20HookyQR.beautify%0A%60%60%60powershell%0Acode%20--install-extension%20HookyQR.beautify%0A%60%60%60%0A-%20javascript%2C%20JSON%2C%20CSS%2C%20Sass%2C%20and%20HTML%20%uC758%20%uCF54%uB4DC%uB97C%20beautify%20%uD574%uC90C%0A%0A%23%23%23%20ms-vscode.csharp%0A%60%60%60powershell%0Acode%20--install-extension%20ms-vscode.csharp%0A%60%60%60%0A-%20Lightweight%20development%20tools%20for%20.NET%20Core.%0A%0A%23%23%23%20msjsdiag.debugger-for-chrome%0A%60%60%60powershell%0Acode%20--install-extension%20msjsdiag.debugger-for-chrome%0A%60%60%60%0A-%20Setting%20breakpoints%2C%20including%20in%20source%20files%20when%20source%20maps%20are%20enabled%0A-%20Press%20the%20play%20button%20or%20F5%20to%20start%0A%0A%23%23%23%20abusaidm.html-snippets%0A%60%60%60powershell%0Acode%20--install-extension%20abusaidm.html-snippets%0A%60%60%60%0A-%20rich%20language%20support%20for%20the%20HTML%20Markup%0A%09-%20Full%20HTML5%20Tags%0A%09-%20Colorization%0A%09-%20Snippets%0A%09-%20%5Bpartially%20implemented%5D%20Quick%20Info%0A%09-%20description%20mentions%20if%20tag%20deprecated%0A%0A%23%23%23%20DavidAnson.vscode-markdownlint%0A%60%60%60powershell%0Acode%20--install-extension%20DavidAnson.vscode-markdownlint%0A%60%60%60%0A-%20Markdown%20linting%20and%20style%20checking%0A%09-%20Ctrl+Shift+M%20%3A%20open%20the%20Errors%20and%20Warnings%20dialog%0A%09-%20F8%20%3A%20see%20the%20warning%0A%0A%23%23%23%20ms-vscode.PowerShell%0A%60%60%60powershell%0Acode%20--install-extension%20ms-vscode.PowerShell%0A%60%60%60%0A-%20Syntax%20highlighting%0A-%20Code%20snippets%0A-%20IntelliSense%20for%20cmdlets%20and%20more%0A-%20Rule-based%20analysis%20provided%20by%20PowerShell%20Script%20Analyzer%0A-%20Go%20to%20Definition%20of%20cmdlets%20and%20variables%0A-%20Find%20References%20of%20cmdlets%20and%20variables%0A-%20Document%20and%20workspace%20symbol%20discovery%0A-%20Run%20selected%20selection%20of%20PowerShell%20code%20using%20F8%0A-%20Launch%20online%20help%20for%20the%20symbol%20under%20the%20cursor%20using%20Ctrl+F1%0A-%20Local%20script%20debugging%20and%20basic%20interactive%20console%20support%21%0A%0A%0A%0A%23%23%20%uB514%uBC84%uAE45%20%uAD00%uB828%20...%0Ahttp%3A//code.visualstudio.com/docs/editor/debugging%0A%0A-%20Debug%20actions%0A%09-%20Continue%20/%20Pause%20F5%0A%09-%20Step%20Over%20F10%0A%09-%20Step%20Into%20F11%0A%09-%20Step%20Out%20Shift+F11%0A%09-%20Restart%20Ctrl+Shift+F5%0A%09-%20Stop%20Shift+F5%0A%0A-%20%uC571%20%uB514%uBC84%uAE45%0A%09-%20/.vscode/launch.json%20%uD30C%uC77C%uC0DD%uC131%0A%60%60%60%0A%7B%0A%09%22version%22%3A%20%220.2.0%22%2C%0A%09%22configurations%22%3A%20%5B%0A%09%09%7B%0A%09%09%09%22type%22%3A%20%22node%22%2C%0A%09%09%09%22request%22%3A%20%22launch%22%2C%0A%09%09%09%22name%22%3A%20%22Launch%20Program%22%2C%0A%09%09%09%22program%22%3A%20%22%24%7BworkspaceRoot%7D/app.js%22%2C%0A%09%09%09%22cwd%22%3A%20%22%24%7BworkspaceRoot%7D%22%0A%09%09%7D%2C%0A%09%09%7B%0A%09%09%09%22type%22%3A%20%22node%22%2C%0A%09%09%09%22request%22%3A%20%22attach%22%2C%0A%09%09%09%22name%22%3A%20%22Attach%20to%20Process%22%2C%0A%09%09%09%22port%22%3A%205858%0A%09%09%7D%0A%09%5D%0A%7D%0A%60%60%60%0A%0A-%20Launch.json%20attributes%0A%20%20%20%20-%20type%20-%20type%20of%20configuration%20which%20maps%20to%20the%20registered%20debug%20extension%20%28node%2C%20php%2C%20go%29%0A%20%20%20%20-%20request-%20debug%20request%2C%20either%20to%20launch%20or%20attach%0A%20%20%20%20-%20name-%20friendly%20name%20which%20appears%20in%20the%20Debug%20launch%20configuration%20dropdown%0A%20%20%20%20-%20program%20-%20executable%20or%20file%20to%20run%20when%20launching%20the%20debugger%0A%20%20%20%20-%20cwd%20-%20current%20working%20directory%20for%20finding%20dependencies%20and%20other%20files%0A%20%20%20%20-%20port%20-%20port%20when%20attaching%20to%20a%20running%20process%0A%20%20%20%20-%20stopOnEntry%20-%20break%20immediately%20when%20the%20program%20launches%0A%20%20%20%20-%20internalConsoleOptions%20-%20control%20visibility%20of%20the%20Debug%20Console%20panel%20during%20a%20debugging%20session%0A%0A-%20Variable%20substitution%0A%20%20%20%20-%20%24%7BworkspaceRoot%7D%20the%20path%20of%20the%20folder%20opened%20in%20VS%20Code%0A%20%20%20%20-%20%24%7Bfile%7D%20the%20current%20opened%20file%0A%20%20%20%20-%20%24%7BrelativeFile%7D%20the%20current%20opened%20file%20relative%20to%20workspaceRoot%0A%20%20%20%20-%20%24%7BfileBasename%7D%20the%20current%20opened%20file%27s%20basename%0A%20%20%20%20-%20%24%7BfileDirname%7D%20the%20current%20opened%20file%27s%20dirname%0A%20%20%20%20-%20%24%7BfileExtname%7D%20the%20current%20opened%20file%27s%20extension%0A%20%20%20%20-%20%24%7Bcwd%7D%20the%20task%20runner%27s%20current%20working%20directory%20on%20startup%0A%0A%0A%0A%0A%0A%0A%0A%23%23%20Command%20Line%20Extension%20Management%0Ahttp%3A//code.visualstudio.com/docs/editor/extension-gallery%0A%60%60%60powershell%0Acode%20--list-extensions%0Acode%20--install-extension%20ms-vscode.cpptools%0Acode%20--uninstall-extension%20ms-vscode.csharp%0A%60%60%60%0A%0A%0A%23%23%20node.js%20hello%20world%0Ahttp%3A//code.visualstudio.com/docs/runtimes/nodejs%0A%0A%23%23%23%20%20app.js%20%uAD6C%uD604%0A%60%60%60javascript%0Avar%20msg%20%3D%20%27Hello%20World%27%3B%0Aconsole.log%28msg%29%3B%0A%60%60%60%0A%0A%23%23%23%20.vscode/launch.json%20%uC124%uC815%0A-%20%uD504%uB85C%uC81D%uD2B8%uAC00%20%uC2E4%uD589%uB420%20%uD658%uACBD%uC744%20%uC124%uC815%0A-%20runtimeExecutable%20%uC744%20node.exe%uC758%20%uC2E4%uC81C%uACBD%uB85C%uB85C%20%uC124%uC815%uD574%20%uC8FC%uB294%uAC83%uC774%20%uC911%uC694%0A%60%60%60json%0A%7B%0A%20%20%20%20//%20Use%20IntelliSense%20to%20learn%20about%20possible%20Node.js%20debug%20attributes.%0A%20%20%20%20//%20Hover%20to%20view%20descriptions%20of%20existing%20attributes.%0A%20%20%20%20//%20For%20more%20information%2C%20visit%3A%20https%3A//go.microsoft.com/fwlink/%3Flinkid%3D830387%0A%20%20%20%20%22version%22%3A%20%220.2.0%22%2C%0A%20%20%20%20%22configurations%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22node%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22request%22%3A%20%22launch%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22%uD504%uB85C%uADF8%uB7A8%20%uC2DC%uC791%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22program%22%3A%20%22%24%7BworkspaceRoot%7D/app.js%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22cwd%22%3A%20%22%24%7BworkspaceRoot%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22runtimeExecutable%22%3A%20%22C%3A%5C%5CProgram%20Files%5C%5Cnodejs%5C%5Cnode.exe%22%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22type%22%3A%20%22node%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22request%22%3A%20%22attach%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%3A%20%22%uD504%uB85C%uC138%uC2A4%uC5D0%20%uC5F0%uACB0%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22port%22%3A%205858%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22runtimeExecutable%22%3A%20%22C%3A%5C%5CProgram%20Files%5C%5Cnodejs%5C%5Cnode.exe%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%5D%0A%7D%0A%60%60%60%0A%0A%23%23%23%20Running%20Hello%20World%0A%60%60%60powershell%0APS%3E%20node%20app.js%0A%60%60%60%0A%0A%23%23%23%20Debugging%20Hello%20World%0A1.%20F9%20%3A%20%uC815%uC9C0%uC810%20%uCC0D%uAE30%0A2.%20F5%20%3A%20%uC2E4%uD589%0A%0A%0A%0A%23%23%20api-debugging%0Ahttp%3A//code.visualstudio.com/docs/extensionAPI/api-debugging%0A-%20%uAC01%20%uAC1C%uBC1C%uC5B8%uC5B4%uC758%20%uB514%uBC84%uAC70%uB97C%20%uD50C%uB7EC%uADF8%uC778%20%uD615%uD0DC%uB85C%20%uAC1C%uBC1C%uD574%uC11C%20%uBD99%uC774%uB294%20%uC6D0%uB9AC%uB97C%20%uC18C%uAC1C%uD55C%20%uAE00%0A-%20%uC774%20%uC800%uC6A9%uB7C9%uC758%20%uAC00%uBCBC%uC6B4%20%uD14D%uC2A4%uD2B8%uD3B8%uC9D1%uAE30%uAC00%20javascript%uC640%20c%23%uC758%20%uB514%uBC84%uAE45%uAE30%uB2A5%uC744%20%uC804%uBD80%uC9C0%uC6D0%uD558%uACE0%2C%20%uC790%uB3D9%uC644%uC131%2C%20evaluation%uAE4C%uC9C0%20%uAC70%uC758%20%uC644%uBCBD%uD558%uAC8C%20%uC9C0%uC6D0%uD574%uC11C%20%uC6D0%uB9AC%uAC00%20%uAD81%uAE08%uD588%uC5C8%uB294%uB370%u314E%0A-%20nodejs%20%uAC00%20v8%uC5D4%uC9C4%uC744%20%uC0AC%uC6A9%uD574%uC11C%20%uC6B4%uC601%uD558%uB294%20%uAC83%uACFC%20%uAC19%uC740%uC6D0%uB9AC%uB85C%20%uB514%uBC84%uAC70%uB97C%20%uB9CC%uB4E4%uC5C8%uB124%uC694%0A-%20%uD639%uC2DC%uB098%20%uB098%uC911%uC5D0%20nodejs%20%uB97C%20%uAE4A%uC774%20%uD29C%uB2DD%uD574%uC57C%20%uD55C%uB2E4%uBA74%20%uD639%uC2DC%20%uB418%uC6C0%uB420%uC218%uB3C4%20%uC788%uACA0%uC2B5%uB2C8%uB2E4.%0A

이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글