Skip to main content

GitHub Copilot์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ํ˜„๋Œ€ํ™”

๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ…์€ ๋ฆฌํŒฉํ„ฐ๋ฅผ ์ œ์•ˆํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด ๋ฌธ์„œ์— ํ‘œ์‹œ๋œ ์‘๋‹ต์€ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ… ์‘๋‹ต์€ ๋น„๊ฒฐ์ •์ ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋œ ์‘๋‹ต๊ณผ ๋‹ค๋ฅธ ์‘๋‹ต์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ž€ ์›์กฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์ด์ƒ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์˜ค๋ž˜๋œ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ๋ช…๋ช… ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ช…ํ™•ํ•œ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋“ฑ์˜ ์ตœ์‹  ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ํ™•์žฅ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์œ„ํ—˜์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Copilot์€ ๋‹ค์Œ์„ ํ†ตํ•ด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์˜ˆ์ œ ์‹œ๋‚˜๋ฆฌ์˜ค

์ด ์˜ˆ์ œ์—์„œ๋Š” COBOL๋กœ ์ž‘์„ฑ๋œ ๊ณ„์ • ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ดํŽด๋ณด๊ณ  ์ด๋ฅผ Node.js๋กœ ํ˜„๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. COBOL ์ฝ”๋“œ๋Š” modernize-legacy-cobol-app ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ„์ • ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ํ‚ค ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  •         `main.cob`: ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ํ•˜์œ„ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•˜๋Š” ์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
    
  •         `operations.cob`: ์‹ ์šฉ, ์ง๋ถˆ, ์ž”์•ก ๋ณด๊ธฐ์™€ ๊ฐ™์€ ๊ณ„์ • ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜์œ„ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
    
  •         `data.cob`: ๊ณ„์ • ์ž”์•ก์˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ•˜์œ„ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
    

1๋‹จ๊ณ„: ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ

ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ๋กœ์ปฌ์— ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์•„์ง ๋ณต์ œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ๋ฅผ ์ €์žฅํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Shell
git clone https://github.com/continuous-copilot/modernize-legacy-cobol-app.git

2๋‹จ๊ณ„: ํ”„๋กœ๊ทธ๋žจ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰

์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(์˜ˆ: ์˜คํ”ˆ ์†Œ์Šค GnuCOBOL ์ปดํŒŒ์ผ๋Ÿฌ)์— COBOL ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ GitHub Codespaces์˜ ๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MacOS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Homebrew๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GnuCOBOL์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Shell
brew install gnu-cobol

Codespaces๋‚˜ Ubuntu Linux ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ apt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GnuCOBOL์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Shell
sudo apt-get update && \
sudo apt-get install gnucobol

์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ , ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•˜๊ณ , ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Shell
cobc -x main.cob operations.cob data.cob -o accountsystem

ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

Shell
./accountsystem

3๋‹จ๊ณ„: ํŒŒ์ผ ๋ฐ ์ฝ”๋“œ ์„ค๋ช…

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

IDE์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ฐ ๋‹ค์Œ, ๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ… ํŒจ๋„์— ๋‹ค์Œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 1

Copilot Chat prompt
/explain #file:main.cob #file:operations.cob #file:data.cob. Create a high level overview of the app. Explain each file in detail and how they are linked.

์˜ˆ์ œ ์‘๋‹ต 1

์œ„์˜ ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

Sure! Here's a high-level overview of the COBOL application, along with detailed explanations of each file and how they are linked together.

High-Level Overview

This COBOL application simulates an account management system. It allows users to view the current balance, credit the account, debit the account, and exit the application. The application is divided into three main COBOL source files: main.cob, operations.cob, and data.cob. ...

4๋‹จ๊ณ„: ํŒŒ์ผ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ฐจํŠธ

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ํŒŒ์ผ์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @workspace๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

VS Code ๋ฐ Visual Studio์˜ ์ฑ„ํŒ… ์ฐธ๊ฐ€์ž๋Š” @workspace Copilot์—๊ฒŒ ์ž‘์—… ์˜์—ญ์˜ ๋ชจ๋“  ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Copilot๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ, ์ฝ”๋“œ์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜๋„๋ก ํ•˜๋ ค๋ฉด @workspace๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. JetBrains IDE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ @project ๋Œ€์‹  @workspace๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 2

Copilot Chat prompt
@workspace Create a sequence diagram of the app showing the data flow of the app. Create this in mermaid format so that I can render this in a markdown file.

Copilot์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ๋ณด์—ฌ ์ฃผ๋Š” ์ „์ฒด ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋Œ€ํ•œ Mermaid ๋งˆํฌ์—…์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งˆํฌ์—…์„ ๋ณต์‚ฌํ•˜์—ฌ Mermaid ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ถ™์—ฌ๋„ฃ์–ด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ๊ณ„ํš ์ƒ์„ฑ

๋ณ€๊ฒฝ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํ›„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜์„ธ์š”. @workspace๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 3

Copilot Chat prompt
@workspace The current COBOL app has no tests. Create a test plan of current business logic that I can use to validate with business stakeholders about the current implementation.

Later I would like to use this test plan to create unit and integration tests in a node.js app. I am in the middle of transforming the current COBOL app to a node.js app.

The test plan should include the following:

1. Test Case ID
2. Test Case Description
3. Pre-conditions
4. Test Steps
5. Expected Result
6. Actual Result
7. Status (Pass/Fail)
8. Comments

Create the test plan in a markdown table format. The test plan should cover all the business logic in the current COBOL app.

Convert this to markdown syntax to insert as a new file

Copilot์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Markdown ํ˜•์‹์˜ ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ„ํš์„ ๋‚˜์ค‘์— ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด TESTPLAN.md์ด๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ œ์•ˆ๋œ ๊ณ„ํš์„ ์—ฌ๊ธฐ์— ๋ณต์‚ฌํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6๋‹จ๊ณ„: ํŒŒ์ผ์„ COBOL์—์„œ Node.js๋กœ ๋ณ€ํ™˜

๋‹ค์Œ ๋‹จ๊ณ„๋Š” COBOL ํŒŒ์ผ์„ Node.js๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กฌํ”„ํŠธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์„ ์—ผ๋‘์— ๋‘๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์ปจํ…์ŠคํŠธ ์ œ๊ณต
  • ๋ช…ํ™•ํ•œ ์ง€์นจ ์ œ๊ณต
  • ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…

ํ”„๋กœ์ ํŠธ ๋‚ด์— ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ์—ฌ๊ธฐ์— ๋งŒ๋“ค๋ ค๋Š” JavaScript ํŒŒ์ผ์„ ์ €์žฅํ•˜์„ธ์š”.

Shell
mkdir temp-JS-project-directory

๊ทธ๋Ÿฐ ๋‹ค์Œ, ๋ฐ˜๋ณต์ ์œผ๋กœ COBOL ํŒŒ์ผ์„ Node.js๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 4

Copilot Chat prompt
Convert the code in #file:main.cob to node.js

์˜ˆ์ œ ์‘๋‹ต 4

Sure! Here is the equivalent Node.js code for the main.cob file. This code will simulate the same account management system functionality.

### COBOL Code:

main.cob

```COBOL
IDENTIFICATION DIVISION.
       PROGRAM-ID. MainProgram.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  CONTINUE-FLAG      PIC X VALUE 'Y'.
       01  USER-CHOICE        PIC 9.
       01  FINAL-BALANCE      PIC 9(6)V99 VALUE 1000.00.

       PROCEDURE DIVISION.
           PERFORM UNTIL CONTINUE-FLAG = 'N'
               DISPLAY "1. View Balance"
               DISPLAY "2. Credit Account"
               DISPLAY "3. Debit Account"
               DISPLAY "4. Exit"
               ACCEPT USER-CHOICE

               EVALUATE USER-CHOICE
                   WHEN 1
                       CALL 'Operations' USING 'TOTAL'
                   WHEN 2
                       CALL 'Operations' USING 'CREDIT'
                   WHEN 3
                       CALL 'Operations' USING 'DEBIT'
                   WHEN 4
                       MOVE 'N' TO CONTINUE-FLAG
                       DISPLAY "Exiting the program. Goodbye!"
                   WHEN OTHER
                       DISPLAY "Invalid choice. Please try again."
               END-EVALUATE
           END-PERFORM
           STOP RUN.

### Node.js Code: `main.js`
```javascript
const readline = require('readline');

let continueFlag = 'Y';
let finalBalance = 1000.00;

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

function displayMenu() {
    console.log("1. View Balance");
    console.log("2. Credit Account");
    console.log("3. Debit Account");
    console.log("4. Exit");
}

function handleUserChoice(choice) {
    switch (choice) {
        case '1':
            viewBalance();
            break;
        case '2':
            creditAccount();
            break;
        case '3':
            debitAccount();
            break;
        case '4':
            continueFlag = 'N';
            console.log("Exiting the program. Goodbye!");
            rl.close();
            break;
        default:
            console.log("Invalid choice. Please try again.");
            promptUser();
            break;
    }
}

function viewBalance() {
    console.log(`Current balance: ${finalBalance.toFixed(2)}`);
    promptUser();
}

function creditAccount() {
    rl.question("Enter credit amount: ", (amount) => {
        amount = parseFloat(amount);
        if (!isNaN(amount) && amount > 0) {
            finalBalance += amount;
            console.log(`Amount credited. New balance: ${finalBalance.toFixed(2)}`);
        } else {
            console.log("Invalid amount. Please try again.");
        }
        promptUser();
    });
}

function debitAccount() {
    rl.question("Enter debit amount: ", (amount) => {
        amount = parseFloat(amount);
        if (!isNaN(amount) && amount > 0) {
            if (finalBalance >= amount) {
                finalBalance -= amount;
                console.log(`Amount debited. New balance: ${finalBalance.toFixed(2)}`);
            } else {
                console.log("Insufficient funds for this debit.");
            }
        } else {
            console.log("Invalid amount. Please try again.");
        }
        promptUser();
    });
}

function promptUser() {
    if (continueFlag === 'Y') {
        displayMenu();
        rl.question("Select an option: ", handleUserChoice);
    }
}

promptUser();

This Node.js code replicates the functionality of the COBOL main.cob file, providing a simple command-line interface for viewing the balance, crediting the account, debiting the account, and exiting the application.

์ œ์•ˆ๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์ฒ ์ €ํžˆ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ์— ๋งŒ์กฑํ•˜๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๋กœ์ปฌ๋กœ ์ €์žฅํ•˜๊ณ  ๋ณ€ํ™˜์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  1. ์ด์ „์— ๋งŒ๋“  ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— main.js๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ… ํŒจ๋„์—์„œ ๋ณต์‚ฌํ•˜์—ฌ main.js์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.
  3. ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  4. ๋น„์Šทํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ operations.cob ๋ฐ data.cob์„ Node.js๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋™์ผํ•œ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹นํ•˜๋Š” JavaScript ํŒŒ์ผ operations.js ๋ฐ data.js๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  6. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์€ ๋‹ค์Œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํŒŒ์ผ์„ Node.js๋กœ ๋ณ€ํ™˜ํ•œ ํ›„์—๋Š” ํŒŒ์ผ์„ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์ž‘๋™ํ•˜๋Š” Node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ„ฐ๋ฏธ๋„์˜ ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ package.json ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    Shell
    npm init -y
    
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์™ธ๋ถ€ ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    npm install
    
  4. ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ ์•ฑ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    npm start
    

์ด ์‹œ์ ์—์„œ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›๋ž˜ COBOL ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๋ณต์ œํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž”์•ก์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ณ„์‚ฐ์ด COBOL ๋…ผ๋ฆฌ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ฒดํ™”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  •         **์ž˜๋ชป๋œ ๋™์ž‘์„ ์‹๋ณ„**ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  COBOL ๋ฒ„์ „๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
    
  •         **Copilot์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์—…ํ•˜์—ฌ** Node.js ํ”„๋กœ๊ทธ๋žจ์ด ์˜ˆ์ƒ๋Œ€๋กœ ๋™์ž‘ํ•  ๋•Œ๊นŒ์ง€ ๋…ผ๋ฆฌ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    
  •         **๋Œ€์ƒ์ด ์ง€์ •๋œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ** ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
    
    Copilot Chat prompt
    @workspace - analyze main.js and ensure the account balance updates correctly when crediting an account.
    

๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง์ด ํ•ญ์ƒ ํ•œ ๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Copilot์€ ์ƒˆ Node.js ๊ตฌํ˜„์„ ๊ตฌ์ฒดํ™”ํ•  ๋•Œ ๊ธฐ๋Šฅ์„ ๋””๋ฒ„๊น…ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8๋‹จ๊ณ„: ๋‹จ์œ„ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @workspace๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 5

Copilot Chat prompt
@workspace I would like to create unit and integration tests cases from the test plan mentioned in #file:TESTPLAN.md file. The node.js code is in the node-accounting-app folder and I am looking to generate tests for #file:operations.js file. Use a popular testing framework and also provide all the dependencies required to run the tests.

์˜ˆ์ œ ์‘๋‹ต 5

Copilot์€ JavaScript ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Jest์—์„œ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ „์ฒด ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์—์„œ ๋ฐœ์ทŒํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

โ€œThis test plan covers the main functionalities of the COBOL application, including viewing the balance, crediting the account, debiting the account, and exiting the application. The test cases are implemented using Jest, a popular testing framework for Node.js. Validate this test plan with the business stakeholders to ensure it meets the business requirements. Once validated, you can use this plan to create corresponding unit tests and integration tests for the Node.js application.โ€

9๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ ์ฝ”๋“œ ๊ตฌ์ฒดํ™”

ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ ํ›„์—๋Š” ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์‹คํ–‰ํ•˜๊ณ  ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ๋ฐ˜๋ณต์ ์ธ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋‹ค์Œ, ๋ชจ๋“  ๊ฒƒ์ด ํ†ต๊ณผ๋  ๋•Œ๊นŒ์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด Copilot์„ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ฒ„๊น…์„ ๋•๊ณ  ๊ตฌํ˜„์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ 6

Copilot Chat prompt
@workspace - analyze test failures in operations.test.js and suggest fixes to match the expected behavior.

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

10๋‹จ๊ณ„: JavaScript ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ ์œ„์น˜๋กœ ์ด๋™

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ์ƒˆ JavaScript ํ”„๋กœ์ ํŠธ๋ฅผ COBOL ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฐ–์œผ๋กœ ์˜ฎ๊ฒจ ๋ณ„๋„๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  1. COBOL ํ”„๋กœ์ ํŠธ์˜ ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. JavaScript ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ ์œ„์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    mv modernize-legacy-cobol-app new-js-project
    
  3. ์ƒˆ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    Shell
    cd new-js-project
    npm start
    

์ด์ œ ๋ฆฌํŒฉํ„ฐ๋ง๋œ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›๋ณธ COBOL ํŒŒ์ผ๊ณผ๋Š” ๋ณ„๋„๋กœ ๋ถ„๋ฆฌ๋œ ์ž์ฒด ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ”„๋กœ์ ํŠธ ํด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ด ์˜ˆ์ œ์—์„œ๋Š” COBOL๋กœ ์ž‘์„ฑ๋œ ๊ณ„์ • ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ดํŽด๋ณด๊ณ  Node.js๋กœ ํ˜„๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€์กฐ์ข…์‚ฌ ์ฑ„ํŒ…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ฐจํŠธ๋กœ ํ‘œ์‹œํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์ƒ์„ฑํ•˜๊ณ , ์ฝ”๋“œ๋ฅผ Node.js๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๊ณ  ๋” ์‰ฝ๊ฒŒ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ํ˜„๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํŒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  •         **๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ด‰๊ตฌํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.** ํ”„๋กฌํ”„ํŠธ์˜ ํ’ˆ์งˆ์ด Copilot์˜ ์ œ์•ˆ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๋ณต์žกํ•œ ์ž‘์—…์„ ๋” ์ž‘์€ ๋‹จ๊ณ„๋กœ ๋ถ„ํ• ํ•˜๊ณ , ์˜ˆ์ œ๋ฅผ ์ œ์‹œํ•˜๊ณ , Copilot์ด ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ • ๋ชฉํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋” ์›ํ™œํ•ด์ง€๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋”์šฑ ์ •ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.
    
  •         **์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค**. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— Copilot์ด ์ œ๊ณตํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
    
  •         **๋ณ€๊ฒฝ ๋‚ด์šฉ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.** ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์—๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Copilot์—์„œ ์ƒ์„ฑํ•œ ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋‹จ์œ„ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    

์‹ค์Šต

          [GitHub Copilot](https://github.com/skills/modernize-your-legacy-code-with-github-copilot) ๊ธฐ์ˆ  ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ GitHub Copilot์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ณผ์ •์„ ์—ฐ์Šตํ•ด ๋ณด์„ธ์š”.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ